春季启动负载2 /多个数据源(带有yml文件)

时间:2019-05-12 14:01:58

标签: spring spring-boot spring-data-jpa multiple-databases

问题:有没有一种更干净的方法可以使用SpringBoot从属性文件中加载多个数据源?

复杂度:9/10。

目标:Goal:一个Spring应用程序,用于将数据从一个数据库(旧版Db2数据库)传输到另一个数据库(现代MariaDB数据库)。

Spring Data JPA

所有实体(接口)扩展JpaRepository

令我感到惊讶的是,Spring并没有使它变得更容易。 我最终将解决方案分为2个微服务,每个微服务负责每个数据源。完美运行,但要求将其保留为单个应用程序。

持久性软件包:

旧版软件包内部:

  • 实体
    • LegacyPerson
    • LegacyAccount
  • 回购
    • LegacyPersonJpaRepo
    • LegacyAccountJpaRepo

在现代包装内:

  • 实体
    • ModernPerson
    • ModernAccount
  • 回购
    • ModernPersonJpaRepo
    • ModernAccountJpaRepo

我尝试了以下步骤(没有运气):

Configure SpringBoot App with Two DataSources

Another example

And this one too

注意:

    两个数据源的
  • spring.jpa.hibernate.ddl-auto属性是不同的。

  • 两个数据源都使用spring.jpa.database-platform属性中指定的不同方言。

以下指定的Yml文件:

---
########## Legacy Datasource ################
spring:
  datasource:
    name: legacyDS
    username: db2inst1
    password: password
    driver-class-name: com.ibm.db2.jcc.DB2Driver
    url: jdbc:db2://localhost:50000/legacyDB
    sql-script-encoding: UTF-8

  ###################  Hibernate Settings ###################
  jpa.database-platform: org.hibernate.dialect.DB2Dialect
  jpa.database: default
  jpa.show-sql: true
  jpa.hibernate.ddl-auto: none
  jpa.properties.hibernate.show_sql: true
  jpa.properties.hibernate.use_sql_comments: true
  jpa.properties.hibernate.format_sql: true

---
############# Modern Datasource ################
spring:
  datasource:
    name: modernDS
    username: root
    password:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/modernDB
    sql-script-encoding: UTF-8

  ###################  Hibernate Settings ###################
  jpa.database-platform: org.hibernate.dialect.MariaDB53Dialect
  jpa.database: default
  jpa.show-sql: true
  jpa.hibernate.ddl-auto: create
  jpa.properties.hibernate.show_sql: true
  jpa.properties.hibernate.use_sql_comments: true
  jpa.properties.hibernate.format_sql: true

这是春天!人们原本希望这一挑战相当容易,但它却不必要地复杂。

0 个答案:

没有答案