Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Spring引导的MongoDB配置-抽象MongoConfiguration_Java_Spring_Mongodb_Spring Boot - Fatal编程技术网

Java 带Spring引导的MongoDB配置-抽象MongoConfiguration

Java 带Spring引导的MongoDB配置-抽象MongoConfiguration,java,spring,mongodb,spring-boot,Java,Spring,Mongodb,Spring Boot,我正在使用SpringBootV2.0.0.RELEASE和mongoDB开发RESTAPI。使用spring引导启动器数据MongoDB连接MongoDB im 在application.properties中,我可以更改与mongodb相关的基本配置,但我的问题是,当涉及高级属性时,管理这些配置的最佳方式应该是什么。例如,不能通过application.properties更改每个主机的连接属性 因此,我使用AbstractMongoConfiguration并对其进行了扩展,以便提供上述配

我正在使用SpringBootV2.0.0.RELEASE和mongoDB开发RESTAPI。使用spring引导启动器数据MongoDB连接MongoDB im

在application.properties中,我可以更改与mongodb相关的基本配置,但我的问题是,当涉及高级属性时,管理这些配置的最佳方式应该是什么。例如,不能通过application.properties更改每个主机的连接属性


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

我曾经创建过外部属性文件,可以尽可能多地添加这些文件。我将属性读入每个属性文件的
映射

@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;
}
希望这对你有帮助

@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());
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 = sqlSessionMap.get(key);