【发布时间】:2021-05-14 04:57:44
【问题描述】:
我需要连接两个数据库,两个数据库都是MongoDB数据源,但是IP不同。IP地址我们是动态变化的, 请任何人帮助我
我正在使用 Spring boot + MongoDB,我尝试在一个应用程序中连接两个 MongoDB,但它不起作用。
【问题讨论】:
标签: mongodb spring-boot spring-data-jpa
我需要连接两个数据库,两个数据库都是MongoDB数据源,但是IP不同。IP地址我们是动态变化的, 请任何人帮助我
我正在使用 Spring boot + MongoDB,我尝试在一个应用程序中连接两个 MongoDB,但它不起作用。
【问题讨论】:
标签: mongodb spring-boot spring-data-jpa
我用 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
【讨论】: