我们可以用spring boot连接多个mongoDB数据源吗
Posted
技术标签:
【中文标题】我们可以用spring boot连接多个mongoDB数据源吗【英文标题】:can we connect multple mongoDB dataSources with spring boot 【发布时间】:2021-05-14 04:57:44 【问题描述】:我需要连接两个数据库,两个数据库都是MongoDB数据源,但是IP不同。IP地址我们是动态变化的, 请任何人帮助我
我正在使用 Spring boot + MongoDB,我尝试在一个应用程序中连接两个 MongoDB,但它不起作用。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于我们可以用spring boot连接多个mongoDB数据源吗的主要内容,如果未能解决你的问题,请参考以下文章
连接到多个 mongo db 主机并在 spring boot 中使用不同的数据库进行身份验证
Docker中的Spring Boot未连接到Docker中的Mongo