该文章是从别人的文章基础上进行修改和添加的,基础配置先看原文。本文只讲有些修改的地方。本人也是新手一枚,有什么错误的地方还望大家不吝指教。
先上mvn配置
1. 多数据源DataSource的配置
@Configuration
//由于我的datasource没有配置在application.yml中所以需要PropertySource指定位置
@PropertySource("classpath:application-datasource.yml")
public class DruidConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(DruidConfig.class);
@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
/*
只有主连接才加上@Primary
*/
@Primary
@ConfigurationProperties(prefix = "primary")
public DataSource getPrimaryDataSource() {
/*
注意项: maven必须引入druid与springboot整合的jar包
不要引用成druid本身的包了,要不然找不到这个Builder类
*/
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix = "secondary")
public DataSource getSecondaryDataSource() {
return DruidDataSourceBuilder.create().build();
}
}
下面这个是application-datasource.yml,各位根据自己的具体需求去改
2.EntityManager的配置
这个得根据上面配置的数据源来分别设定,以下代码仅为主数据源的配置,从数据源按照同样配置改下参数名即可。主从两个的repository和entity扫描路径不要配置一样,否则会导致重复注册。而且在这儿配置了扫描路径后,不需要在启动类上再增加@EntityScan注解,仍不会配置从数据源的参照原文。注:原文中的getVendorProperties(DataSource dataSource)这个方法已不适用,获取properties详见以下代码
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages= { "com.*" }) //设置Repository所在及其子包位置
public class PrimaryConfig {
@Autowired
@Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Autowired
private HibernateProperties hibernateProperties;
@Autowired
private JpaProperties jpaProperties;
@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
//获取properties改为以下方法
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(
jpaProperties.getProperties(), new HibernateSettings());
return builder.
dataSource(primaryDataSource)
.properties(properties)
.packages("com.*") //设置实体类及子包所在位置
.persistenceUnit("primaryPersistenceUnit")
.build();
}
@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}