两种文件构成:数据源配置DataSourceConfig和JPA配置xxxConfig
数据源配置DataSourceConfig
@Configuration
public class DataSourceConfig {
@Autowired
private Environment environment;
/**
* first DataSource
*
* @return
* @throws SQLException
*/
@Bean(name = "firstDataSource")
@Qualifier("firstDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.first")
public DataSource firstDataSource() throws Exception {
String driverClass = environment.getProperty("spring.datasource.first.driver-class-name");
String url = environment.getProperty("spring.datasource.first.url");
String username = environment.getProperty("spring.datasource.first.username");
String pass = environment.getProperty("spring.datasource.first.password");
return initDataSource(driverClass, url, username, pass);
}
/**
* second DataSource
*
* @return
* @throws SQLException
*/
@Bean(name = "secondDataSource")
@Qualifier("secondDataSource")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource secondDataSource() throws Exception {
String driverClass = environment.getProperty("spring.datasource.second.driver-class-name");
String url = environment.getProperty("spring.datasource.second.url");
String username = environment.getProperty("spring.datasource.second.username");
String pass = environment.getProperty("spring.datasource.second.password");
return initDataSource(driverClass, url, username, pass);
}
}
/**
* 初始化数据源
*
* @param driverClass
* @param url
* @param username
* @param pass
* @return
* @throws SQLException
*/
private DataSource initDataSource(String driverClass, String url, String username, String pass) throws Exception {
Properties druidProperties = new Properties();
//InputStream is = DataSourceConfig.class.getClassLoader().getResourceAsStream("config/druid.properties");
InputStream is = new FileInputStream("config/druid.properties");
druidProperties.load(is);
is.close();
DruidDataSource dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(druidProperties);
// 连接数据库的driverClass
dataSource.setDriverClassName(driverClass);
// 连接数据库的url
dataSource.setUrl(url);
// 连接数据库的用户名
dataSource.setUsername(username);
// 连接数据库的密码
dataSource.setPassword(pass);
return dataSource;
}
}
JPA配置xxxConfig
以FirstConfig为例,secondConfig同FirstConfig,去掉@Primary注解即可。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactoryFA",
transactionManagerRef = "faTransactionManager",
basePackages = {"com.xxxx.valuation.jpa.first.repository"}) //设置Repository所在位置
public class FaConfig {
@Autowired
@Qualifier("firstDataSource")
private DataSource dataSource;
/**
* 创建 LocalContainerEntityManagerFactoryBean 对象
*
* @param builder
* @return
*/
@Bean(name = "entityManagerFactoryFA")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect");
return builder
.dataSource(dataSource)
.properties(properties)
.packages("com.xxxx.valuation.jpa.first.po") //设置实体类所在位置
.persistenceUnit("first")
.build();
}
@Primary
@Bean(name = "firstEntityManager")
public EntityManager entityManager(@Qualifier("entityManagerFactoryFA") EntityManagerFactory factory) {
return factory.createEntityManager();
}
@Primary
@Bean(name = "firstTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("entityManagerFactoryFA") EntityManagerFactory factory) {
return new JpaTransactionManager(factory);
}
}