1.maven配置
<!--mybatisPlus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!--多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
2.两种方式实现多数据源
2.1一种是用mybatis-plus的多数据源工程我就不赘述太多。可以看看官方文档
https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611
2.1.1 yml配置文件:
spring:
# 多数据源
datasource:
dynamic:
primary: mysql #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
mysql:
url: jdbc:mysql://192.168.168.168:3306/weapon_test?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
username: root
password: sthg123
driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
oracle: #配置oracle属性
url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
2.1.2 代码
主要是配置mapper扫描地址
业务层使用多数据源注解DS
import com.baomidou.dynamic.datasource.annotation.DS;
@Service
@DS("mysql")
//可以在类上加也可以方法上,官方约定:方法上的注解优先于类上注解。
//默认不填则使用yml上的默认数据源
public class ServiceImpl implements Service {
@Override
@DS("oracle") //通过配置来选择不同的数据源
public void add(model param) {
mapper.add(param);
}
}
分页插件配置 :自己新建一个配置类 这里推荐使用新版的注入方式,低版本的方式已经不推荐使用
/**
* 配置分页插件
*
*/
@Configuration
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//如果是别的数据库自己选择枚举里面的
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
分页插件的使用注意事项:引用的包要注意
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@Override
public IPage<model> page(model param) {
QueryWrapper<model> queryWrapper = new QueryWrapper<>(param);
Page<model> pages = new Page<>(1,10);//
IPage<model> page = mapper.selectPage(pages, queryWrapper);
return page;
}
至此第一种分页加多数据源的方式结束
2.2 第二种方式不适用@DS
使用springboot手动配置多数据源 删除启动类的mapper注解
新建配置类,这里以mysql为例 目录结构
@Configuration
@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
// 精确到 master 目录,以便跟其他数据源隔离
static final String PACKAGE = "com.sthq.image.mapper.mysql";
static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";
static final String NULL = "configuration.setCallSettersOnNulls=true";
@Value("${mysql.datasource.url}")
private String url;
@Value("${mysql.datasource.username}")
private String user;
@Value("${mysql.datasource.password}")
private String password;
@Value("${mysql.datasource.driver-class-name}")
private String driverClass;
@Bean(name = "mysqlDataSource")
public DataSource mysqlDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager masterTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource masterDataSource)
throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(masterDataSource);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setCallSettersOnNulls(true);
configuration.getLogImpl();
// 驼峰命名
configuration.setMapUnderscoreToCamelCase(true);
sessionFactoryBean.setConfiguration(configuration);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MysqlDataSourceConfig.MAPPER_LOCATION));
//分页插件配置
sessionFactoryBean.setPlugins(mybatisPlusInterceptor());
return sessionFactoryBean.getObject();
}
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
这里需要手动把分页插件配置到sqlsession里 如果不注入则分页插件不生效
其他使用和方式一样
注意事项: 不要引用mybatis的源包(高版本plus)不然会影响注入bean, 注意多个jar包版本对应,尤其是从mybatis转到plus,多余的包要注意冲突问题
版权声明:本文为mvcVSstruts原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。