yml配置
spring:
datasource:
wdf: # 数据源1(standard 数据库,注意是jdbc-url)
jdbc-url: jdbc:mysql://路径:3306/wdf?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver # 如果驱动类报红,将pom.xml中的mysql依赖的scope节点删除即可。
username: root
password: 123456
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
#Oracle需要打开注释
#validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
jeesite: # 数据源2(startplan 数据库,注意是jdbc-url)
jdbc-url: jdbc:mysql://路径:3306/jeesite?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver # 如果驱动类报红,将pom.xml中的mysql依赖的scope节点删除即可。
username: root
password: 123456
initial-size: 10
max-active: 100
min-idle: 10
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
#Oracle需要打开注释
#validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
stat-view-servlet:
enabled: true
url-pattern: /druid/*
filter:
stat:
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: false
wall:
config:
multi-statement-allow: true
2:DatabaseConfig 编写
主数据源
package com.io.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
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;
/**
* 数据源1相关配置(作为主数据库,项目启动默认连接此数据库)
*
* 主数据库都有 @Primary注解,从数据库都没有
*
* 需要额外注意的位置
* 1:扫描Dao层包路径,basePackages = "com.io.dao"
* 2:关联yml中的数据源,@ConfigurationProperties(prefix = "spring.datasource.wdf")
* 3:扫描相关xml文件的所在路径,"classpath:mapper/*.xml"
*/
@Configuration
@Primary
@MapperScan(basePackages = "com.io.dao", sqlSessionTemplateRef = "sqlSessionTemplateWdf")
public class DatabaseConfig1 {
@Bean(name = "dataSourceWdf")
@ConfigurationProperties(prefix = "spring.datasource.wdf")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactoryWdf")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceWdf") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.io.entity");
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManagerWdf")
public DataSourceTransactionManager transactionManager(@Qualifier("dataSourceWdf") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplateWdf")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactoryWdf") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
次数据源
package com.io.config;
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;
/**
*
* 需要额外注意的位置
* 1:扫描Dao层包路径,basePackages = "com.io.js.user.dao"
* 2:关联yml中的数据源,@ConfigurationProperties(prefix = "spring.datasource.jeesite")
* 3:扫描相关xml文件的所在路径,"classpath:mapper/*.xml"
*/
@Configuration
@MapperScan(basePackages = "com.io.js.user.dao", sqlSessionTemplateRef = "sqlSessionTemplateJeesite")
public class DatabaseConfig2 {
@Bean(name = "dataSourceJeesite")
@ConfigurationProperties(prefix = "spring.datasource.jeesite")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "sqlSessionFactoryJeesite")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSourceJeesite") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.io.js.user.entity");
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*.xml"));
return bean.getObject();
}
@Bean(name = "transactionManagerJeesite")
public DataSourceTransactionManager transactionManager(@Qualifier("dataSourceJeesite") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "sqlSessionTemplateJeesite")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactoryJeesite") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
3:使用
输出
4:编写过程中的易错问题
1: DatabaseConfig @Primary 注解只能给主数据源使用,不可以给副数据源
2:DatabaseConfig 内的@Bean名称请注意,那些名称在自己的文件中有自我调用,别把名称写错。
3:MybatisSqlSessionFactoryBean对象有可能无jar包 百度搜索一下导入进去,不可以改为 SqlSessionFactoryBean对象,会报错:Invalid bound statement
4:“classpath:mapper/*.xml ” 的设置请仔细填写路径
5:yml中的 mybatis / mybatis-plus 配置要关闭 mapper-locations ,typeAliasesPackage。这两项配置在 DatabaseConfig 中有配置
6:有使用到@Transactional注解的方法要 加一个属性 transactionManager = “transactionManagerWdf” 这个属性是表明回退的数据源是那个
例: @Transactional(rollbackFor = Exception.class, transactionManager = “transactionManagerWdf”)