目录
介绍
依赖
配置文件
配置类1
配置类二
介绍
- 1.需要引入多款数据库的依赖驱动和mybatis
- 2.写配置文件,做一个全局配置的是测试or 生产环境
- 3.写配置类在配置类中通过 全局的测试生产判断调用哪个配置
- static final String PACKAGE = "com.superman.globaldao.ds2";
- static final String MAPPER_LOCATION = "classpath:mybatis/mapper/ds2/*.xml";
- 在上边俩个配置的地址写dao 和xml 即可
依赖
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
配置文件
##--------------------多数据源配置---------------
#测试环境
ds.datasource.linktype=test
#正式环境
#ds.datasource.linktype=formal
##--------------------#datasource1配置--------------------------------
#开发环境
ds1.datasource.url0=jdbc:mysql://localhost:3306/porject?useUnicode=true&characterEncoding=utf-8
ds1.datasource.username0=xxx
ds1.datasource.password0=xxx
#生产环境
ds1.datasource.url1=jdbc:mysql://10.10.10.10:3306/porject?useUnicode=true&characterEncoding=utf-8
ds1.datasource.username1=xx
ds1.datasource.password1=xx
ds1.datasource.driverClassName=com.mysql.jdbc.Driver
ds1.datasource.initialSize=20
ds1.datasource.minIdle=20
ds1.datasource.maxActive=100
ds1.datasource.maxWait=60000
ds1.datasource.timeBetweenEvictionRunsMillis=60000
ds1.datasource.minEvictableIdleTimeMillis=300000
ds1.datasource.testWhileIdle=true
ds1.datasource.testOnBorrow=false
ds1.datasource.testOnReturn=false
ds1.datasource.poolPreparedStatements=true
ds1.datasource.maxPoolPreparedStatementPerConnectionSize=20
##--------------------#datasource21配置--------------------------------
#数据库表结构在/resources/describe/logandapitableinfo.sql
#
ds2.datasource.driverClassName=org.postgresql.Driver
#开发环境 postgresql
ds2.datasource.url0=jdbc:postgresql://localhost:5432/abc
ds2.datasource.username0=postgres
ds2.datasource.password0=xxx
#生产环境 greenPlum
ds2.datasource.url1=jdbc:postgresql://10.19.19.19:5432/gxeaa
ds2.datasource.username1=xxx
ds2.datasource.password1=xx
ds2.datasource.initialSize=20
ds2.datasource.minIdle=20
ds2.datasource.maxActive=2000
ds2.datasource.maxWait=60000
ds2.datasource.timeBetweenEvictionRunsMillis=60000
ds2.datasource.minEvictableIdleTimeMillis=300000
ds2.datasource.testWhileIdle=true
ds2.datasource.testOnBorrow=false
ds2.datasource.testOnReturn=false
ds2.datasource.poolPreparedStatements=true
ds2.datasource.maxPoolPreparedStatementPerConnectionSize=20
配置类1
package com.superman.globaldao;
import javax.sql.DataSource;
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.beans.factory.annotation.Value;
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 com.alibaba.druid.pool.DruidDataSource;
/**
*
* @author yushen
*
*/
@Configuration
@MapperScan(basePackages = Datasource1Config.PACKAGE, sqlSessionFactoryRef = "ds1SqlSessionFactory")
public class Datasource1Config {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.superman.globaldao.ds1";
static final String MAPPER_LOCATION = "classpath:mybatis/mapper/ds1/*.xml";
@Value("${ds.datasource.linktype}")
private String linktype;
@Value("${ds1.datasource.url0}")
private String url0;
@Value("${ds1.datasource.username0}")
private String user0;
@Value("${ds1.datasource.password0}")
private String password0;
@Value("${ds1.datasource.url1}")
private String url1;
@Value("${ds1.datasource.username1}")
private String user1;
@Value("${ds1.datasource.password1}")
private String password1;
@Value("${ds1.datasource.driverClassName}")
private String driverClass;
@Value("${ds1.datasource.maxActive}")
private Integer maxActive;
@Value("${ds1.datasource.minIdle}")
private Integer minIdle;
@Value("${ds1.datasource.initialSize}")
private Integer initialSize;
@Value("${ds1.datasource.maxWait}")
private Long maxWait;
@Value("${ds1.datasource.timeBetweenEvictionRunsMillis}")
private Long timeBetweenEvictionRunsMillis;
@Value("${ds1.datasource.minEvictableIdleTimeMillis}")
private Long minEvictableIdleTimeMillis;
@Value("${ds1.datasource.testWhileIdle}")
private Boolean testWhileIdle;
@Value("${ds1.datasource.testWhileIdle}")
private Boolean testOnBorrow;
@Value("${ds1.datasource.testOnBorrow}")
private Boolean testOnReturn;
@Bean(name = "ds1DataSource")
@Primary
public DataSource ds1DataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
if(linktype.equals("test")) {
dataSource.setUrl(url0);
dataSource.setUsername(user0);
dataSource.setPassword(password0);
}else if(linktype.equals("formal")) {
dataSource.setUrl(url1);
dataSource.setUsername(user1);
dataSource.setPassword(password1);
}
//连接池配置
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setInitialSize(initialSize);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setValidationQuery("SELECT 'x'");
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
return dataSource;
}
@Bean(name = "ds1TransactionManager")
@Primary
public DataSourceTransactionManager ds1TransactionManager() {
return new DataSourceTransactionManager(ds1DataSource());
}
@Bean(name = "ds1SqlSessionFactory")
@Primary
public SqlSessionFactory ds1SqlSessionFactory(@Qualifier("ds1DataSource") DataSource ds1DataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(ds1DataSource);
sessionFactory.setTypeAliasesPackage("nc.edu.nuc.Test.entity");
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(Datasource1Config.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
配置类二
package com.superman.globaldao;
import javax.sql.DataSource;
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.beans.factory.annotation.Value;
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 com.alibaba.druid.pool.DruidDataSource;
/**
*
* @author yushen
*
*/
@Configuration
@MapperScan(basePackages = Datasource2Config.PACKAGE, sqlSessionFactoryRef = "ds2SqlSessionFactory")
public class Datasource2Config {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.superman.globaldao.ds2";
static final String MAPPER_LOCATION = "classpath:mybatis/mapper/ds2/*.xml";
@Value("${ds.datasource.linktype}")
private String linktype;
@Value("${ds2.datasource.url0}")
private String url0;
@Value("${ds2.datasource.username0}")
private String user0;
@Value("${ds2.datasource.password0}")
private String password0;
@Value("${ds2.datasource.url1}")
private String url1;
@Value("${ds2.datasource.username1}")
private String user1;
@Value("${ds2.datasource.password1}")
private String password1;
@Value("${ds2.datasource.driverClassName}")
private String driverClass;
@Value("${ds2.datasource.maxActive}")
private Integer maxActive;
@Value("${ds2.datasource.minIdle}")
private Integer minIdle;
@Value("${ds2.datasource.initialSize}")
private Integer initialSize;
@Value("${ds2.datasource.maxWait}")
private Long maxWait;
@Value("${ds2.datasource.timeBetweenEvictionRunsMillis}")
private Long timeBetweenEvictionRunsMillis;
@Value("${ds2.datasource.minEvictableIdleTimeMillis}")
private Long minEvictableIdleTimeMillis;
@Value("${ds2.datasource.testWhileIdle}")
private Boolean testWhileIdle;
@Value("${ds2.datasource.testWhileIdle}")
private Boolean testOnBorrow;
@Value("${ds2.datasource.testOnBorrow}")
private Boolean testOnReturn;
@Bean(name = "ds2DataSource")
public DataSource ds2DataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
if(linktype.equals("test")) {
dataSource.setUrl(url0);
dataSource.setUsername(user0);
dataSource.setPassword(password0);
}else if(linktype.equals("formal")) {
dataSource.setUrl(url1);
dataSource.setUsername(user1);
dataSource.setPassword(password1);
}
//连接池配置
dataSource.setMaxActive(maxActive);
dataSource.setMinIdle(minIdle);
dataSource.setInitialSize(initialSize);
dataSource.setMaxWait(maxWait);
dataSource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
dataSource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
dataSource.setTestWhileIdle(testWhileIdle);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setTestOnReturn(testOnReturn);
dataSource.setValidationQuery("SELECT 'x'");
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
return dataSource;
}
@Bean(name = "ds2TransactionManager")
public DataSourceTransactionManager ds2TransactionManager() {
return new DataSourceTransactionManager(ds2DataSource());
}
@Bean(name = "ds2SqlSessionFactory")
public SqlSessionFactory ds2SqlSessionFactory(@Qualifier("ds2DataSource") DataSource ds2DataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(ds2DataSource);
sessionFactory.setTypeAliasesPackage("nc.edu.nuc.Test.entity");
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(Datasource2Config.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
- 在对应的地方写好xml和 dao 的接口即可
ok
持续更新