Spring Boot:如何正确配置和使用多个数据源

时间:2019-05-24 15:20:57

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

我正在尝试在Spring Boot with JPA 2.1.4.RELEASE中正确设置多个数据源。 设置如下所示:

  • DEV :1个服务器,具有2个数据库:DB1DB2DB1ABC表,而DB2XYZ表。
  • PROD :2个服务器 PROD1 PROD2 均实时运行。每个 PROD 服务器都具有与 DEV 相同的设置,即 PROD1 具有DB1DB2;和 PROD2 也有DB1DB2

到目前为止,我已经成功完成了 DEV 设置。我有2种配置:

  1. 用于DB1
  2. 用于DB2

然后我有2个存储库:

  1. 用于ABC的{​​{1}}
  2. 用于DB1的{​​{1}}

现在在 PROD 中,我需要使用Spring Boot在单个事务中将数据写入两个服务器( PROD1 2 )。

我可以看到一个示例here,该示例试图提供某种解决方案,但是问题是它将要求创建重复的Dao和Service类,我认为这不是解决此问题和需要的好方法了解如何在application.properties和DataSourceConfig.java

中正确配置这些属性

application-dev.properties

XYZ

application-prod.properties

DB2

Db1DataSourceConfig.java

datasource.db1.url=jdbc:sqlserver://localhost:1234;databaseName=db1;
datasource.db1.username=user
datasource.db1.password=pwd
datasource.db1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

datasource.db2.url=jdbc:sqlserver://localhost:1234;databaseName=db2;
datasource.db2.username=user
datasource.db2.password=pwd
datasource.db2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

Db2DataSourceConfig.java

datasource.prod1.db1.url=jdbc:sqlserver://prodserver1:1234;databaseName=db1;
datasource.prod1.db1.username=user
datasource.prod1.db1.password=pwd
datasource.prod1.db1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

datasource.prod1.db2.url=jdbc:sqlserver://prodserver1:1234;databaseName=db2;
datasource.prod1.db2.username=user
datasource.prod1.db2.password=pwd
datasource.prod1.db2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

datasource.prod2.db1.url=jdbc:sqlserver://prodserver2:1234;databaseName=db1;
datasource.prod2.db1.username=user
datasource.prod2.db1.password=pwd
datasource.prod2.db1.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

datasource.prod2.db2.url=jdbc:sqlserver://prodserver2:1234;databaseName=db2;
datasource.prod2.db2.username=user
datasource.prod2.db2.password=pwd
datasource.prod2.db2.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

0 个答案:

没有答案