springboot使用mybatisplus的多数据源,连接三个数据库,进行操作。
看配置数据源文件。
spring:
datasource:
url: jdbc:mysql://localhost:3306/enterprise_wallet?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 123456
ds2:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 特别注意:java 9以后需要将com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver即可
# 否则报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
driver-class-name: com.mysql.cj.jdbc.Driver
#基本属性
url: jdbc:mysql://localhost:3306/enterprise_coin?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
#配置初始化大小/最小/最大[仅用于测试,生成环境需要修改哦]
initial-size: 1
min-idle: 1
max-active: 20
#获取连接等待超时时间
max-wait: 60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
#一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
#指定获取连接时连接校验的sql查询语句
validation-query: SELECT 'x'
#验证连接的有效性
test-while-idle: true
#获取连接时候验证,会影响性能(不建议true)
test-on-borrow: false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
ds3:
type: com.alibaba.druid.pool.DruidDataSource
druid:
# 特别注意:java 9以后需要将com.mysql.jdbc.Driver 改为 com.mysql.cj.jdbc.Driver即可
# 否则报错:Loading class `com.mysql.jdbc.Driver'. This is deprecated.
driver-class-name: com.mysql.cj.jdbc.Driver
#基本属性
url: jdbc:mysql://localhost:3306/enterprise_transation?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
#配置初始化大小/最小/最大[仅用于测试,生成环境需要修改哦]
initial-size: 1
min-idle: 1
max-active: 20
#获取连接等待超时时间
max-wait: 60000
#间隔多久进行一次检测,检测需要关闭的空闲连接
time-between-eviction-runs-millis: 60000
#一个连接在池中最小生存的时间
min-evictable-idle-time-millis: 300000
#指定获取连接时连接校验的sql查询语句
validation-query: SELECT 'x'
#验证连接的有效性
test-while-idle: true
#获取连接时候验证,会影响性能(不建议true)
test-on-borrow: false
#打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
pool-prepared-statements: false
max-pool-prepared-statement-per-connection-size: 20
这是三个配置数据源的属性。下面是对应的三个配置文件:
package com.xnpool.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DadaSourceConfig {
@Bean
@Primary
public JdbcTemplate newJdbcTemplate(
DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean
@Primary
public NamedParameterJdbcTemplate primaryNamedParameterJdbcTemplate(
DataSource dataSource) {
return new NamedParameterJdbcTemplate(dataSource);
}
}
第一个数据源文件,基本上看不出来什么。和只有一个数据源是一样的。特殊的地方在第二个第三个数据源文件这里:
package com.xnpool.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.xnpool.common.mapper.ds2"},
sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class MybatisSecondDbConfig {
@Bean
@Qualifier("ds2")//指定bean的名称 第二个dataSource的beanname
@ConfigurationProperties(prefix = "spring.datasource.ds2.druid")
public DataSource oracleDataSource2() {
return DataSourceBuilder.create().type(DruidDataSource.class).build();
}
@Bean(name = "db2SqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("ds2") DataSource dataSource) throws Exception {
//SqlSessionFactoryBean bean = new SqlSessionFactoryBean();//mybatis的
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//mybatisplus的
bean.setDataSource(dataSource);
//由于拆分了包结构,这里指定mapper
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/ds2/*.xml"));
return bean.getObject();
}
@Bean(name = "db2TransactionManager")
public DataSourceTransactionManager secondTransactionManager(@Qualifier("ds2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "db2SqlSessionTemplate")
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
package com.xnpool.common.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
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.xnpool.common.mapper.ds3"},
sqlSessionTemplateRef = "db3SqlSessionTemplate")
public class MybatisThreeDbConfig {
@Bean
@Qualifier("ds3")//指定bean的名称 第三个dataSource的beanname
@ConfigurationProperties(prefix = "spring.datasource.ds3.druid")
public DataSource oracleDataSource3() {
return DataSourceBuilder.create().type(DruidDataSource.class).build();
}
@Bean(name = "db3SqlSessionFactory")
public SqlSessionFactory secondSqlSessionFactory(@Qualifier("ds3") DataSource dataSource) throws Exception {
//SqlSessionFactoryBean bean = new SqlSessionFactoryBean();//mybatis的
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();//mybatisplus的
bean.setDataSource(dataSource);
//由于拆分了包结构,这里指定mapper
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/ds3/*.xml"));
return bean.getObject();
}
@Bean(name = "db3TransactionManager")
public DataSourceTransactionManager secondTransactionManager(@Qualifier("ds3") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "db3SqlSessionTemplate")
public SqlSessionTemplate secondSqlSessionTemplate(@Qualifier("db3SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
第二第三个配置数据源,是需要指定其它的bean名称的。主要还是它们扫描的路径不一样。下面是一个目录截图:
三个数据源就此配置完成。