application.properties文件内容如下:
server.port=8080
logging.path=/user/local/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
spring.datasource.first.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.first.jdbc-url=jdbc:oracle:thin:@192.144.212.207:1521:piccjk
spring.datasource.first.username=xww_test
spring.datasource.first.password=123456
spring.datasource.second.jdbc-url=jdbc:mysql://localhost:3306/order
spring.datasource.second.username=root
spring.datasource.second.password=123456
spring.datasource.second.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.first-dialect=org.hibernate.dialect.OracleDialect
spring.jpa.hibernate.second-dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.open-in-view=true
spring.jpa.show-sql=true
DataSourceConfiguration类内容如下:
package com.picc.jk.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfiguration {
/**
* 第一个数据连接,默认优先级最高
* @return
*/
@Bean(name = "dataSourceFirst")
@Qualifier("dataSourceFirst")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.first")
public DataSource dataSourceFirst() {
//这种方式的配置默认只满足spring的配置方式,如果使用其他数据连接(druid),需要自己独立获取配置
return DataSourceBuilder.create().build();
}
/**
* 第二个数据源
* @return
*/
@Bean(name = "dataSourceSecond")
@Qualifier("dataSourceSecond")
@ConfigurationProperties(prefix = "spring.datasource.second")
public DataSource dataSourceSecond() {
return DataSourceBuilder.create().build();
}
}
JpaFirstConfiguration类如下:
package com.picc.jk.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableJpaRepositories(
basePackages = "com.picc.jk.service",
entityManagerFactoryRef = "firstEntityManagerFactoryBean",
transactionManagerRef = "firstTransactionManager")
@EnableTransactionManagement
public class JpaFirstConfiguration {
@Resource
private HibernateProperties hibernateProperties;
@Resource
@Qualifier("dataSourceFirst")
private DataSource dataSource;
//jpa其他参数配置
@Resource
private JpaProperties jpaProperties;
//实体管理工厂builder
@Resource
private EntityManagerFactoryBuilder factoryBuilder;
@Value("${spring.jpa.hibernate.first-dialect}")
private String firstDialect;// 获取对应的数据库方言
/**
* 配置第一个实体管理工厂的bean
* @return
*/
@Bean(name = "firstEntityManagerFactoryBean")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
properties.put("hibernate.dialect",firstDialect);
return factoryBuilder.
dataSource(dataSource).
packages("com.picc.jk.bean").
persistenceUnit("firstPersistenceUnit").
properties(properties).
build();
}
/**
* EntityManager不过解释,用过jpa的应该都了解
* @return
*/
@Bean(name = "firstEntityManager")
@Primary
public EntityManager entityManager() {
return entityManagerFactoryBean().getObject().createEntityManager();
}
/**
* jpa事务管理
* @return
*/
@Bean(name = "firstTransactionManager")
@Primary
public JpaTransactionManager transactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return jpaTransactionManager;
}
}
JpaSecondConfiguration类内容如下:
package com.picc.jk.config;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
/**
* 第二个数据源,jpa的相关配置
*/
@Configuration
@EnableJpaRepositories(
basePackages = "com.picc.jk.service",
entityManagerFactoryRef = "secondEntityManagerFactoryBean",
transactionManagerRef = "secondTransactionManager")
@EnableTransactionManagement
public class JpaSecondConfiguration {
//第二个数据源,必须加Qualifier
@Resource
private HibernateProperties hibernateProperties;
@Resource
@Qualifier("dataSourceSecond")
private DataSource dataSource;
//jpa其他参数配置
@Resource
private JpaProperties jpaProperties;
//实体管理工厂builder
@Resource
private EntityManagerFactoryBuilder factoryBuilder;
@Value("${spring.jpa.hibernate.second-dialect}")
private String secondDialect;// 获取对应的数据库方言
/**
* 配置第二个实体管理工厂的bean
* @return
*/
@Bean(name = "secondEntityManagerFactoryBean")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
properties.put("hibernate.dialect",secondDialect);
return factoryBuilder.
dataSource(dataSource).
packages("com.picc.jk.secondbean").
properties(properties).
build();
}
/**
* EntityManager不过解释,用过jpa的应该都了解
* @return
*/
@Bean(name = "secondEntityManager")
public EntityManager entityManager() {
return entityManagerFactoryBean().getObject().createEntityManager();
}
/**
* jpa事务管理
* @return
*/
@Bean(name = "secondTransactionManager")
public JpaTransactionManager transactionManager() {
JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
return jpaTransactionManager;
}
}
数据库连接:
@Autowired
@Qualifier("firstEntityManager")
@PersistenceContext
private EntityManager firstEntityManager;
@Autowired
@Qualifier("secondEntityManager")
@PersistenceContext
private EntityManager secondEntityManager;