環境:springboot 2.1.4
數據源引入方式
- 數據源一
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactoryPrimary", transactionManagerRef = "transactionManagerPrimary", basePackages = {"com.xxj.primary.repository"} ) public class SourceDataConfig { @Autowired private HibernateProperties hibernateProperties; @Autowired private JpaProperties jpaProperties; private Map<String, Object> getVendorProperties() { return hibernateProperties.determineHibernateProperties( jpaProperties.getProperties(), new HibernateSettings() ); } @Bean(name = "primaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.primary") # 配置數據源獲取的淶源 public DataSource primaryDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "entityManagerFactoryPrimary") public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) { return builder.dataSource(dataSource) .properties(getVendorProperties()) .packages("com.xxj.primary.model") .persistenceUnit("primaryPersistenceUnit") .build(); } @Bean(name = "transactionManagerPrimary") public PlatformTransactionManager propertyTransactionManager( @Qualifier("entityManagerFactoryPrimary") EntityManagerFactory propertyEntityManagerFactory) { return new JpaTransactionManager(propertyEntityManagerFactory); } }
- 數據源二
@Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "entityManagerFactorySecond", transactionManagerRef = "transactionManagerSecond", basePackages = {"com.xxj.second.repository"} ) public class SecondDataConfig { @Autowired private HibernateProperties hibernateProperties; @Autowired private JpaProperties jpaProperties; private Map<String, Object> getVendorProperties() { Map<String, Object> map = hibernateProperties.determineHibernateProperties( jpaProperties.getProperties(), new HibernateSettings());return map; } @Primary @Bean(name = "secondDataSource") @ConfigurationProperties(prefix = "spring.datasource.second") public DataSource targetDataSource(){ return DataSourceBuilder.create().build(); } @Primary @Bean(name = "entityManagerFactorySecond") public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder builder, @Qualifier("secondDataSource") DataSource dataSource) { return builder.dataSource(dataSource) .properties(getVendorProperties()) .packages("com.xxj.second.model") .persistenceUnit("targetPersistenceUnit") .build(); } @Primary @Bean(name = "transactionManagerSecond") public PlatformTransactionManager propertyTransactionManager( @Qualifier("entityManagerFactorySecond") EntityManagerFactory propertyEntityManagerFactory) { return new JpaTransactionManager(propertyEntityManagerFactory); } }
數據源配置
spring.datasource.primary.jdbc-url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false&requireSSL=false spring.datasource.primary.username = root spring.datasource.primary.password = 1234567 spring.datasource.primary.driver-class-name = com.mysql.jdbc.Driver spring.datasource.second.jdbc-url = jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai&useSSL=false&rewriteBatchedStatements=true spring.datasource.second.username = root spring.datasource.second.password = 1234567 spring.datasource.second.driver-class-name = com.mysql.jdbc.Driver
springboot 2.x版本jpa多數據源引入跟1.x版本有些不太一樣,還需要額外注意。
- 獲取jpa配置的方式
- 數據源配置為jdbc-url
要注意:packages不能引用相同的model,否則會導致數據庫卡死。