@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef= "entityManagerFactoryMysql", //EntityManagerFactory引用
transactionManagerRef = "transactionManagerMysql", //transactionManager引用
basePackages = {"com.xxx.mysql"})public classMysqlDataSourceConfig {/*** 注入 mysql数据源*/@Resource(name= "mysqlDataSource")privateDataSource mysqlDataSource;/*** 注入JPA配置实体*/@AutowiredprivateJpaProperties jpaProperties;/*** 这里其实不需要配置数据库的方言.
* 像hibernate.hbm2ddl.auto 可以在这里配置.但是我的是在application.properties中配置的.*/
private MapgetVendorProperties() {
HibernateSettings hibernateSettings= newHibernateSettings();returnjpaProperties.getHibernateProperties(hibernateSettings);
}/*** 配置EntityManagerFactory实体
*
*@parambuilder
*@return实体管理工厂
* packages 扫描@Entity注释的软件包名称
* persistenceUnit 持久性单元的名称。 如果只建立一个EntityManagerFactory,你可以省略这个,但是如果在同一个应用程序中有多个,你应该给它们不同的名字
* properties 标准JPA或供应商特定配置的通用属性。 这些属性覆盖构造函数中提供的任何值。*/@Primary
@Bean(name= "entityManagerFactoryMysql")publicLocalContainerEntityManagerFactoryBean entityManagerFactoryMysql(EntityManagerFactoryBuilder builder) {returnbuilder
.dataSource(mysqlDataSource)
.properties(getVendorProperties())
.packages("com.xxx.mysql")
.persistenceUnit("mysqlPersistenceUnit")
.build();
}/*** 配置EntityManager实体
*
*@parambuilder
*@return实体管理器*/@Primary
@Bean(name= "entityManagerMysql")publicEntityManager entityManager(EntityManagerFactoryBuilder builder) {returnentityManagerFactoryMysql(builder).getObject().createEntityManager();
}/*** 配置事务transactionManager
*
*@parambuilder
*@return事务管理器*/@Primary
@Bean(name= "transactionManagerMysql")publicPlatformTransactionManager transactionManagerMysql(EntityManagerFactoryBuilder builder) {return newJpaTransactionManager(entityManagerFactoryMysql(builder).getObject());
}
}