由于项目需要,最近研究了一下基于Spring Boot与Spring Data JPA的多数据源配置问题。以下是传统的单数据源配置代码。这里使用的是Spring的Annotation在代码内部直接配置的方式,没有使用任何XML文件。
@Configuration
@EnableJpaRepositories(basePackages = "org.lyndon.repository")
@EnableTransactionManagement
@PropertySource("classpath:application.properties")
public class JpaConfig {
private static final String DATABASE_DRIVER = "db.driver";
private static final String DATABASE_URL = "db.url";
private static final String DATABASE_USER = "db.user";
private static final String DATABASE_PASSWORD = "db.password";
private static final String PACKAGES_TO_SCAN = "packages.to.scan";
private static final String HIBERNATE_DIALECT = "hibernate.dialect";
private static final String HIBERNATE_SHOW_SQL = "hibernate.show.sql";
@Resource
private Environment env;
@Bean
public DataSource dataSource() {
DruidDataSource source = new DruidDataSource();
source.setDriverClassName(env.getRequiredProperty(DATABASE_DRIVER));
source.setUrl(env.getRequiredProperty(DATABASE_URL));
source.setUsername(env.getRequiredProperty(DATABASE_USER));
source.setPassword(env.getRequiredProperty(DATABASE_PASSWORD));
return source;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(dataSource());
factory.setPersistenceProviderClass(HibernatePersistenceProvider.class);
factory.setPackagesToScan(env.getRequiredProperty(PACKAGES_TO_SCAN));
factory.setJpaProperties(hibernateProperties());
factory.afterPropertiesSet();
return factory;
}
@Bean
p