springboot mybatis双数据源配置(转)
- yml 配置:
spring:
datasource:
druid:
master:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://xxxxxxx:xxxx/xxxx?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
username: xxxxxx
password: xxxxx
initialSize: 5
minIdle: 5
maxActive: 20
db2:
driver-class-name: com.mysql.jdbc.Driver
jdbc-url: jdbc:mysql://xxxx/xxxxx?useUnicode=true&characterEncoding=UTF8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true
username: xxxx
password: xxxxx
initialSize: 5
minIdle: 5
maxActive: 20
-
yml 配置完以后,需要写两个加载的配置类
几个数据源就写几个:
需要有一个是主数据源: 加 @Primary
basePackages 是包路径,这个包下面查询的为就是使用这个数据源
ps : 切记切记 。下面这句是在双数据源时需要手动打开mybatis驼峰装换,不然user_id这种无法取到数据
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
主数据源 :package com.bootdo.common.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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 org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;@Configuration @MapperScan(basePackages = "com.bootdo.*.dao", sqlSessionTemplateRef = "masterSqlSessionTemplate") public class DataSource1Config { // 首先创建 DataSource @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.druid.master") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } //然后创建 SqlSessionFactory @Bean(name = "masterSqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/*/*.xml")); //下面这句是在双数据源时需要手动打开mybatis驼峰装换 bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true); return bean.getObject(); } //再创建事务 @Bean(name = "masterTransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } //最后包装到 SqlSessionTemplate 中 @Bean(name = "masterSqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
从数据源 :
package com.bootdo.common.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
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.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.bootdo.common.testDao", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DataSource2Config {
// 首先创建 DataSource
@Bean(name = "db2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.druid.db2")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
// 然后创建 SqlSessionFactory
@Bean(name = "db2SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:static/*.xml"));
//下面这句是在双数据源时需要手动打开mybatis驼峰装换
bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return bean.getObject();
}
// 再创建事务
@Bean(name = "db2TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// 最后包装到 SqlSessionTemplate 中
@Bean(name = "db2SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
mybatis 驼峰转换代码