关闭数据源和事务的自动配置,启动类上
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class})
1、pom.xml配置
spring:
profiles:
active: dev
application:
name: wangyk-demo
jpa:
hibernate:
ddl-auto: update
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
properties:
hibernate:
dialect: com.wangyk.demo.config.MySQL5InnoDBDialectUtf8mb4
open-in-view: false
customer:
#primary datasource
primary:
datasource:
jdbcUrl: jdbc:mysql://localhost:3306/user?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false
username: root
password: 12345678
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 100
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
maxWait: 60000
timeBetweenEvictionRunsMillis: 30000
#secondary datasource
secondary:
datasource:
jdbcUrl: jdbc:mysql://localhost:3306/order?createDatabaseIfNotExist=true&autoReconnect=true&useSSL=false
username: root
password: 12345678
driver-class-name: com.mysql.jdbc.Driver
initialSize: 5
minIdle: 5
maxActive: 100
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
maxWait: 60000
timeBetweenEvictionRunsMillis: 30000
2、DataSource配置
@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "customer.primary.datasource")
public DataSource primaryDatasource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix = "customer.secondary.datasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
3、repository的配置
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"com.wangyk.demo.dao.primary"},//这里要指向你的repository路径
entityManagerFactoryRef = "primaryEntityManagerFactory",
transactionManagerRef = "primaryTransactionManager")
public class PrimaryJpaConfiguration {
@Autowired(required = false)
private PersistenceUnitManager persistenceUnitManager;
@Resource
private JpaProperties jpaProperties;
@Resource
private HibernateProperties hibernateProperties;
@Bean
@Primary
public EntityManagerFactoryBuilder primaryEntityManagerFactoryBuilder() {
AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
return new EntityManagerFactoryBuilder(adapter,
jpaProperties.getProperties(), this.persistenceUnitManager);
}
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
@Qualifier("primaryEntityManagerFactoryBuilder") EntityManagerFactoryBuilder builder,
@Qualifier("primaryDataSource") DataSource primaryDataSource) {
return builder
.dataSource(primaryDataSource)
.packages("com.wangyk.demo.domain.primary")
.persistenceUnit("primary")
.properties(hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings()))
.build();
}
@Bean
@Primary
public JpaTransactionManager primaryTransactionManager(@Qualifier("primaryEntityManagerFactory") EntityManagerFactory primaryEntityManagerFactory) {
return new JpaTransactionManager(primaryEntityManagerFactory);
}
}
/**
* @author :wangyongkang
* @date :Created in 2019/11/27 3:07 下午
* @description: secondary数据源的配置
* @modified By:
* @version:
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"com.wangyk.demo.dao.secondary"},//这里要指向你的repository路径
entityManagerFactoryRef = "secondaryEntityManagerFactory",
transactionManagerRef = "secondaryTransactionManager")
public class SecondaryJpaConfiguration {
@Autowired(required = false)
private PersistenceUnitManager persistenceUnitManager;
@Resource
private JpaProperties jpaProperties;
@Resource
private HibernateProperties hibernateProperties;
@Bean
public EntityManagerFactoryBuilder secondaryEntityManagerFactoryBuilder() {
AbstractJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
return new EntityManagerFactoryBuilder(adapter,
jpaProperties.getProperties(), this.persistenceUnitManager);
}
@Bean
public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory(
@Qualifier("secondaryEntityManagerFactoryBuilder") EntityManagerFactoryBuilder builder,
@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
return builder
.dataSource(secondaryDataSource)
.packages("com.wangyk.demo.domain.secondary")
.persistenceUnit("secondary")
.properties(hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings()))
.build();
}
@Bean
public JpaTransactionManager secondaryTransactionManager(@Qualifier("secondaryEntityManagerFactory") EntityManagerFactory secondaryEntityManagerFactory) {
return new JpaTransactionManager(secondaryEntityManagerFactory);
}
}
4、MySql引擎
public class MySQL5InnoDBDialectUtf8mb4 extends MySQL5Dialect {
@Override
public String getTableTypeString() {
return "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_unicode_ci";
}
}