首页
友链
统计
留言
关于
Search
1
网站声明
53 阅读
2
Java生成二维码——基于Google插件
50 阅读
3
Java使用poi-tl动态生成word和pdf
31 阅读
4
循环单链表及其实现
28 阅读
5
双链表及其实现
28 阅读
默认分类
Java
C语言
数据库技术
Linux
前端
其他
登录
/
注册
Search
标签搜索
C语言
数据结构
Java
Spring
数据库技术
MySQL
设计模式
策略模式
工厂模式
IDEA
SpringMVC
AOP
MybatisPlus
POI
easyExcel
LiXiangrong
累计撰写
56
篇文章
累计收到
4
条评论
首页
栏目
默认分类
Java
C语言
数据库技术
Linux
前端
其他
页面
友链
统计
留言
关于
搜索到
1
篇与
的结果
2024-01-12
由MybatisPlus配置类未生效引出的问题到SpringBoot复写Bean
1.在某微服务项目中,测试提出一个缺陷:在列表输入框选择条件,不点击查询而是点击翻页,点击后页面刷新,按照条件筛选出数据数量但不显示数据,其实,本质上就是分页查询的页号溢出问题。由于该项目使用的是MybatisPlus,要解决这个问题其实只要写一个MybatisPlus配置类,中设置一个属性即可。 2.但是发现这个配置类设置的这个属性值未生效,在启动类中获取bean发现这个属性依然是false,注释掉这个Bean后发现依然存在这个Bean,这时候就找到在该项目的jar包中已经存在这个Bean导致自己写的Bean未生效。 3.于是思路就是要重写这个Bean,可以实现Spring中的接口:Bean定义注册后置处理器BeanDefinitionRegistryPostProcessor。代码如下:MybatisPlusMyConfigpackage jnpf.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * MyBatisPlus配置 */ @Configuration public class MybatisPlusMyConfig { /** * @Author LiXiangrong * @Description 复写MybatisPlusInterceptor * @Date 2024/01/11 18:04:33 * @Return com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor **/ @Bean("mybatisPlusInterceptor1") public MybatisPlusInterceptor mybatisPlusInterceptor() { // 核心插件 MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分页插件(如果配置多个插件,切记分页最后添加) PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // dbType(数据库类型) innerInterceptor.setOverflow(true); // 默认值:false。溢出总页数后是否进行处理。 interceptor.addInnerInterceptor(innerInterceptor); return interceptor; } }MyBeanDefinitionRegistryPostProcessorpackage jnpf.config; import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; import org.springframework.stereotype.Component; /** * @Author LiXiangrong * @Description 自定义的Bean定义注册后置处理器 * @Date 2024/01/11 18:06:08 **/ @Component public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { String bean1 = "mybatisPlusInterceptor"; String bean2 = "mybatisPlusInterceptor1"; // 复写MybatisPlusInterceptor // 若jar包和程序都注册了mybatisPlusInterceptor,就将程序里的bd覆盖掉jar包里的bd(继续使用jar包里的beanName,防止jar包中其它bean指定依赖了这个beanName) if (registry.containsBeanDefinition(bean1) && registry.containsBeanDefinition(bean2)) { // 移除bean1,用bean2注册一个新的bean1,然后把bean2移除(复写了bean1) registry.removeBeanDefinition(bean1); registry.registerBeanDefinition(bean1, registry.getBeanDefinition(bean2)); registry.removeBeanDefinition(bean2); } } @Override public void postProcessBeanFactory(@NotNull ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { } }
2024年01月12日
18 阅读
0 评论
0 点赞