我已经在我的 Spring Boot
中配置了 MySQL 数据库的两个模式。应用程序并将一个数据源标记为主要数据源。
现在,我的问题是如何“使用”第二个数据源?我正在使用JpaRepository
基于方法,当我尝试将某些内容保存到驻留在第二个数据库模式中的表中时,我的 Spring boot 应用程序总是尝试在第一个数据库模式中找到该表,并最终抛出表不存在错误。
附注我在我的 Entity
中标记了第二个数据库模式正确分类。
下面是我的application.properties
文件(前缀已更改以省略 secret 名称):
# source 1
myframework.data.sql.connections.dataSource.url=jdbc:mysql://localhost:3306/schema1?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true
myframework.data.sql.connections.dataSource.user=root
myframework.data.sql.connections.dataSource.password=root
myframework.data.sql.connections.dataSource.driver-class-name=com.mysql.jdbc.Driver
myframework.data.sql.connections.dataSource.config.preferredTestQuery=select 1 from dual
# source 2
myframework.data.sql.connections.master.url=jdbc:mysql://localhost:3306/schema2?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true
myframework.data.sql.connections.master.user=root
myframework.data.sql.connections.master.password=root
myframework.data.sql.connections.master.driver-class-name=com.mysql.jdbc.Driver
最佳答案
在此博客上找到解决方案 - ScatterCode
解决方法是必须将应用程序配置类拆分为两个,并使用如下所示的内容对每个类进行注释:
配置类别 1:
@Configuration
@EnableTransactionManagement
@EnableConfigurationProperties({ MyServicefacadeProperties.class })
@EnableJpaRepositories(entityManagerFactoryRef = "myEntityManagerFactory", transactionManagerRef = "myTransactionManager", basePackages = {
"com.myorg.foo" })
配置类别 2:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "masterEntityManagerFactory", transactionManagerRef = "masterTransactionManager", basePackages = {
"com.myorg.foo.master" })
一个数据源应驻留在第一个配置类中,第二个数据源应驻留在另一个配置类中。另外,将 Entity 类和 JpaRepository 接口(interface)移动到相应的包中,如上面注释中所示。
干杯
关于java - Spring Boot - 配置了两个数据源 - 如何使用第二个数据源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46270543/