1、配置文件中添加数据库连接配置
spring:
profiles: dev
datasource:
primary:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/my_system?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: 123456
side:
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/my_system_side?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
username: root
password: 123456
2、添加配置文件,对应1中定义的主从数据库名称primary、side等
@Configuration
public class DataSourceConfig {
/***
* 配置主数据源
* @return
*/
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
/****
* 配置数据源
* @return
*/
@Bean(name = "sideDataSource")
@Qualifier("sideDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.side")
public DataSource sideDataSource() {
return DataSourceBuilder.create().build();
}
}
3、分别创建各个数据库的jpa配置。要注意实体类和数据库操作类的路径
Primary
@Configuration
@EnableJpaRepositories(
basePackages = "com.loit.venus.db.dao.primary",
entityManagerFactoryRef = "primaryEntityManagerFactoryBean",
transactionManagerRef = "primaryTransactionManager")
@EnableTransactionManagement
public class PrimaryConfiguration {
//第一个数据源,可以不加Qualifier
@Autowired
@Qualifier("primaryDataSource")
private DataSource dataSource;
//jpa其他参数配置
@Autowired
private JpaProperties jpaProperties;
//实体管理工厂builder
@Autowired
private EntityManagerFactoryBuilder factoryBuilder;
/**
* 配置第一个实体管理工厂的bean
*
* @return
*/
@Bean(name = "primaryEntityManagerFactoryBean")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
return factoryBuilder.dataSource(dataSource)
//这一行的目的是加入jpa的其他配置参数比如(ddl-auto: update等)
//当然这个参数配置可以在事务配置的时候也可以
.properties(jpaProperties.getProperties())
.packages("com.loit.venus.db.model.primary")
.persistenceUnit("primaryPersistenceUnit")
.build();
}
/**
* EntityManager不过解释,用过jpa的应该都了解
*
* @return
*/
@Bean(name = "primaryEntityManager")
@Primary
public EntityManager entityManager() {
return entityManagerFactoryBean().getObject().createEntityManager();
}
/**
* jpa事务管理
*
* @return
*/
@Bean(name = "primaryTransactionManager")
@Primary
public JpaTransactionManager transactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return jpaTransactionManager;
}
}
Side
@Configuration
@EnableJpaRepositories(
basePackages = "com.loit.venus.db.dao.side",
entityManagerFactoryRef = "sideEntityManagerFactoryBean",
transactionManagerRef = "sideTransactionManager")
@EnableTransactionManagement
public class SideConfiguration {
//第二个数据源,必须加Qualifier
@Autowired
@Qualifier("sideDataSource")
private DataSource dataSource;
//jpa其他参数配置
@Autowired
private JpaProperties jpaProperties;
//实体管理工厂builder
@Autowired
private EntityManagerFactoryBuilder factoryBuilder;
/**
* 配置第二个实体管理工厂的bean
*
* @return
*/
@Bean(name = "sideEntityManagerFactoryBean")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
return factoryBuilder.dataSource(dataSource)
.properties(jpaProperties.getProperties())
.packages("com.loit.venus.db.model.side")
.persistenceUnit("sidePersistenceUnit")
.build();
}
/**
* EntityManager不过解释,用过jpa的应该都了解
*
* @return
*/
@Bean(name = "sideEntityManager")
public EntityManager entityManager() {
return entityManagerFactoryBean().getObject().createEntityManager();
}
/**
* jpa事务管理
*
* @return
*/
@Bean(name = "sideTransactionManager")
public JpaTransactionManager transactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return jpaTransactionManager;
}
}
网友评论