赞
踩
SpringBoot下配置多数据源,有的时候我们的项目可能需要从不同的数据源获取或者操作数据,这个时候就需要配置多数据源;
环境 Spring-Boot 1.5.3.RELEASE 、JDK1.8、HikariDataSource
搭建SpringBoot项目可以参看我之前写的博客;
配置HikariDataSource数据库连接池可以参看[SpringBoot配置HikarDataSource](http://blog.csdn.net/chen15369337607/article/details/78142751%20%E4%BC%A0%E9%80%81%E9%97%A8)
项目结构如下:
首先是com.b505包 这个包里放置SpringBoot的启动类:
代码如下:
package com.b505;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* <p>Company: B505信息技术研究所 </p>
* @Description: 项目的入口
* @Create Date: 2017年5月11日下午9:18:50
* @Version: V1.00
* @Author: 追到乌云的尽头找太阳
*/
@SpringBootApplication
public class SpringBootForWeChatApplication {
public static void main(String[] args) {
}
}
其次是在src/main/resource 文件下新建一个datasource.properties文件,这个文件是我们留着配置数据源的文件;文件内容如下:
#第一个数据源
spring.datasource.primary.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.primary.dataSourceProperties.serverName=localhost
spring.datasource.primary.dataSourceProperties.portNumber=3306
spring.datasource.primary.dataSourceProperties.databaseName=dbgirl
spring.datasource.primary.username=你的用户名
spring.datasource.primary.password=你的密码
#第二个数据源
spring.datasource.secondary.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
spring.datasource.secondary.dataSourceProperties.serverName=localhost
spring.datasource.secondary.dataSourceProperties.portNumber=3306
spring.datasource.secondary.dataSourceProperties.databaseName=dbgirltest
spring.datasource.secondary.username=你的用户名
spring.datasource.secondary.password=你的密码
# 下面为连接池的补充设置,应用到上面所有数据源中
#自动提交
spring.datasource.default-auto-commit=true
#指定updates是否自动提交
spring.datasource.auto-commit=true
spring.datasource.maximum-pool-size=100
spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5
spring.datasource.validation-query=SELECT 1
spring.datasource.test-on-borrow=false
spring.datasource.test-while-idle=true
spring.datasource.time-between-eviction-runs-millis=18800
配置文件写好以后,在com.b505.config包下采用java注解的形式配置这两个数据源到项目中首先在此包下新建一个类名为:DataSourceConfig
代码如下:
package com.b505.config;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
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 org.springframework.context.annotation.PropertySource;
/**
* <p>Company: B505信息技术研究所 </p>
* @Description: 数据源配置类
* @Create Date: 2017年5月11日下午9:24:00
* @Version: V1.00
* @Author: 追到乌云的尽头找太阳
*/
@Configuration
@PropertySource("classpath:datasource.properties")
public class DataSourceConfig {
private Logger logger = LoggerFactory.getLogger(DataSourceConfig.class);
/**
* @Description: 创建第一个数据库连接池
* @Parameters: DataSourceConfig
* @Return:
* @Create Date: 2017年5月11日下午9:39:09
* @Version: V1.00
* @author:追到乌云的尽头找太阳
*/
@Bean(name = "primaryDataSource")
@Primary
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary" )
public DataSource primaryDataSource() {
logger.info("第一个数据库连接池创建中.......");
return DataSourceBuilder.create().build();
}
/**
* @Description: 创建第二个数据库连接池
* @Parameters: DataSourceConfig
* @Return:
* @Create Date: 2017年5月11日下午9:39:53
* @Version: V1.00
* @author:追到乌云的尽头找太阳
*/
@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource() {
logger.info("第二个数据库连接池创建中......");
return DataSourceBuilder.create().build();
}
}
@Configuration 此注解标明这是一个Spring 的配置类,在项目启动的时候,会自动扫描此配置;
@PropertySource(“classpath:datasource.properties”) 这个注解是读取properties文件 不需要我们自己写读取properties的文件的代码,SpringBoot帮我们完成了,十分方便;classpath一定不能丢;
@ConfigurationProperties(prefix=”spring.datasource.primary” )
这个注解中的prefix 会获取datasource.properties文件中的spring.datasource.primary开头的value值;
下面就是第一个数据源的配置类了,新建PrimaryDataSouceConfig:
package com.b505.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.EntityManager;
import javax.sql.DataSource;
import java.util.Map;
/**
* <p>Company: B505信息技术研究所 </p>
* @Description: 第一个数据源的配置类
* @Create Date: 2017年5月11日下午9:22:12
* @Version: V1.00
* @Author: 追到乌云的尽头找太阳
*/
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef="entityManagerFactoryPrimary",
transactionManagerRef="transactionManagerPrimary",
basePackages= { "com.b505.dao.girl" }) //设置Repository所在位置
public class PrimaryDataSouceConfig {
@Autowired @Qualifier("primaryDataSource")
private DataSource primaryDataSource;
@Primary
@Bean(name = "entityManagerPrimary")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactoryPrimary")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary (EntityManagerFactoryBuilder builder) {
return builder
.dataSource(primaryDataSource)
.properties(getVendorProperties(primaryDataSource))
.packages("com.b505.bean") //设置实体类所在位置
.persistenceUnit("primaryPersistenceUnit")
.build();
}
@Autowired
private JpaProperties jpaProperties;
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
@Primary
@Bean(name = "transactionManagerPrimary")
public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
}
}
第二个数据源的配置类与上面基本相同,如果需要操作不同的数据源,将上面的@EnableJpaRepositories(
entityManagerFactoryRef=”entityManagerFactoryPrimary”,
transactionManagerRef=”transactionManagerPrimary”,
basePackages= { “com.b505.dao.girl” }) //设置Repository所在位置修改即可。
启动项目后:
这样在SpringBoot中配置多数据源就可以了。操作则可根据自己的业务需要进行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。