赞
踩
背景:项目使用mybatis分页插件不生效,以及多租户使用时读取配置异常
分页插件不细述,网上很多方法试了还是不生效,最后修改到当前版本解决,直接上代码
多租户插件使用遇到的问题:
最开始在MyTenantLineHandler中使用 @Value("${tables}"),服务启动时能从配置中心拉取到配置,但在运行时获取到的值为空,试了很多方法都不生效,后面将配置中心的配置在调用MyTenantLineHandler的那一层向下传递配置值,问题解决
租户配置
- @Component
- @RefreshScope
- @ConfigurationProperties(prefix = "saas.tenant")
- public class ConfigProperties {
-
- public void setColumn(String column) {
- this.column = column;
- }
- public void setTables(List<String> tables) {
- this.tables = tables;
- }
-
- public String getColumn(){
- return this.column;
- }
- public List<String> getTables(){
- return this.tables;
- }
- private String column="";
-
- private List<String> tables= Lists.newArrayList();
- }
TenantLineHandler
- public class MyTenantLineHandler implements TenantLineHandler {
- private final ConfigProperties configProperties;
-
- public MyTenantLineHandler(ConfigProperties configProperties) {
- this.configProperties = configProperties;
- }
-
- @Override
- public LongValue getTenantId() {
- Long tenantId = TenantContextHolder.getTenantId();
- return tenantId == null ? new LongValue(-1) : new LongValue(tenantId);
- }
-
- @Override
- public String getTenantIdColumn() {
- return configProperties.getColumn();
- }
-
- @Override
- public boolean ignoreTable(String tableName) {
- return !configProperties.getTables().contains(tableName);
- // return TenantLineHandler.super.ignoreTable(tableName);
- }
- }
MybatisPlusConfig
注意:TenantLineInnerInterceptor要添加PaginationInnerInterceptor之前,如果放错了,会出现分页count(*)查询时不会自动加上tenant_id
- @Configuration
- @AutoConfigureAfter(PageHelperAutoConfiguration.class)
- //@EnableTransactionManagement
- public class MybatisPlusConfig {
- @Autowired
- private List<SqlSessionFactory> sqlSessionFactoryList;
- @Autowired
- private ConfigProperties configProperties;
-
- @PostConstruct
- public void addMyInterceptor() {
- MybatisPlusInterceptor interceptor = mybatisPlusInterceptor();
- for (SqlSessionFactory factory : sqlSessionFactoryList) {
- factory.getConfiguration().addInterceptor(interceptor);
- }
- }
-
- /**
- * mybatisplus 分页拦截器
- * @return
- */
- public MybatisPlusInterceptor mybatisPlusInterceptor() {
- MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
- TenantLineInnerInterceptor tenantLineInnerInterceptor=new TenantLineInnerInterceptor();
- tenantLineInnerInterceptor.setTenantLineHandler(new MyTenantLineHandler(configProperties));
- interceptor.addInnerInterceptor(tenantLineInnerInterceptor);
- interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
- return interceptor;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。