一、首先pom.xml新增如下依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.28</version>
</dependency>
<!-- spring-boot-starter-data-jpa包含spring-data-jpa、spring-orm 和 Hibernate来支持JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
二、配置文件内容如下:
server.port=8004
#####################################billsystem################################################################
spring.datasource.billsystem.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.billsystem.driverClassName = com.mysql.jdbc.Driver
spring.datasource.billsystem.url=jdbc:mysql://192.168.88.81:3306/bill_system?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.billsystem.username=acuser
spring.datasource.billsystem.password=rZN4JSSM4j5.2Q6GJaxCOzUOhwCccgMg
#初始化时建立物理连接的个数
spring.datasource.billsystem.druid.initialSize=5
#最小连接池数量
spring.datasource.billsystem.druid.minIdle=5
#最大连接池数量
spring.datasource.billsystem.druid.maxActive=20
#连接等待超时时间
spring.datasource.billsystem.druid.maxWait=60000
#配置隔多久进行一次检测(检测可以关闭的空闲连接)
spring.datasource.billsystem.druid.timeBetweenEvictionRunsMillis=60000
#配置连接在池中的最小生存时间
spring.datasource.billsystem.druid.minEvictableIdleTimeMillis=300000
#用来检测连接是否有效的sql
spring.datasource.billsystem.druid.validationQuery=SELECT 1 FROM sys_property
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
spring.datasource.billsystem.druid.testOnBorrow=false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
spring.datasource.billsystem.druid.testOnReturn=false
#申请连接时检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,建议配置
spring.datasource.billsystem.druid.testWhileIdle=true
#监控统计用的filter:stat;日志用的filter:log4j;防御sql注入的filter:wall
spring.datasource.billsystem.druid.filters=stat,wall,log4j
spring.datasource.billsystem.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
spring.datasource.billsystem.druid.useGlobalDataSourceStat=true
#####################################nsradius################################################################
spring.datasource.nsradius.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.nsradius.driverClassName = com.mysql.jdbc.Driver
spring.datasource.nsradius.url=jdbc:mysql://192.168.88.81:3306/nsradius?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.nsradius.username=acuser
spring.datasource.nsradius.password=rZN4JSSM4j5.2Q6GJaxCOzUOhwCccgMg
#初始化时建立物理连接的个数
spring.datasource.nsradius.druid.initialSize=5
#最小连接池数量
spring.datasource.nsradius.druid.minIdle=5
#最大连接池数量
spring.datasource.nsradius.druid.maxActive=20
#连接等待超时时间
spring.datasource.nsradius.druid.maxWait=60000
#配置隔多久进行一次检测(检测可以关闭的空闲连接)
spring.datasource.nsradius.druid.timeBetweenEvictionRunsMillis=60000
#配置连接在池中的最小生存时间
spring.datasource.nsradius.druid.minEvictableIdleTimeMillis=300000
#用来检测连接是否有效的sql
spring.datasource.nsradius.druid.validationQuery=SELECT 1 FROM sys_property
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
spring.datasource.nsradius.druid.testOnBorrow=false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
spring.datasource.nsradius.druid.testOnReturn=false
#申请连接时检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效,建议配置
spring.datasource.nsradius.druid.testWhileIdle=true
#监控统计用的filter:stat;日志用的filter:log4j;防御sql注入的filter:wall
spring.datasource.nsradius.druid.filters=stat,wall,log4j
spring.datasource.nsradius.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
spring.datasource.nsradius.druid.useGlobalDataSourceStat=true
三、配置druid数据源
package com.ligowave.bill.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 DruidDataSourceConfig {
@Bean(name = "billSystemDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.billsystem")
public DataSource billSystemDataSource(){
return new DruidDataSource();
}
@Bean(name = "nsradiusDataSource")
@ConfigurationProperties(prefix = "spring.datasource.nsradius")
public DataSource nsradiusDataSource(){
return new DruidDataSource();
}
}
四、分别配置两个数据源以及jpa
package com.ligowave.bill.common.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "billSystemEntityManagerFactoryBean",
transactionManagerRef = "billSystemTransactionManager",
//设置Repository所在位置
basePackages = {"com.ligowave.bill.domain.billsystem.repository"})
public class BillSystemDataSourceConfig {
@Autowired
private JpaProperties jpaProperties;
@Autowired
@Qualifier("billSystemDataSource")
private DataSource billSystemDataSource;
@Bean(name = "billSystemEntityManagerFactoryBean")
@Primary
public LocalContainerEntityManagerFactoryBean billSystemEntityManagerFactoryBean(EntityManagerFactoryBuilder builder){
return builder.dataSource(billSystemDataSource)
.properties(getVendorProperties(billSystemDataSource))
//设置实体类所在位置
.packages("com.ligowave.bill.domain.billsystem.entity")
.persistenceUnit("billSystemPersistenceUnit")
.build();
}
private Map<String,String> getVendorProperties(DataSource dataSource){
return jpaProperties.getHibernateProperties(dataSource);
}
/**
* EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
* 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
* mybatis的sqlSession.
* @param builder
* @return
*/
@Bean(name = "billSystemEntityManagerFactory")
public EntityManagerFactory billSystemEntityManagerFactory(EntityManagerFactoryBuilder builder){
return this.billSystemEntityManagerFactoryBean(builder).getObject();
}
/**
* 配置事物管理器
*/
@Bean(name = "billSystemTransactionManager")
public PlatformTransactionManager billSystemTransactionManager(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(billSystemEntityManagerFactory(builder));
}
}
package com.ligowave.bill.common.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
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.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.Map;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "nsradiusEntityManagerFactoryBean",
transactionManagerRef = "nsradiusTransactionManager",
//设置Repository所在位置
basePackages = {"com.ligowave.bill.domain.nsradius.repository"})
public class NsradiusDataSourceConfig {
@Autowired
private JpaProperties jpaProperties;
@Autowired
@Qualifier("nsradiusDataSource")
private DataSource nsradiusDataSource;
@Bean(name = "nsradiusEntityManagerFactoryBean")
public LocalContainerEntityManagerFactoryBean nsradiusEntityManagerFactoryBean(EntityManagerFactoryBuilder builder){
return builder.dataSource(nsradiusDataSource)
.properties(getVendorProperties(nsradiusDataSource))
//设置实体类所在位置
.packages("com.ligowave.bill.domain.nsradius.entity")
.persistenceUnit("nsradiusPersistenceUnit")
.build();
}
private Map<String,String> getVendorProperties(DataSource dataSource){
return jpaProperties.getHibernateProperties(dataSource);
}
/**
* EntityManagerFactory类似于Hibernate的SessionFactory,mybatis的SqlSessionFactory
* 总之,在执行操作之前,我们总要获取一个EntityManager,这就类似于Hibernate的Session,
* mybatis的sqlSession.
*/
@Bean(name = "nsradiusEntityManagerFactory")
public EntityManagerFactory nsradiusEntityManagerFactory(EntityManagerFactoryBuilder builder){
return this.nsradiusEntityManagerFactoryBean(builder).getObject();
}
/**
* 配置事物管理器
*/
@Bean(name = "nsradiusTransactionManager")
public PlatformTransactionManager nsradiusTransactionManager(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(nsradiusEntityManagerFactory(builder));
}
}