Spring Boot 常用应用属性
Posted
技术标签:
【中文标题】Spring Boot 常用应用属性【英文标题】:Spring boot common application properties 【发布时间】:2018-05-30 06:43:36 【问题描述】:当我们使用像 cassandra/mongo 这样的任何数据库时,Spring Boot 应用程序属性需要遵循 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html 的约定。如果我们想为 DB 设置声明自己的属性而不是 spring-boot 约定,那么设置 DB 需要执行哪些步骤?
【问题讨论】:
【参考方案1】:您可以这样做:Spring boot - custom variables in Application.properties
或者您可以在 application.properties 文件中创建自己的属性,例如:
my.property.someDb.hostname=http://wherever.com
然后在您的代码中引用它,例如:
@Value("$my.property.someDb.hostname")
private String someDbHostname;
更新 1:
如果您想使用自己的属性创建 MongoDb,您必须在 @Configuration
文件中定义正确的 Java Bean。对于 MongoDB,它可能如下所示:
@Configuration
public class MyMongoConfig extends AbstractMongoConfiguration
@Value("$my.property.someDb.hostname")
private String someDbHostname;
@Value("$my.property.someDb.myOwnPortDefinition")
private int myOwnPortDefinition;
@Value("$my.property.someDb.myDatabasename")
private String myDatabasename;
@Override
protected String getDatabaseName()
return myDatabasename;
@Override
@Bean
public Mongo mongo() throws Exception
return new MongoClient(someDbHostname, myOwnPortDefinition );
@Bean
public MongoTemplate mongoTemplate() throws Exception
return new MongoTemplate(mongo(), getDatabaseName());
【讨论】:
我不是在问如何在 spring-boot 应用程序中使用属性,我想知道当我使用自己的属性而不是该列表中的属性,以及我们应该如何处理它们。 那么请指定数据库和使用的驱动程序。您是否正在访问例如MongoDb 通过 Morphia/Spring Data/Plain mongo 驱动程序? 可以说它是带有 spring 数据的 mongo db。【参考方案2】:这些是您在 Spring Boot 中获取 Jdbc、mongodb 等数据源所需的基本步骤
需要一个启用了事务管理的@Configuration
类
就可以了
读取数据源的环境属性,即数据源
网址、用户名、密码等
为数据源、会话工厂、事务管理器创建 bean
等
完成上述所有设置后,在您的
消费者初始化spring应用上下文
这里有一些在spring boot中连接mongodb数据源的sn-ps
DataSourceConfiguration.java
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example.xyz")
public class DatabaseEntityConfiguration
public static final String DATABASE_ENTITY_DATA_SOURCE = "databaseDataSource";
public static final String DATABASE_HIBERNATE_PROPERTIES = "databaseHibernateProperties";
public static final String DATABASE_ENTITY_SESSION_FACTORY = "databaseSessionFactory";
public static final String DATABASE_ENTITY_TRANSACTION_MANAGER = "databaseTransactionManager";
public static final String DATABASE_ENTITY_DB_CONFIG_DAO = "dmdatabaseDbConfigDao";
public static final String DATABASE_ENTITY_DB_CONFIG_SERVICE = "dmdatabaseDbConfigService";
private static final String ENTITY_PACKAGE = "com.example.xyz.database.entity";
@Autowired
private org.springframework.core.env.Environment environment;
@Bean(name = DATABASE_ENTITY_DATA_SOURCE)
public DataSource databaseEntitydataSource() throws PropertyVetoException
// mongodb properties
String driverClass = environment.getProperty("databaseEntity.mongodb.driverClassName");
String mongodbUrl = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.url");
String user = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.username");
String password = environment.getProperty("databaseEntity.mongodb.dmdatabaseDataSource.password");
Preconditions.checkArgument(StringUtils.isNotBlank(driverClass), "The property mongodb driverClass must not be null or blank");
Preconditions.checkArgument(StringUtils.isNotBlank(mongodbUrl), "The property mongodb mongodbUrl must not be null or blank");
Preconditions.checkArgument(StringUtils.isNotBlank(user), "The property mongodb user must not be null or blank");
Preconditions.checkArgument(StringUtils.isNotBlank(password), "The property mongodb password must not be null or blank");
dataSource.setDriverClass(driverClass);
dataSource.setmongodbUrl(mongodbUrl);
dataSource.setUser(user);
dataSource.setPassword(password);
return dataSource;
@Bean(name = DATABASE_ENTITY_SESSION_FACTORY)
public AnnotationSessionFactoryBean databaseEntitySessionFactory() throws PropertyVetoException
AnnotationSessionFactoryBean annotationSessionFactoryBean = new AnnotationSessionFactoryBean();
annotationSessionFactoryBean.setDataSource(databaseEntitydataSource());
annotationSessionFactoryBean.setPackagesToScan(ENTITY_PACKAGE);
annotationSessionFactoryBean.setAnnotatedClasses(DBConfig.class);
annotationSessionFactoryBean.setHibernateProperties(databaseEntityHibernateProperties());
return annotationSessionFactoryBean;
@Bean(name = DATABASE_ENTITY_TRANSACTION_MANAGER)
public HibernateTransactionManager databaseEntityTransactionManager() throws PropertyVetoException
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(databaseEntitySessionFactory().getObject());
return transactionManager;
【讨论】:
以上是关于Spring Boot 常用应用属性的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 配置属性 之 spring.profiles.include