單個數據源
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
/**
* Created by johnzh on
* 2017/4/27. 10:27
*/
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "dbSqlSessionFactory")
public class DataSourceConfig {
static final String PACKAGE = "com.icekredit.merchant.mapper";
@Bean(name = "dbDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dbDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dbTransactionManager")
public DataSourceTransactionManager dbTransactionManager(){
return new DataSourceTransactionManager(dbDataSource());
}
@Bean("dbSqlSessionFactory")
public SqlSessionFactory dbSqlSessionFactory(@Qualifier("dbDataSource") DataSource dbDataSource) throws Exception{
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dbDataSource);
//查詢結果集下劃線轉駝峰
sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sessionFactory.getObject();
}
}
多個數據源 (主要增加@Primary 注解,其余數據源配置相同)
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
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.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = PrimaryDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "primarySqlSessionFactory")
// 主數據源
public class PrimaryDataSourceConfig {
static final String PACKAGE = "com.icekredit.configure.dao.ds1";
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "primaryTransactionManager")
@Primary
// 事務管理
public DataSourceTransactionManager primaryTransactionManager() {
return new DataSourceTransactionManager(primaryDataSource());
}
@Bean(name = "primarySqlSessionFactory")
@Primary
public SqlSessionFactory primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource primaryDataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(primaryDataSource);
return sessionFactory.getObject();
}
}
yml 配置文件格式
#mysql數據庫
spring:
datasource:
#mysql數據庫1
primary:
url: jdbc:mysql://******:3306/****?useUnicode=true&autoReconnect=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
username: ******
password: ******
driver-class-name: com.mysql.jdbc.Driver
# 初始化大小,最小,最大
initialSize: 5
minIdle: 5
maxIdle: 100
maxActive: 200
# 獲取連接等待超時的時間
maxWait: 5000
# 指明連接是否被空閑連接回收器(如果有)進行檢驗.如果檢測失敗,則連接將被從池中去除
testWhileIdle: true
#獲取連接時候驗證,會影響性能
test-on-borrow: true
validation-query: SELECT 1 FROM DUAL
# 每30秒運行一次空閑連接回收器(默認-1)
timeBetweenEvictionRunsMillis: 300000
# 池中的連接空閑30分鐘后被回收(默認30分鐘)
minEvictableIdleTimeMillis: 1800000
# 在每次空閑連接回收器線程(如果有)運行時檢查的連接數量(設置為和maxIdle一樣)
numTestsPerEvictionRun: 100