配置了多数据源后,mybatis-plus的baseMapper的里面的方法无法使用,必须在对应的xml中加上对应方法的配置才能使用
最终配置如下
package com.yt.config.jdbc;
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.core.JdbcTemplate;
import javax.sql.DataSource;
/**
* @描述 多数据源连接配置类
* @创建人 WS9430
* @创建日期 2018-10-12
*/
@Configuration
public class JDBCDataSourceConfig {
@Bean(name = "U8DataSource")
@Qualifier("U8DataSource")
@Primary
@ConfigurationProperties(prefix="spring.datasource.druid.db1")
public DataSource u8DataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "U8JdbcTemplate")
public JdbcTemplate u8JdbcTemplate(@Qualifier("U8DataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "OADataSource")
@Qualifier("OADataSource")
@ConfigurationProperties(prefix="spring.datasource.druid.db2")
public DataSource oaDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "OAJdbcTemplate")
public JdbcTemplate oaJdbcTemplate(@Qualifier("OADataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "U8DataSource3")
@Qualifier("U8DataSource3")
@ConfigurationProperties(prefix="spring.datasource.druid.db3")
public DataSource u8DataSource3() {
return DataSourceBuilder.create().build();
}
@Bean(name = "U8JdbcTemplate3")
public JdbcTemplate u8JdbcTemplate3(@Qualifier("U8DataSource3") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "U8DataSource4")
@Qualifier("U8DataSource4")
@ConfigurationProperties(prefix="spring.datasource.druid.db4")
public DataSource u8DataSource4() {
return DataSourceBuilder.create().build();
}
@Bean(name = "U8JdbcTemplate4")
public JdbcTemplate u8JdbcTemplate4(@Qualifier("U8DataSource4") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "U8DataSource5")
@Qualifier("U8DataSource5")
@ConfigurationProperties(prefix="spring.datasource.druid.db5")
public DataSource u8DataSource5() {
return DataSourceBuilder.create().build();
}
@Bean(name = "U8JdbcTemplate5")
public JdbcTemplate u8JdbcTemplate5(@Qualifier("U8DataSource5") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
logging:
level.root: info
level.com.stylefeng: debug
path: logs/
file: guns.log
# sqlserver数据库连接配置 S
spring:
aop:
proxy-target-class: true
datasource:
db1:
url: jdbc:sqlserver://12.1.236:1433;DatabaseName=UFDATA_107_2017
username: 1
password: 1
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
db2:
url: jdbc:sqlserver://1.1.52:1433;DatabaseName=ecology81
username: 1
password: 1
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
db3:
url: jdbc:sqlserver://11117.52:1433;DatabaseName=ecology81
username: 1
password: 1
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
db4:
url: jdbc:sqlserver://1.1.236:1433;DatabaseName=UFDATA_016_2016
username: 1
password: 1
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
db5:
url: jdbc:sqlserver://1.1.236:1433;DatabaseName=UFDATA_005_2018
username: 1
password: 1
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
druid:
initial-size: 10 #初始化连接数
max-evictable-idle-time-millis: 20
min-idle: 5 #最小空闲连接
max-active: 500 #最大连接数量
log-abandoned: true #是否在自动回收超时连接的时候打印连接的超时错误
remove-abandoned: true #是否自动回收超时连接
remove-abandoned-timeout: 600 #超时时间(以秒数为单位)
max-wait: 5000 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
test-on-borrow: true #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
validation-query: select 1 #检测数据库的查询语句
min-evictable-idle-time-millis: 600000 #每隔五分钟检测空闲超过10分钟的连接
time-between-eviction-runs-millis: 300000 #1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
exception-sorter: true #根据dbType自动识别,当数据库抛出一些不可恢复的异常时,抛弃连接
test-on-return: true #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
# sqlserver数据库连接配置 E
# thymeleaf模板配置 S
thymeleaf:
prefix: classpath:/templates/
suffix: .html
mode: HTML5
encoding: UTF-8
cache: false #热部署文件,页面不产生缓存,及时更新
resources:
chain:
strategy:
content:
enabled: true
paths: /**
mvc:
static-path-pattern: /static/**
# #jdbc配置
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# spring.datasource.url=jdbc:mysql:///test
# spring.datasource.username=root
# spring.datasource.password=root
# spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#
# #连接池的设置
# #初始化时建立物理连接的个数
# spring.datasource.druid.initial-size=5
# #最小连接池数量
# spring.datasource.druid.min-idle=5
# #最大连接池数量 maxIdle已经不再使用
# spring.datasource.druid.max-active=20
# #获取连接时最大等待时间,单位毫秒
# spring.datasource.druid.max-wait=60000
# #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
# spring.datasource.druid.test-while-idle=true
# #既作为检测的间隔时间又作为testWhileIdel执行的依据
# spring.datasource.druid.time-between-eviction-runs-millis=60000
# #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
# spring.datasource.druid.min-evictable-idle-time-millis=30000
# #用来检测连接是否有效的sql 必须是一个查询语句
# #mysql中为 select 'x'
# #oracle中为 select 1 from dual
# spring.datasource.druid.validation-query=select 'x'
# #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
# spring.datasource.druid.test-on-borrow=false
# #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
# spring.datasource.druid.test-on-return=false
# #当数据库抛出不可恢复的异常时,抛弃该连接
# spring.datasource.druid.exception-sorter=true
# #是否缓存preparedStatement,mysql5.5+建议开启
# #spring.datasource.druid.pool-prepared-statements=true
# #当值大于0时poolPreparedStatements会自动修改为true
# spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
# #配置扩展插件
# spring.datasource.druid.filters=stat,wall
# #通过connectProperties属性来打开mergeSql功能;慢SQL记录
# spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# #合并多个DruidDataSource的监控数据
# spring.datasource.druid.use-global-data-source-stat=true
# #设置访问druid监控页的账号和密码,默认没有
# #spring.datasource.druid.stat-view-servlet.login-username=admin
# #spring.datasource.druid.stat-view-servlet.login-password=admin
#
# #jpa设置
# spring.jpa.database=mysql
# spring.jpa.show-sql=true
# spring.jpa.hibernate.ddl-auto=update
还是没说baseMapper怎么解决的啊?
可能是SqlSessionFactory注入的不对重新注入个, 最好此方法上再加个@Primary注解
请问,大兄弟,解决了吗?
查看自己的代码是否有DynamicDataSource.clearDataSource()操作,可能在操作之前进行了清空,然后就会使用默认的数据源,可以在查询前打印出String datasource = DynamicDataSource.getDataSource();进行验证
@Pointcut("(@annotation(com.weby.common.annotation.DataSource)) || (@within(com.weby.common.annotation.DataSource))") 这样切应该不合理,改为@Pointcut("execution(* com.weby.*.service..*(..))")
这个只是配置了数据源而已,但是继承的BaseMapper的方法还是不能用吧?