Spring Boot - 配置了两个数据源 - 如何使用第二个数据源?

时间:2017-09-18 01:51:14

标签: java mysql jpa spring-boot spring-data

我在Spring Boot应用程序中配置了MySQL数据库中的两个模式,并将一个数据源标记为主数据库。

现在,我的问题是我怎样才能使用"第二个数据源?我正在使用基于JpaRepository的方法,当我尝试将某些东西保存到驻留在第二个DB模式中的表时,我的Spring启动应用程序总是尝试在第一个DB模式中找到该表,并最终抛出表不存在错误。

P.S。我已正确地在Entity类中标记了第二个数据库模式。

以下是我的application.properties文件(前缀已更改为省略机密名称):

# 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

1 个答案:

答案 0 :(得分:1)

在此博客上找到解决方案 - 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" })

一个dataSource应该驻留在第一个配置类中,第二个应该驻留在另一个配置类中。此外,将Entity类和JpaRepository接口移动到相应的包中,如上面的注释中所示。

干杯