使用Spring启动的MongoDB配置 - AbstractMongoConfiguration

时间:2018-04-10 05:45:35

标签: java spring mongodb spring-boot

我正在使用spring boot v2.0.0.RELEASE和mongoDB开发REST API。使用spring-boot-starter-data-mongodb连接MongoDB。

在application.properties中,我能够更改与mongodb相关的基本配置,但我的问题是在提升属性时应该是管理这些配置的最佳方法。例如,无法通过application.properties更改每个主机属性的连接。

因此我使用了AbstractMongoConfiguration并对其进行了扩展,以便提供上述配置,例如每个主机的连接。这是正确的方法吗?

1 个答案:

答案 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);

希望这会对你有所帮助。