我正在使用spring boot并尝试使用spring jpa实现多个数据源。
问题当我运行服务器时,LocalContainerEntityManagerFactoryBean为默认持久性单元构建JPA容器。
我从AutoConfiguration中排除了 HibernateJpaAutoConfiguration.class ,所以它不应该用于默认数据源?至少这就是我的理解。
2015-08-28 08:05:35.933 INFO 3764 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2015-08-28 08:05:35.943 INFO 3764 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
这就是我运行我的应用程序的方式
@SpringBootApplication
@Configuration
@EnableAutoConfiguration(exclude = { DataSourceTransactionManagerAutoConfiguration.class,
DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
public class Application extends SpringBootServletInitializer/*
* implements
* CommandLineRunner
*/{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
这是第一个Config文件的样子:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "xx.xx.repository", entityManagerFactoryRef = "blueberryEntityManagerFactory", transactionManagerRef = "blueberryTransactionManager")
@PropertySource("classpath:application.properties")
public class DbConfigBlueBerry {
@Value("${spring.datasourceblueberry.driver-class-name}")
String driverClassName = "";
@Value("${spring.datasourceblueberry.url}")
String url = "";
@Value("${spring.datasourceblueberry.username}")
String userName = "";
@Value("${spring.datasourceblueberry.password}")
String password = "";
@Bean(name = "blueberryEntityManager")
public EntityManager entityManager() {
return entityManagerFactory().createEntityManager();
}
@Bean(name = "blueberryEntityManagerFactory")
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(DataSourceBuilder.create().url(url)
.driverClassName(driverClassName).username(userName)
.password(password).build());
factoryBean.setJpaVendorAdapter(jpaVendorAdapter());
factoryBean.setPackagesToScan(R.Blueberry_PACKAGE);
factoryBean.setPersistenceUnitName("blueberryPersistenceUnit");
Properties jpaProperties = new Properties();
factoryBean.setJpaProperties(jpaProperties);
factoryBean.afterPropertiesSet();
return factoryBean.getObject();
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setDatabase(Database.MYSQL);
jpaVendorAdapter.setGenerateDdl(true);
jpaVendorAdapter.setShowSql(true);
return jpaVendorAdapter;
}
@Bean(name = "blueberryTransactionManager")
PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory());
}
注意: LocalContainerEntityManagerFactoryBean也为我定义的数据源构建了entityManagerFactory,但是在构建了Default数据源之后。
Building JPA container EntityManagerFactory for persistence unit 'blueberryPersistenceUnit'
2015-08-28 08:05:36.925 INFO 3764 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: blueberryPersistenceUnit
...]
我的怀疑 什么是Default PersistenceUnitInfo的意义? 从哪里构建Default PersistenceUnitInfo?我错过了什么?
请提供宝贵的意见。感谢。