前言:
今天姐妹们对“springboot配置多数据源无效”都比较关注,姐妹们都需要学习一些“springboot配置多数据源无效”的相关内容。那么小编也在网摘上汇集了一些关于“springboot配置多数据源无效””的相关文章,希望大家能喜欢,各位老铁们快快来学习一下吧!背景
SpringBoot 整合 MyBatisPlus 分页时,如果分页插件配置不正确,容易出现分页无效的问题,这种情况常见于自定义数据源的情况。
MyBatis 的分页有两种,一种是用 MyBatisPlus 的分页,另一种是使用 PageHelper 分页插件。无论哪一种,都需要为数据源设置分页插件配置。
如果使用 SpringBoot 自带的数据源,则不需要手动设置分页插件,只需要提供分页插件配置类即可;如果是自定义的数据源,则必须为其配置分页插件。
分页插件配置
首先,为项目添加一项分页插件配置类 MyBatisPlusConfig,代码很简单:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); }}使用 SpringBoot 默认的数据源
这种方式,直接在 application.yml 中添加 spring.dataSource 配置即可:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&&serverTimezone=UTC username: root password: 12345 type: com.alibaba.druid.pool.DruidDataSource
注意,数据库连接地址的 key 为 url ,MyBatisPlus 的分页插件能自动生效。
使用自定义数据源
自定义数据源时,需要编写数据源类 ,通过 @ConfigurationProperties 注解指定数据源配置信息,此时需要单独为数据源设置 MyBatisPlus 分页插件,否则分页查询将会无效。
@Configurationpublic class MysqlDataSourceConfig { @Autowired private PaginationInterceptor paginationInterceptor; @Primary @Bean(name = "mysqlDataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create().build(); } @Primary @Bean(name = "mysqlSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); //mybatis plus 配置 MybatisConfiguration configuration = new MybatisConfiguration(); configuration.setJdbcTypeForNull(JdbcType.NULL); configuration.setMapUnderscoreToCamelCase(true); configuration.setCacheEnabled(false); sessionFactory.setConfiguration(configuration); // 设置 MyBatis 分页插件,否则分页查询将不会生效 sessionFactory.setPlugins(paginationInterceptor); return sessionFactory.getObject(); }}
需要注意的是:数据源的配置信息,不能与默认的 datasource 一致,否则会报异常:
ERROR [com.zaxxer.hikari.HikariConfig] - HikariPool-1 - jdbcUrl is required with driverClassName.
异常说明数据库连接地址信息缺少 jdbc-url ,将 url 改为 jdbc-url ,正确启动。
要点是数据源的分页插件和 key:
sessionFactory.setPlugins(paginationInterceptor);数据源配置 key 为 jdbc-url启示录
疑问:理论上使用 SpringBoot 默认数据源和自定义数据源,配置信息应该一样才对,也都到一些文章的 demo 中二者的配置信息是一样的。
那么,是什么原因导致两种配置的 key 有差异的呢?猜测可能是 SpringBoot 版本问题。
最终找到了答案:DataSourceBuilder 创建数据源时,SpringBoot2.0 中用的是key 是 jdbc-url ,而 1.5 版本用的是 url 。所以稳妥的办法是,同时配置这两种信息:
spring: dataSource: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://localhost:3306/db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&&serverTimezone=UTC url: jdbc:mysql://localhost:3306/db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&&serverTimezone=UTC username: root password: 12345 type: com.alibaba.druid.pool.DruidDataSource
标签: #springboot配置多数据源无效