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 @@
@@ -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 extends Annotation> 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