【问题标题】:can we connect multple mongoDB dataSources with spring boot我们可以用spring boot连接多个mongoDB数据源吗
【发布时间】:2021-05-14 04:57:44
【问题描述】:

我需要连接两个数据库,两个数据库都是MongoDB数据源,但是IP不同。IP地址我们是动态变化的, 请任何人帮助我

我正在使用 Spring boot + MongoDB,我尝试在一个应用程序中连接两个 MongoDB,但它不起作用。

【问题讨论】:

    标签: mongodb spring-boot spring-data-jpa


    【解决方案1】:

    我用 2 个数据源连接了一个应用程序......但使用关系数据库,使用 jpa......也许配置有效。我将所有更改为 One DbConfig... 如果您需要,只需添加更多并删除 de @Primary 注释

    在 jpa 中,命名空间非常重要,但也许你不需要存储库、服务和实体,使用 mongo

    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(entityManagerFactoryRef = "oneEntityManagerFactory",
            basePackages = {"com.one.repository", "com.one.service"})
    public class OneDbConfig {
    
        public static final String JAVA_COMP_ENV = "java:comp/env/";
    
        @Value("${one.datasource.jndi-name}")
        private String jndi;
    
        @Primary
        @Bean(name = "oneDataSource")
        @ConfigurationProperties(prefix = "one.datasource")
        public DataSource dataSource() throws NamingException {
            Context initContext = new InitialContext();
            Context envContext = (Context) initContext.lookup(JAVA_COMP_ENV);
            DataSource bds =  (BasicDataSource) envContext.lookup(jndi);
            String url = ((BasicDataSource) bds).getUrl();
            String username = ((BasicDataSource) bds).getUsername();
            String password = ((BasicDataSource) bds).getPassword();
            String driverClass = ((BasicDataSource) bds).getDriverClassName();
            return DataSourceBuilder.create().url(url).username(username).password(password).driverClassName(driverClass).build();
        }
    
        @Primary
        @Bean(name = "oneEntityManagerFactory")
        public LocalContainerEntityManagerFactoryBean entityManagerFactory(
                EntityManagerFactoryBuilder builder, @Qualifier("oneDataSource") DataSource dataSource) {
    
            Map<String, String> conf = new HashMap<String, String>();
            conf.put("hibernate.connection.datasource", JAVA_COMP_ENV + jndi);
            conf.put("hibernate.id.new_generator_mappings", "false");
            return builder.dataSource(dataSource).packages("com.one.entities").persistenceUnit("one").properties(conf).build();
        }
    
        @Primary
        @Bean(name = "oneTransactionManager")
        public PlatformTransactionManager transactionManager(
                @Qualifier("oneEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
            return new JpaTransactionManager(entityManagerFactory);
        }
    
       
    
    }
    

    别忘了设置属性...

    one.datasource.jndi-name=jdbc/oneDS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2020-12-25
      • 2020-01-14
      • 1970-01-01
      • 2018-07-13
      • 2015-07-17
      • 2018-06-13
      相关资源
      最近更新 更多