application.properties的数据源配置:
#本地测试主数据源
spring.primary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.primary.datasource.url=jdbc:oracle:thin:@your datasource ip address:1521:ORCL
spring.primary.datasource.username=your primary datasource username
spring.primary.datasource.password=your primary datasource password
#从数据源
spring.secondary.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.secondary.datasource.url=jdbc:oracle:thin:@your another datasource ip address:1521:ORCL
spring.secondary.datasource.username=your secondary datasource username
spring.secondary.datasource.password=your secondary datasource password
这边本人用的是连接两个oracle的数据库,如果想连接别的数据库,可自行修改驱动, url的配置。
数据源配置类:
主数据源:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef = "primaryTransactionManager", basePackages = {
"com.xxxx.repositories.primary" }) // 设置Repository所在位置
public class PrimaryConfig {
@Autowired
private Environment env;// 1
@Primary
@Bean
@ConfigurationProperties(prefix = "spring.primary.datasource")
public DataSourceProperties primaryDataSourceProperties() {// 2
return new DataSourceProperties();
}
@Primary
@Bean(name = "primaryDataSource")
public DataSource primaryDataSource() { // 3
DataSourceProperties dataSourceProperties = primaryDataSourceProperties();
return DataSourceBuilder.create().driverClassName(dataSourceProperties.getDriverClassName())
.url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername())
.password(dataSourceProperties.getPassword()).build();
}
@Primary
@Bean(name = "primaryTransactionManager")
public PlatformTransactionManager primaryTransactionManager() { // 4
EntityManagerFactory factory = primaryEntityManagerFactory().getObject();
return new JpaTransactionManager(factory);
}
@Primary
@Bean(name = "primaryEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory() {// 5
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(primaryDataSource());
factory.setPackagesToScan("com.xxxx.model");
factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
factory.setPersistenceUnitName("primaryPersistenceUnit");
Properties jpaProperties = new Properties();
jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
jpaProperties.put("hibernate.show-sql", env.getProperty("hibernate.show-sql"));
jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
factory.setJpaProperties(jpaProperties);
return factory;
}
public EntityManager entityManager() {
return primaryEntityManagerFactory().getObject().createEntityManager();
}
}
从数据源配置:
@Configuration @EnableTransactionManagement @EnableJpaRepositories(entityManagerFactoryRef = "secondaryEntityManagerFactory", transactionManagerRef = "secondaryTransactionManager", basePackages = { "com.xxxx.repositories.secondary" }) // 设置Repository所在位置 public class SecondaryConfig { @Autowired private Environment env;// 1 @Bean @ConfigurationProperties(prefix = "spring.secondary.datasource") public DataSourceProperties secondaryDataSourceProperties() {// 2 return new DataSourceProperties(); } @Bean(name = "secondaryDataSource") public DataSource secondaryDataSource() { // 3 DataSourceProperties dataSourceProperties = secondaryDataSourceProperties(); return DataSourceBuilder.create().driverClassName(dataSourceProperties.getDriverClassName()) .url(dataSourceProperties.getUrl()).username(dataSourceProperties.getUsername()) .password(dataSourceProperties.getPassword()).build(); } @Bean(name = "secondaryTransactionManager") public PlatformTransactionManager secondaryTransactionManager() { // 4 EntityManagerFactory factory = secondaryEntityManagerFactory().getObject(); return new JpaTransactionManager(factory); } @Bean(name = "secondaryEntityManagerFactory") public LocalContainerEntityManagerFactoryBean secondaryEntityManagerFactory() {// 5 LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(secondaryDataSource()); factory.setPackagesToScan("com.xxxx.model"); factory.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); factory.setPersistenceUnitName("secondaryPersistenceUnit"); Properties jpaProperties = new Properties(); jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); jpaProperties.put("hibernate.show-sql", env.getProperty("hibernate.show-sql")); jpaProperties.put("hibernate.dialect", env.getProperty("hibernate.dialect")); factory.setJpaProperties(jpaProperties); return factory; } public EntityManager entityManager() { return secondaryEntityManagerFactory().getObject().createEntityManager(); } }
读写的配置得基于各位自己的业务来写了,这里就不做过多的赘述。