弹簧+ Jpa多数据源配置的方法示例

  

今天临下班时遇到了一个需求,我的管理平台需要从不同的数据库中获取数据信息,这就需要进行弹簧的多数据源配置,对于这种配置,第一次永远都是痛苦的,不过经历了这次的折磨,今后肯定会对这种配置印象深刻。我们这里简单回顾一下流程。

  

我们配置了两个数据库,一个是公司的数据库,另一个是我本地的一个数据库。首先是application.yml的配置(其中对于公司的数据库我们采取了假的地址,而本机的数据库是真是存在对应的表和库的)

  

数据库信息:

  

弹簧+ Jpa多数据源配置的方法示例

  

数据表信息:

  

弹簧+ Jpa多数据源配置的方法示例

  

1, application.yml         数据源:   主:   url: jdbc: mysql://companyurl.com: 5002/db1   用户名:unameq   密码:passwd1   driver-class-name: com.mysql.jdbc.Driver   二级:   url: jdbc: mysql://localhost: 3306/django_test   用户名:根   密码:123456   driver-class-name: com.mysql.jdbc.Driver   jpa:   数据库平台:org.hibernate.dialect.MySQL5Dialect   hibernate:   ddl-auto:更新   show-sql:真      

2,创建总的数据源配置文件以及两个Repostory的配置文件PrimaryConfig以及SecondaryConfig

  

DataSourceConfig         @ configuration   公开课DataSourceConfig {   @ bean (name=" primaryDataSource ")   @ qualifier (“primaryDataSource”)   @ConfigurationProperties(前缀=皊pring.datasource.primary”)//对应的数据库配置信息   公共数据源primaryDataSource () {   .build返回DataSourceBuilder.create () ();   }      @ bean (name=" secondaryDataSource ")   @ qualifier (“secondaryDataSource”)   @Primary   @ConfigurationProperties(前缀=皊pring.datasource.secondary”)   公共数据源secondaryDataSource () {   .build返回DataSourceBuilder.create () ();   }   }      

PrimaryConfig         @ configuration   @EnableTransactionManagement   @EnableJpaRepositories (   entityManagerFactoryRef=" entityManagerFactoryPrimary ",   transactionManagerRef=" transactionManagerPrimary ",   basePackages={"数据访问层所在的包"})//设置库所在位置   公开课PrimaryConfig {      @ autowired @ qualifier (“primaryDataSource”)   私人数据源primaryDataSource;      @Primary   @ bean (name=" entityManagerPrimary ")   公共EntityManager EntityManager (EntityManagerFactoryBuilder builder) {   .createEntityManager返回entityManagerFactoryPrimary (builder) .getObject () ();   }      @Primary   @ bean (name=" entityManagerFactoryPrimary ")   公共LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {   恢复建设者   .dataSource (primaryDataSource)   . properties (getVendorProperties (primaryDataSource))   .packages(“实体类所在的包”)//设置实体类所在位置   .persistenceUnit (“primaryPersistenceUnit”)   .build ();   }      @ autowired   私人JpaProperties JpaProperties;      私人Map<字符串,String>getVendorProperties数据源(DataSource) {   返回jpaProperties.getHibernateProperties(数据源);   }      @Primary   @ bean (name=" transactionManagerPrimary ")   公共PlatformTransactionManager transactionManagerPrimary (EntityManagerFactoryBuilder builder) {   返回新JpaTransactionManager (entityManagerFactoryPrimary (builder) .getObject ());   }   }      

SecondaryConfig         @ configuration   @EnableTransactionManagement   @EnableJpaRepositories (   entityManagerFactoryRef=" entityManagerFactorySecondary ",   transactionManagerRef=" transactionManagerSecondary ",   basePackages={"数据访问层所在的包"})//设置库所在位置   公开课SecondaryConfig {      @ autowired   @ qualifier (“secondaryDataSource”)   私人数据源secondaryDataSource;      @ bean (name=" entityManagerSecondary ")   公共EntityManager EntityManager (EntityManagerFactoryBuilder builder) {   .createEntityManager返回entityManagerFactorySecondary (builder) .getObject () ();   }      @ bean (name=" entityManagerFactorySecondary ")   公共LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary (EntityManagerFactoryBuilder builder) {   恢复建设者   .dataSource (secondaryDataSource)   . properties (getVendorProperties (secondaryDataSource))   .packages(“实体类所在的包”)//设置实体类所在位置   .persistenceUnit (“secondaryPersistenceUnit”)   .build ();   }      @ autowired   私人JpaProperties JpaProperties;      私人Map

弹簧+ Jpa多数据源配置的方法示例