我正在使用spring boot v2.0.0.RELEASE和mongoDB开发REST API。使用spring-boot-starter-data-mongodb连接MongoDB。
在application.properties中,我能够更改与mongodb相关的基本配置,但我的问题是在提升属性时应该是管理这些配置的最佳方法。例如,无法通过application.properties更改每个主机属性的连接。
因此我使用了AbstractMongoConfiguration并对其进行了扩展,以便提供上述配置,例如每个主机的连接。这是正确的方法吗?
答案 0 :(得分:1)
我曾经创建过外部属性文件,可以添加尽可能多的文件。我为每个属性文件将属性读入Map<Key, properties>
。
@PostConstruct
public void properties() throws Exception{
// read properties and put them into map
crmPropertiesMap.put(key, properties);
}
@Bean(name = "crmPropertiesMap")
public Map<String, CRMProperties> getCrmPropertiesMap() {
return crmPropertiesMap;
}
为每个属性文件创建新的DataSource,然后将它们放入另一个地图Map<Key, DataSource>
。
@Bean
public Map<String, DataSource> dataSourceMap() {
Map<String, DataSource> dataSourceMap = new HashMap<>();
for( CRMProperties crmProperties : crmPropertiesMap.values())
{
// create DataSource
dataSourceMap.put(crmProperties.getHotelName(),
DataSourceBuilder.create()
.url(crmProperties.getSpringDatasourcePrimaryUrl())
.driverClassName(crmProperties.getSpringDatasourcePrimaryDriverClassName())
.username(crmProperties.getSpringDatasourcePrimaryUsername())
.password(crmProperties.getSpringDatasourcePrimaryPassword())
.build());
然后创建SqlSession
private SqlSession createSqlSession(String id) {
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment(id, transactionFactory, dataSourceMap.get(id));
Configuration configuration = new Configuration(environment);
configuration.addMapper(SaleInfoMapper.class);
return new SqlSessionTemplate(sqlSessionFactoryBuilder.build(configuration));
}
@Bean
public Map<String, SqlSession> sqlSessionMap() {
Map<String, SqlSession> sqlSessionMap = new HashMap<>();
for ( String id : dataSourceMap.keySet() )
{
sqlSessionMap.put(id, createSqlSession(id));
}
return sqlSessionMap;
}
然后动态获取SqlSession。
SqlSession sqlSession = sqlSessionMap.get(key);
希望这会对你有所帮助。