Вопрос: Есть ли более чистый способ загрузки более 1 источника данных из файла свойств с помощью SpringBoot?
Сложность: 9/10.
Цель: приложение Spring, которое передает / преобразует данные из одной базы данных (устаревшая база данных Db2) в другую (современная база данных MariaDB).
Spring Data JPA
Все сущности (интерфейсы) расширяют JpaRepository
Я удивлен, что Spring не делает это легче.
В итоге я разделил решение на 2 микросервиса, каждый из которых отвечал за каждый источник данных. Работает отлично, но требуется, чтобы это было единое приложение.
Постоянство Пакеты:
Внутри унаследованного пакета:
- объект
- LegacyPerson
- LegacyAccount
- репо
- LegacyPersonJpaRepo
- LegacyAccountJpaRepo
Внутри современного пакета:
- объект
- ModernPerson
- ModernAccount
- репо
Я попробовал шаги (без удачи), указанные в:
Настройка приложения SpringBoot с двумя источниками данных
Другой пример
И этот тоже
Примечание:
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
Это весна! Можно было бы ожидать, что этот вызов будет довольно легким, но он излишне сложный.