From 5e8bdf8ab19ac4e4cdff34f00ffec084e9537baf Mon Sep 17 00:00:00 2001 From: opensnail <598092184@qq.com> Date: Sat, 20 Jul 2024 13:48:22 +0800 Subject: [PATCH] =?UTF-8?q?fix(sj=5F1.2.0-beta1):=20=E4=BC=98=E5=8C=96myba?= =?UTF-8?q?tis=20xml=E7=9A=84=E5=8A=A0=E8=BD=BD=E9=A1=BA=E5=BA=8F,=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E4=B8=AAid=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SnailJobTemplateAutoConfiguration.java | 15 ++++-- .../handler/SnailJobMybatisConfiguration.java | 47 +++++++++++++++++++ .../actor/scan/AbstractScanGroup.java | 4 ++ 3 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/SnailJobMybatisConfiguration.java diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java index 08b554b4..c87f3c5b 100644 --- a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/config/SnailJobTemplateAutoConfiguration.java @@ -3,6 +3,7 @@ package com.aizuda.snailjob.template.datasource.config; import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.template.datasource.enums.DbTypeEnum; import com.aizuda.snailjob.template.datasource.handler.InjectionMetaObjectHandler; +import com.aizuda.snailjob.template.datasource.handler.SnailJobMybatisConfiguration; import com.aizuda.snailjob.template.datasource.utils.DbUtils; import com.aizuda.snailjob.template.datasource.utils.RequestDataHelper; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; @@ -44,18 +45,21 @@ public class SnailJobTemplateAutoConfiguration { private static final List TABLES_WITH_PARTITION = Arrays.asList("sj_retry_task", "sj_retry_dead_letter"); @Bean("sqlSessionFactory") - public SqlSessionFactory sqlSessionFactory(DataSource dataSource, Environment environment, MybatisPlusInterceptor mybatisPlusInterceptor, MybatisPlusProperties mybatisPlusProperties) throws Exception { + public SqlSessionFactory sqlSessionFactory(DataSource dataSource, Environment environment, + MybatisPlusInterceptor mybatisPlusInterceptor, + MybatisPlusProperties mybatisPlusProperties, + SnailJobMybatisConfiguration snailJobMybatisConfiguration) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); DbTypeEnum dbTypeEnum = DbUtils.getDbType(); // 动态设置mapper资源: 通用 + 数据库专用 PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - Resource[] templateMapperResource = resolver.getResources("classpath*:/template/mapper/*.xml"); Resource[] specificMapperResource = resolver.getResources(MessageFormat.format("classpath*:/{0}/mapper/*.xml", dbTypeEnum.getDb())); + Resource[] templateMapperResource = resolver.getResources("classpath*:/template/mapper/*.xml"); List resources = new ArrayList<>(); - resources.addAll(List.of(templateMapperResource)); resources.addAll(List.of(specificMapperResource)); + resources.addAll(List.of(templateMapperResource)); factoryBean.setMapperLocations(resources.toArray(new Resource[0])); // 分页插件 @@ -67,6 +71,7 @@ public class SnailJobTemplateAutoConfiguration { globalConfig.setMetaObjectHandler(new InjectionMetaObjectHandler()); factoryBean.setGlobalConfig(mybatisPlusProperties.getGlobalConfig()); + factoryBean.setConfiguration(snailJobMybatisConfiguration); return factoryBean.getObject(); } @@ -76,6 +81,10 @@ public class SnailJobTemplateAutoConfiguration { return new SqlSessionTemplate(sqlSessionFactory); } + @Bean + public SnailJobMybatisConfiguration snailJobMybatisConfiguration() { + return new SnailJobMybatisConfiguration(); + } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(Environment environment) { diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/SnailJobMybatisConfiguration.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/SnailJobMybatisConfiguration.java new file mode 100644 index 00000000..537f7bbc --- /dev/null +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/handler/SnailJobMybatisConfiguration.java @@ -0,0 +1,47 @@ +package com.aizuda.snailjob.template.datasource.handler; + +import com.aizuda.snailjob.template.datasource.persistence.mapper.JobLogMessageMapper; +import com.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper; +import com.aizuda.snailjob.template.datasource.persistence.mapper.RetrySummaryMapper; +import com.aizuda.snailjob.template.datasource.persistence.mapper.RetryTaskLogMapper; +import com.aizuda.snailjob.template.datasource.persistence.mapper.RetryTaskLogMessageMapper; +import com.aizuda.snailjob.template.datasource.persistence.mapper.RetryTaskMapper; +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import org.apache.ibatis.mapping.MappedStatement; + +import java.util.HashSet; +import java.util.Set; + +/** + * @author: opensnail + * @date : 2024-07-19 + * @since : 1.2.0 + */ +public class SnailJobMybatisConfiguration extends MybatisConfiguration { + + /** + * 重复的ID不需要告警 配置列表 + * 此设计为了多数据源不同数据库包下面加载的xml有重复的mybatis id 会告警报错问题 + */ + static final Set DUPLICATE_IDS = new HashSet<>(); + + static { + DUPLICATE_IDS.add(JobSummaryMapper.class.getName() + ".insertBatch"); + DUPLICATE_IDS.add(RetryTaskLogMapper.class.getName() + ".insertBatch"); + DUPLICATE_IDS.add(RetrySummaryMapper.class.getName() + ".insertBatch"); + DUPLICATE_IDS.add(RetryTaskLogMessageMapper.class.getName() + ".insertBatch"); + DUPLICATE_IDS.add(RetryTaskMapper.class.getName() + ".insertBatch"); + DUPLICATE_IDS.add(JobLogMessageMapper.class.getName() + ".insertBatch"); + } + + @Override + public void addMappedStatement(final MappedStatement ms) { + if (mappedStatements.containsKey(ms.getId())) { + if (!DUPLICATE_IDS.contains(ms.getId())) { + super.addMappedStatement(ms); + } + } else { + super.addMappedStatement(ms); + } + } +} diff --git a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java index 86b5e7f2..14e37eb2 100644 --- a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java +++ b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java @@ -132,6 +132,10 @@ public abstract class AbstractScanGroup extends AbstractActor { waitUpdateRetryTasks.add(retryTask); } + if (CollUtil.isEmpty(waitUpdateRetryTasks)) { + return; + } + // 批量更新 retryTaskMapper.updateBatchNextTriggerAtById(scanTask.getGroupPartition(), waitUpdateRetryTasks);