当前位置: 首页 > 知识库问答 >
问题:

带Spring boot的MongoDB配置-抽象MongoConfiguration

夏侯涵映
2023-03-14

我正在开发一个REST API与Spring引导v2.0.0。RELEASE与mongoDB耦合。使用sping-boot-starter-data-mongob连接MongoDB im。

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

因此,我使用了AbstractMongoConfigance并扩展了它,以便提供上面提到的配置,例如每个主机的连接。这是正确的方法吗?

共有1个答案

徐帅
2023-03-14

我过去常常创建外部属性文件,可以尽可能多地添加这些文件。我把属性读入地图

@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;
}

并为每个属性文件创建新的数据源,然后将它们放入另一个mapMap

@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());

然后创建SQL会话

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

希望这对你有帮助。

 类似资料:
  • 在我们的软件,我们使用spring Java配置。我们有一个设置,其中一个配置扩展了一个抽象配置。请看一下这个测试案例: 其思想是,覆盖了并且在创建的ApplicationContext中只有一个类型的bean位于名称之下。 结果是: 所以它说,有两个bean(两个实例--每个名称一个)--甚至更令人吃惊的是:创建这两个bean都使用了相同的方法()。 这种行为在我们看来很奇怪:我们希望sprin

  • 我有一个通用映射器: 在编译时,它会生成以下错误:无法将属性“objects”映射到“dto”。考虑声明/实现一个映射方法:“”。 当我实现map方法时,如错误中所示,我有以下错误:不能为泛型类型变量源生成映射方法。

  • 我将使用Ehcache和Springboot。我只是想知道在处理大量请求时,什么会是最佳配置。 在直播期间,我们可能会收到超过30000 req/h。虽然在开发中,我们无法生成此方案。 你能帮我如何计算内存,以创建一个最佳配置,应在Prod中完美工作。 我检查了Postman中的响应大小,在Dev中为3-5 kb,因此我保留了以下配置,但不确定它会有多好。我们的内存大小为2GB(在prod中,我们

  • 我们可以使用AbstractMongoConfiguration(http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/config/AbstractMongoConfiguration.html)进行mongob配置。此外,我们可以使用application.prop

  • 我有一个关于春豆的问题。 有父类parent和构造函数(没有任何setter)。 Object1 obj1-对于任何子实例,它都是相同的对象。Object2 obj2、Object3 obj3-对于任何实例都可以是不同的 若我为父对象使用setter(我不能更改它),我可以声明抽象bean,为它设置object1obj1,然后我可以将它用作抽象bean(只设置obj2和obj3引用/值)。 是否有

  • <dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>