diff --git a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/add.html b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/add.html index 0ec759b04..ae244027d 100644 --- a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/add.html +++ b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/add.html @@ -86,7 +86,7 @@
- +
@@ -192,6 +192,16 @@ retryInterval: { digits: true, min: 0 + }, + executeTimeout: { + digits: true, + min: 0 + } + }, + messages: { + executeTimeout: { + digits: "请输入正数", + min: "请输入正数" } } }); diff --git a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/detail.html b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/detail.html index eb705e892..5b002a7b6 100644 --- a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/detail.html +++ b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/detail.html @@ -80,7 +80,7 @@
- +

[(*{executeTimeout})]

diff --git a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/edit.html b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/edit.html index e6b2bd7e3..3b942b7f1 100644 --- a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/edit.html +++ b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/job/edit.html @@ -86,7 +86,7 @@
- +
@@ -183,7 +183,27 @@ }); $("#form-job-edit").validate({ - focusCleanup: true + focusCleanup: true, + rules: { + retryCount: { + digits: true, + min: 0 + }, + retryInterval: { + digits: true, + min: 0 + }, + executeTimeout: { + digits: true, + min: 0 + } + }, + messages: { + executeTimeout: { + digits: "请输入正数", + min: "请输入正数" + } + } }); function submitHandler() { diff --git a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/mygroup/worker.html b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/mygroup/worker.html index c75e064d1..7f9edc99b 100644 --- a/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/mygroup/worker.html +++ b/disjob-admin/ruoyi-disjob/src/main/resources/templates/disjob/mygroup/worker.html @@ -29,7 +29,7 @@ 修改全部 - 注册Worker + 添加Worker
@@ -221,9 +221,9 @@ function addWorker() { layer.open({ type: 1, - title: '注册Worker', + title: '添加Worker', btn: ['确定', '取消'], - content: '', + content: '', skin: 'layui-layer-prompt', resize: false, success: function (layero, index) { diff --git a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DisjobAdminDataSourceConfig.java b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DisjobAdminDataSourceConfig.java index 60d9e63d2..caf78cdbc 100644 --- a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DisjobAdminDataSourceConfig.java +++ b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DisjobAdminDataSourceConfig.java @@ -6,10 +6,10 @@ import com.alibaba.druid.util.Utils; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.utils.MybatisUtils; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.properties.DruidProperties; import com.ruoyi.framework.config.properties.SimpleJdbcProperties; import com.ruoyi.framework.datasource.DynamicDataSource; +import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.io.VFS; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; @@ -78,7 +78,7 @@ public DynamicDataSource ruoyiDynamicDataSource(SimpleJdbcProperties ruoyiMaster druidProperties.dataSource(masterDataSource); targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); - if (ruoyiSlaveJdbcConfig.isValid()) { + if (StringUtils.isNotBlank(ruoyiSlaveJdbcConfig.getUrl())) { DruidDataSource slaveDataSource = DruidDataSourceBuilder.create().build(); slaveDataSource.setUrl(ruoyiSlaveJdbcConfig.getUrl()); slaveDataSource.setUsername(ruoyiSlaveJdbcConfig.getUsername()); diff --git a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SimpleJdbcProperties.java b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SimpleJdbcProperties.java index 562f74299..acd07995b 100644 --- a/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SimpleJdbcProperties.java +++ b/disjob-admin/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SimpleJdbcProperties.java @@ -16,8 +16,6 @@ package com.ruoyi.framework.config.properties; -import org.apache.commons.lang3.StringUtils; - /** * Simple jdbc properties * @@ -53,8 +51,4 @@ public void setPassword(String password) { this.password = password; } - public boolean isValid() { - return StringUtils.isNotBlank(url); - } - } diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/MybatisDataSourceConfigurer.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/MybatisDataSourceConfigurer.java index ad160a162..61892d3d9 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/MybatisDataSourceConfigurer.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/MybatisDataSourceConfigurer.java @@ -103,13 +103,13 @@ class MybatisDataSourceRegistrar implements /*EnvironmentAware,*/ ImportBeanDefi private final Environment environment; - public MybatisDataSourceRegistrar(Environment environment) { + MybatisDataSourceRegistrar(Environment environment) { this.environment = environment; } @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { - AnnotationAttributes attrs = AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(MybatisDataSourceConfigurer.class.getName())); + AnnotationAttributes attrs = SpringUtils.getAnnotationAttributes(importingClassMetadata, MybatisDataSourceConfigurer.class); if (attrs == null) { return; } diff --git a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java index fef400274..628be352c 100644 --- a/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java +++ b/disjob-common/src/main/java/cn/ponfee/disjob/common/spring/SpringUtils.java @@ -19,12 +19,15 @@ import org.apache.commons.io.IOUtils; import org.springframework.boot.web.context.WebServerApplicationContext; import org.springframework.boot.web.server.WebServer; +import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; +import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.util.ResourceUtils; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.lang.annotation.Annotation; import java.net.URL; /** @@ -60,4 +63,9 @@ public static int getActualWebServerPort(WebServerApplicationContext webServerAp return webServer.getPort(); } + public static AnnotationAttributes getAnnotationAttributes(AnnotatedTypeMetadata metadata, + Class annotationClass) { + return AnnotationAttributes.fromMap(metadata.getAnnotationAttributes(annotationClass.getName())); + } + } diff --git a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java index 7e0a9b1f9..98eda90e0 100644 --- a/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java +++ b/disjob-id/src/main/java/cn/ponfee/disjob/id/snowflake/db/DbSnowflakeIdGenerator.java @@ -17,6 +17,7 @@ package cn.ponfee.disjob.id.snowflake.db; import cn.ponfee.disjob.common.base.IdGenerator; +import cn.ponfee.disjob.common.spring.SpringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; import org.springframework.beans.factory.annotation.Autowired; @@ -65,11 +66,11 @@ int workerIdBitLength() default 8; /** - * Named DbDistributedSnowflake + * Basic DbDistributedSnowflake */ - class NamedDbdSnowflake extends DbDistributedSnowflake { + class BasicDbdSnowflake extends DbDistributedSnowflake { - NamedDbdSnowflake(JdbcTemplate jdbcTemplate, + BasicDbdSnowflake(JdbcTemplate jdbcTemplate, Object supervisor, String bizTag, int sequenceBitLength, @@ -103,7 +104,7 @@ private static String serializeSupervisor(Object supervisor) { /** * Annotated DbDistributedSnowflake */ - class AnnotatedDbSnowflake extends NamedDbdSnowflake { + class AnnotatedDbSnowflake extends BasicDbdSnowflake { AnnotatedDbSnowflake(@Autowired JdbcTemplate jdbcTemplate, // use @Primary JdbcTemplate bean @Autowired @Qualifier(SPRING_BEAN_NAME_CURRENT_SUPERVISOR) Object supervisor, @@ -118,7 +119,7 @@ class DbSnowFlakeWorkerRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { - AnnotationAttributes attrs = AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(DbSnowflakeIdGenerator.class.getName())); + AnnotationAttributes attrs = SpringUtils.getAnnotationAttributes(importingClassMetadata, DbSnowflakeIdGenerator.class); if (attrs == null) { return; } @@ -129,9 +130,9 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B bd = new AnnotatedGenericBeanDefinition(AnnotatedDbSnowflake.class); } else { bd = new GenericBeanDefinition(); - bd.setBeanClass(NamedDbdSnowflake.class); + bd.setBeanClass(BasicDbdSnowflake.class); bd.getConstructorArgumentValues().addIndexedArgumentValue(0, new RuntimeBeanReference(jdbcTemplateRef)); - bd.getConstructorArgumentValues().addIndexedArgumentValue(1, new RuntimeBeanReference(NamedDbdSnowflake.SPRING_BEAN_NAME_CURRENT_SUPERVISOR)); + bd.getConstructorArgumentValues().addIndexedArgumentValue(1, new RuntimeBeanReference(BasicDbdSnowflake.SPRING_BEAN_NAME_CURRENT_SUPERVISOR)); } bd.getConstructorArgumentValues().addIndexedArgumentValue(2, attrs.getString("bizTag")); diff --git a/disjob-registry/disjob-registry-etcd/src/main/java/cn/ponfee/disjob/registry/etcd/EtcdClient.java b/disjob-registry/disjob-registry-etcd/src/main/java/cn/ponfee/disjob/registry/etcd/EtcdClient.java index 8b24d0d2e..26b34c98c 100644 --- a/disjob-registry/disjob-registry-etcd/src/main/java/cn/ponfee/disjob/registry/etcd/EtcdClient.java +++ b/disjob-registry/disjob-registry-etcd/src/main/java/cn/ponfee/disjob/registry/etcd/EtcdClient.java @@ -90,7 +90,7 @@ public class EtcdClient implements Closeable { */ private final LoopThread healthCheckThread; - private final Map> childWatchers = new HashMap<>(); + private final Map> childWatchers = new ConcurrentHashMap<>(); private final Set> connectionStateListeners = ConcurrentHashMap.newKeySet(); @@ -224,9 +224,11 @@ public synchronized void watchChildChanged(String parentKey, CountDownLatch latc throw new IllegalStateException("Parent key already watched: " + parentKey); } - ChildChangedListener innerListener = new ChildChangedListener(parentKey, latch, listener); - Watch.Watcher watcher = client.getWatchClient().watch(utf8(parentKey), WATCH_PREFIX_OPTION, innerListener); - childWatchers.put(parentKey, Pair.of(watcher, innerListener)); + childWatchers.computeIfAbsent(parentKey, key -> { + ChildChangedListener innerListener = new ChildChangedListener(key, latch, listener); + Watch.Watcher watcher = client.getWatchClient().watch(utf8(key), WATCH_PREFIX_OPTION, innerListener); + return Pair.of(watcher, innerListener); + }); } public synchronized boolean unwatchChildChanged(String parentKey) { diff --git a/disjob-registry/disjob-registry-zookeeper/pom.xml b/disjob-registry/disjob-registry-zookeeper/pom.xml index f373e4639..66634cecb 100644 --- a/disjob-registry/disjob-registry-zookeeper/pom.xml +++ b/disjob-registry/disjob-registry-zookeeper/pom.xml @@ -37,6 +37,14 @@ + + org.apache.curator curator-test diff --git a/disjob-registry/disjob-registry-zookeeper/src/main/java/cn/ponfee/disjob/registry/zookeeper/CuratorFrameworkClient.java b/disjob-registry/disjob-registry-zookeeper/src/main/java/cn/ponfee/disjob/registry/zookeeper/CuratorFrameworkClient.java index 6d2653196..0feb1f04f 100644 --- a/disjob-registry/disjob-registry-zookeeper/src/main/java/cn/ponfee/disjob/registry/zookeeper/CuratorFrameworkClient.java +++ b/disjob-registry/disjob-registry-zookeeper/src/main/java/cn/ponfee/disjob/registry/zookeeper/CuratorFrameworkClient.java @@ -35,7 +35,11 @@ import org.springframework.util.Assert; import java.io.Closeable; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -48,7 +52,7 @@ public class CuratorFrameworkClient implements Closeable { private static final Logger LOG = LoggerFactory.getLogger(CuratorFrameworkClient.class); - private final Map childWatchers = new HashMap<>(); + private final Map childWatchers = new ConcurrentHashMap<>(); private final CuratorFramework curatorFramework; private final ReconnectCallback reconnectCallback; diff --git a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/SupervisorDataSourceConfig.java b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/SupervisorDataSourceConfig.java index 54b8a463d..6dc702453 100644 --- a/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/SupervisorDataSourceConfig.java +++ b/disjob-supervisor/src/main/java/cn/ponfee/disjob/supervisor/dao/SupervisorDataSourceConfig.java @@ -39,8 +39,7 @@ @Configuration @MybatisDataSourceConfigurer( dataSourceName = SupervisorDataSourceConfig.DATA_SOURCE_NAME, - mapperLocations = "classpath*:cn/ponfee/disjob/supervisor/dao/xml/*.xml", - basePackageClasses = SupervisorDataSourceConfig.class + mapperLocations = "classpath*:cn/ponfee/disjob/supervisor/dao/xml/*.xml" ) public class SupervisorDataSourceConfig { diff --git a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/dao/JobTxMapper.java b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/dao/JobTxMapper.java index e591f46ce..0890fead6 100644 --- a/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/dao/JobTxMapper.java +++ b/disjob-supervisor/src/test/java/cn/ponfee/disjob/supervisor/dao/JobTxMapper.java @@ -17,12 +17,9 @@ package cn.ponfee.disjob.supervisor.dao; import cn.ponfee.disjob.core.model.SchedJob; -import cn.ponfee.disjob.supervisor.application.request.SchedJobPageRequest; import org.apache.ibatis.annotations.Param; import java.util.List; -import java.util.Map; -import java.util.Set; /** * test disjob tx