From d6e9b4a9cab3339bb51d4635c9bd8b64c9d125e0 Mon Sep 17 00:00:00 2001 From: WeiYe <33245094+WeiYe-Jing@users.noreply.github.com> Date: Mon, 30 Mar 2020 09:44:00 +0800 Subject: [PATCH] Revert "Feature#61" --- .gitignore | 3 +- datax-admin/pom.xml | 15 - .../admin/controller/JobInfoController.java | 2 +- .../controller/JobTemplateController.java | 2 +- .../datax/admin/core/trigger/JobTrigger.java | 2 +- .../com/wugui/datax/admin/entity/JwtUser.java | 4 +- .../admin/service/impl/JobServiceImpl.java | 61 ++-- .../service/impl/JobTemplateServiceImpl.java | 6 +- .../service/impl/UserDetailsServiceImpl.java | 4 +- .../com/wugui/datax/admin/util/JSONUtils.java | 141 +++++--- .../wugui/datax/admin/util/ServletUtils.java | 2 +- datax-admin/src/main/lib/US_export_policy.jar | Bin 3023 -> 0 bytes datax-admin/src/main/lib/local_policy.jar | Bin 3035 -> 0 bytes .../main/resources/i18n/message.properties | 2 +- .../main/resources/i18n/message_en.properties | 2 +- .../mybatis-mapper/JobUserMapper.xml | 2 +- .../wugui/datatx/core/thread/JobThread.java | 4 +- .../executor/core/config/DataXConfig.java | 2 +- .../XxlRegistryBaseClient.java | 47 ++- .../model/XxlRegistryDataParamVO.java | 1 - .../util/BasicHttpUtil.java | 11 +- .../util/json/BasicJson.java | 7 +- .../util/json/BasicJsonReader.java | 304 +++++++++--------- .../util/json/BasicJsonwriter.java | 5 +- .../registry/impl/LocalServiceRegistry.java | 6 +- .../invoker/call/XxlRpcInvokeFuture.java | 4 +- .../impl/XxlRpcSpringInvokerFactory.java | 2 +- .../java/com/wugui/datax/rpc/util/IpUtil.java | 16 +- .../com/wugui/datax/rpc/util/NetUtil.java | 2 +- .../wugui/datax/rpc/util/XxlRpcException.java | 1 - doc/db/2.1.2预留.sql | 25 +- doc/db/datax_web.sql | 9 +- 32 files changed, 372 insertions(+), 322 deletions(-) delete mode 100644 datax-admin/src/main/lib/US_export_policy.jar delete mode 100644 datax-admin/src/main/lib/local_policy.jar diff --git a/.gitignore b/.gitignore index 7433d23d..0f8aae2d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,4 @@ /datax-rpc/target/ /datax-all.iml /logs/ -*-dev* -/data/ +*-dev* \ No newline at end of file diff --git a/datax-admin/pom.xml b/datax-admin/pom.xml index 106760d3..cf85a69c 100644 --- a/datax-admin/pom.xml +++ b/datax-admin/pom.xml @@ -126,21 +126,6 @@ ${basedir}/src/main/lib/sqljdbc4-4.0.jar - - com.oracle - local_policy - 4.0 - system - ${basedir}/src/main/lib/local_policy.jar - - - com.oracle - US_export_policy - 4.0 - system - ${basedir}/src/main/lib/US_export_policy.jar - - org.slf4j slf4j-api diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobInfoController.java b/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobInfoController.java index 4132c5ab..2b14f653 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobInfoController.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobInfoController.java @@ -102,7 +102,7 @@ public class JobInfoController { } } } catch (ParseException e) { - return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid")); + return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")); } return new ReturnT<>(result); } diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobTemplateController.java b/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobTemplateController.java index 8fc16b59..3a5de855 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobTemplateController.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/controller/JobTemplateController.java @@ -74,7 +74,7 @@ public class JobTemplateController { } } } catch (ParseException e) { - return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid")); + return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")); } return new ReturnT<>(result); } diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/core/trigger/JobTrigger.java b/datax-admin/src/main/java/com/wugui/datax/admin/core/trigger/JobTrigger.java index 251823cd..f53688be 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/core/trigger/JobTrigger.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/core/trigger/JobTrigger.java @@ -49,7 +49,7 @@ public class JobTrigger { } if (GlueTypeEnum.BEAN.getDesc().equals(jobInfo.getGlueType())) { //解密账密 - String json = JSONUtils.changeJson(jobInfo.getJobJson(), JSONUtils.decrypt); + String json = JSONUtils.decryptJson(jobInfo.getJobJson()); jobInfo.setJobJson(json); } if (StringUtils.isNotBlank(executorParam)) { diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/entity/JwtUser.java b/datax-admin/src/main/java/com/wugui/datax/admin/entity/JwtUser.java index 217a2a5c..8fd30a19 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/entity/JwtUser.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/entity/JwtUser.java @@ -21,11 +21,11 @@ public class JwtUser implements UserDetails { } // 写一个能直接使用user创建jwtUser的构造器 - public JwtUser(JobUser user, JobRole role) { + public JwtUser(JobUser user) { id = user.getId(); username = user.getUsername(); password = user.getPassword(); - authorities = Collections.singleton(new SimpleGrantedAuthority(role.getName())); + authorities = Collections.singleton(new SimpleGrantedAuthority(user.getRole())); } @Override diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobServiceImpl.java b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobServiceImpl.java index dca34b9e..c502fd13 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobServiceImpl.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobServiceImpl.java @@ -15,11 +15,8 @@ import com.wugui.datax.admin.entity.JobLogReport; import com.wugui.datax.admin.mapper.*; import com.wugui.datax.admin.service.JobService; import com.wugui.datax.admin.util.CronUtil; -import com.wugui.datax.admin.util.JSONUtils; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -55,7 +52,7 @@ public class JobServiceImpl implements JobService { int list_count = jobInfoMapper.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, glueType, author); // package result - Map maps = new HashMap<>(); + Map maps = new HashMap(); maps.put("recordsTotal", list_count); // 总记录数 maps.put("recordsFiltered", list_count); // 过滤后的总记录数 maps.put("data", list); // 分页列表 @@ -67,31 +64,31 @@ public class JobServiceImpl implements JobService { // valid JobGroup group = jobGroupMapper.load(jobInfo.getJobGroup()); if (group == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose") + I18nUtil.getString("jobinfo_field_jobgroup"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose") + I18nUtil.getString("jobinfo_field_jobgroup"))); } if (!CronExpression.isValidExpression(jobInfo.getJobCron())) { - return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid")); + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")); } if (jobInfo.getGlueType().equals(GlueTypeEnum.BEAN.getDesc()) && jobInfo.getJobJson().trim().length() <= 2) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobjson"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobjson"))); } if (jobInfo.getJobDesc() == null || jobInfo.getJobDesc().trim().length() == 0) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc"))); } if (jobInfo.getAuthor() == null || jobInfo.getAuthor().trim().length() == 0) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author"))); } if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid"))); } if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid"))); } if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype") + I18nUtil.getString("system_unvalid"))); } if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler() == null || jobInfo.getExecutorHandler().trim().length() == 0)) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + "JobHandler")); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + "JobHandler")); } // fix "\r" in shell @@ -127,15 +124,14 @@ public class JobServiceImpl implements JobService { // add in db jobInfo.setAddTime(new Date()); - jobInfo.setJobJson(JSONUtils.changeJson(jobInfo.getJobJson(), JSONUtils.encrypt)); jobInfo.setUpdateTime(new Date()); jobInfo.setGlueUpdatetime(new Date()); jobInfoMapper.save(jobInfo); if (jobInfo.getId() < 1) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add") + I18nUtil.getString("system_fail"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add") + I18nUtil.getString("system_fail"))); } - return new ReturnT<>(String.valueOf(jobInfo.getId())); + return new ReturnT(String.valueOf(jobInfo.getId())); } @Override @@ -157,22 +153,22 @@ public class JobServiceImpl implements JobService { // valid if (!CronExpression.isValidExpression(jobInfo.getJobCron())) { - return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid")); + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")); } if (jobInfo.getGlueType().equals(GlueTypeEnum.BEAN.getDesc()) && jobInfo.getJobJson().trim().length() <= 2) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobjson"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobjson"))); } if (jobInfo.getJobDesc() == null || jobInfo.getJobDesc().trim().length() == 0) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc"))); } if (jobInfo.getAuthor() == null || jobInfo.getAuthor().trim().length() == 0) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author"))); } if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid"))); } if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid"))); } // ChildJobId valid @@ -204,7 +200,7 @@ public class JobServiceImpl implements JobService { // group valid JobGroup jobGroup = jobGroupMapper.load(jobInfo.getJobGroup()); if (jobGroup == null) { - return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup") + I18nUtil.getString("system_unvalid"))); + return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup") + I18nUtil.getString("system_unvalid"))); } // stage job info @@ -224,15 +220,26 @@ public class JobServiceImpl implements JobService { nextTriggerTime = nextValidTime.getTime(); } catch (ParseException e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid") + " | " + e.getMessage()); + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") + " | " + e.getMessage()); } } - BeanUtils.copyProperties(jobInfo,exists_jobInfo); + exists_jobInfo.setJobGroup(jobInfo.getJobGroup()); + exists_jobInfo.setJobCron(jobInfo.getJobCron()); + exists_jobInfo.setJobDesc(jobInfo.getJobDesc()); + exists_jobInfo.setAuthor(jobInfo.getAuthor()); + exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail()); + exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy()); + exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler()); + exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam()); + exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy()); + exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout()); + exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount()); + exists_jobInfo.setChildJobId(jobInfo.getChildJobId()); + exists_jobInfo.setTriggerNextTime(nextTriggerTime); exists_jobInfo.setReplaceParam(jobInfo.getReplaceParam()); exists_jobInfo.setJvmParam(jobInfo.getJvmParam()); exists_jobInfo.setIncStartTime(jobInfo.getIncStartTime()); - exists_jobInfo.setTriggerNextTime(nextTriggerTime); exists_jobInfo.setUpdateTime(new Date()); exists_jobInfo.setGlueType(jobInfo.getGlueType()); exists_jobInfo.setPartitionInfo(jobInfo.getPartitionInfo()); @@ -278,7 +285,7 @@ public class JobServiceImpl implements JobService { nextTriggerTime = nextValidTime.getTime(); } catch (ParseException e) { logger.error(e.getMessage(), e); - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid") + " | " + e.getMessage()); + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") + " | " + e.getMessage()); } xxlJobInfo.setTriggerStatus(1); diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobTemplateServiceImpl.java b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobTemplateServiceImpl.java index 1f664a8d..1edf37a1 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobTemplateServiceImpl.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/JobTemplateServiceImpl.java @@ -49,7 +49,7 @@ public class JobTemplateServiceImpl implements JobTemplateService { int list_count = jobTemplateMapper.pageListCount(start, length, jobGroup, jobDesc, executorHandler, author); // package result - Map maps = new HashMap<>(); + Map maps = new HashMap(); maps.put("recordsTotal", list_count); // 总记录数 maps.put("recordsFiltered", list_count); // 过滤后的总记录数 maps.put("data", list); // 分页列表 @@ -64,7 +64,7 @@ public class JobTemplateServiceImpl implements JobTemplateService { return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) ); } if (!CronExpression.isValidExpression(jobTemplate.getJobCron())) { - return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid") ); + return new ReturnT(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid") ); } if (jobTemplate.getJobDesc()==null || jobTemplate.getJobDesc().trim().length()==0) { return new ReturnT(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) ); @@ -142,7 +142,7 @@ public class JobTemplateServiceImpl implements JobTemplateService { // valid if (!CronExpression.isValidExpression(jobTemplate.getJobCron())) { - return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_invalid")); + return new ReturnT<>(ReturnT.FAIL_CODE, I18nUtil.getString("jobinfo_field_cron_unvalid")); } if (jobTemplate.getJobDesc()==null || jobTemplate.getJobDesc().trim().length()==0) { return new ReturnT<>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc"))); diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/UserDetailsServiceImpl.java b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/UserDetailsServiceImpl.java index b1300829..dcd9ee05 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/UserDetailsServiceImpl.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/service/impl/UserDetailsServiceImpl.java @@ -1,6 +1,5 @@ package com.wugui.datax.admin.service.impl; -import com.wugui.datax.admin.entity.JobRole; import com.wugui.datax.admin.entity.JwtUser; import com.wugui.datax.admin.entity.JobUser; import com.wugui.datax.admin.mapper.JobUserMapper; @@ -25,8 +24,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { @Override public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { JobUser user = jobUserMapper.loadByUserName(s); - JobRole role = jobUserMapper.getRoleByUserId(user.getId()); - return new JwtUser(user, role); + return new JwtUser(user); } } diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/util/JSONUtils.java b/datax-admin/src/main/java/com/wugui/datax/admin/util/JSONUtils.java index b49a4f4d..fea427a7 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/util/JSONUtils.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/util/JSONUtils.java @@ -1,5 +1,6 @@ package com.wugui.datax.admin.util; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -14,63 +15,105 @@ import com.alibaba.fastjson.JSONObject; public class JSONUtils { /** - * decrypt 解密 - */ - public static Integer decrypt = 0; - /** - * decrypt 加密 - */ - public static Integer encrypt = 1; - - /** - * @param content - * @param key - * @param changeType 0加密 or 1解密 + * 返回格式化的json + * + * @param object * @return */ - public static JSONObject change(String content, String key, Integer changeType) { - JSONObject keyObj = JSONObject.parseObject(JSONObject.parseObject(content).getString(key)); - JSONObject params = JSONObject.parseObject(keyObj.getString("parameter")); - String dUsername = null, dPassword = null; - if (decrypt.equals(changeType)) { //解密 - dUsername = AESUtil.decrypt(params.getString("username")); - dPassword = AESUtil.decrypt(params.getString("password")); - - } else if (encrypt.equals(changeType)) {//加密 - - dUsername = AESUtil.encrypt(params.getString("username")); - dPassword = AESUtil.encrypt(params.getString("password")); - } - String username = dUsername == null ? params.getString("username") : dUsername; - String password = dPassword == null ? params.getString("password") : dPassword; - params.put("username", username); - params.put("password", password); - keyObj.put("parameter", params); - return keyObj; + public static String formatJson(Object object) { + return JSON.toJSONString(object, true); } - /** - * @param jsonStr - * @param changeType 0加密 or 1解密 - * @return jsonStr - */ - public static String changeJson(String jsonStr, Integer changeType) { + public static String decryptJson(String jsonStr) { JSONObject json = JSONObject.parseObject(jsonStr); JSONObject job = json.getJSONObject("job"); - JSONArray contents = job.getJSONArray("content"); - for (int i = 0; i < contents.size(); i++) { - String contentStr = contents.getString(i); - Object obj = contents.get(i); - if (decrypt.equals(changeType)) { //解密 - ((JSONObject) obj).put("reader", change(contentStr, "reader", decrypt)); - ((JSONObject) obj).put("writer", change(contentStr, "writer", decrypt)); - } else if (encrypt.equals(changeType)) {//加密 - ((JSONObject) obj).put("reader", change(contentStr, "reader", encrypt)); - ((JSONObject) obj).put("writer", change(contentStr, "writer", encrypt)); - } + JSONArray content = job.getJSONArray("content"); + for (int i = 0; i < content.size(); i++) { + ((JSONObject) content.get(i)).put("reader", decrypt(content.getString(i), "reader")); + ((JSONObject) content.get(i)).put("writer", decrypt(content.getString(i), "writer")); } - job.put("content", contents); + job.put("content", content); json.put("job", job); return json.toJSONString(); } + + public static JSONObject decrypt(String content, String key) { + JSONObject writer = JSONObject.parseObject(JSONObject.parseObject(content).getString(key)); + JSONObject writerParams = JSONObject.parseObject(writer.getString("parameter")); + + String dUsername = AESUtil.decrypt(writerParams.getString("username")); + String username = dUsername == null ? writerParams.getString("username") : dUsername; + writerParams.put("username", username); + + String dPassword = AESUtil.decrypt(writerParams.getString("password")); + String password = dPassword == null ? writerParams.getString("password") : dPassword; + writerParams.put("password", password); + + writer.put("parameter", writerParams); + return writer; + } + + + public static void main(String[] args) { + String s = "{\n" + + " \"job\": {\n" + + " \"setting\": {\n" + + " \"speed\": {\n" + + " \"channel\": 3\n" + + " },\n" + + " \"errorLimit\": {\n" + + " \"record\": 0,\n" + + " \"percentage\": 0.02\n" + + " }\n" + + " },\n" + + " \"content\": [\n" + + " {\n" + + " \"reader\": {\n" + + " \"name\": \"mysqlreader\",\n" + + " \"parameter\": {\n" + + " \"username\": \"8ivlZcKGclwi5NwpuzkXzg==\",\n" + + " \"password\": \"fZfGM5387/mzCDxqjb2thQ==\",\n" + + " \"column\": [\n" + + " \"`id`\"\n" + + " ],\n" + + " \"splitPk\": \"\",\n" + + " \"connection\": [\n" + + " {\n" + + " \"table\": [\n" + + " \"datax_plugin\"\n" + + " ],\n" + + " \"jdbcUrl\": [\n" + + " \"jdbc:mysql://localhost:3306/datax_web\"\n" + + " ]\n" + + " }\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"writer\": {\n" + + " \"name\": \"mysqlwriter\",\n" + + " \"parameter\": {\n" + + " \"username\": \"8ivlZcKGclwi5NwpuzkXzg==\",\n" + + " \"password\": \"fZfGM5387/mzCDxqjb2thQ==\",\n" + + " \"column\": [\n" + + " \"`id`\"\n" + + " ],\n" + + " \"preSql\": [\n" + + " \"\"\n" + + " ],\n" + + " \"connection\": [\n" + + " {\n" + + " \"table\": [\n" + + " \"job_log\"\n" + + " ],\n" + + " \"jdbcUrl\": \"jdbc:mysql://localhost:3306/datax_web\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + " }\n" + + " ]\n" + + " }\n" + + "}"; + System.out.println(decryptJson(s)); + } } diff --git a/datax-admin/src/main/java/com/wugui/datax/admin/util/ServletUtils.java b/datax-admin/src/main/java/com/wugui/datax/admin/util/ServletUtils.java index 5f936de6..942689b5 100644 --- a/datax-admin/src/main/java/com/wugui/datax/admin/util/ServletUtils.java +++ b/datax-admin/src/main/java/com/wugui/datax/admin/util/ServletUtils.java @@ -56,7 +56,7 @@ public class ServletUtils { * requestContextFilter/* */ public static HttpServletResponse getResponse() { - HttpServletResponse response; + HttpServletResponse response = null; try { response = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getResponse(); if (response == null) { diff --git a/datax-admin/src/main/lib/US_export_policy.jar b/datax-admin/src/main/lib/US_export_policy.jar deleted file mode 100644 index 251b102c57c076504ba818330e4fceb4509753d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3023 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 Lo19~UoUi`@yDZ_Z diff --git a/datax-admin/src/main/resources/i18n/message.properties b/datax-admin/src/main/resources/i18n/message.properties index dfe1e567..db263c23 100644 --- a/datax-admin/src/main/resources/i18n/message.properties +++ b/datax-admin/src/main/resources/i18n/message.properties @@ -122,7 +122,7 @@ jobinfo_field_readerColumns=Reader Column jobinfo_field_writerColumns=Writer Column jobinfo_field_gluetype=运行模式 jobinfo_field_executorparam=任务参数 -jobinfo_field_cron_invalid=Cron格式非法 +jobinfo_field_cron_unvalid=Cron格式非法 jobinfo_field_cron_never_fire=Cron非法,永远不会触发 jobinfo_field_author=负责人 jobinfo_field_timeout=任务超时时间 diff --git a/datax-admin/src/main/resources/i18n/message_en.properties b/datax-admin/src/main/resources/i18n/message_en.properties index 70b14afd..155539c6 100644 --- a/datax-admin/src/main/resources/i18n/message_en.properties +++ b/datax-admin/src/main/resources/i18n/message_en.properties @@ -117,7 +117,7 @@ jobinfo_field_jobJSON=Job JSON jobinfo_field_timeout=Job timeout period jobinfo_field_gluetype=GLUE Type jobinfo_field_executorparam=Param -jobinfo_field_cron_invalid=The Cron is illegal +jobinfo_field_cron_unvalid=The Cron is illegal jobinfo_field_cron_never_fire=The Cron will never fire jobinfo_field_author=Author jobinfo_field_alarmemail=Alarm email diff --git a/datax-admin/src/main/resources/mybatis-mapper/JobUserMapper.xml b/datax-admin/src/main/resources/mybatis-mapper/JobUserMapper.xml index 2a8f0657..70cc54f1 100644 --- a/datax-admin/src/main/resources/mybatis-mapper/JobUserMapper.xml +++ b/datax-admin/src/main/resources/mybatis-mapper/JobUserMapper.xml @@ -65,7 +65,7 @@ UPDATE job_user SET - password = #{password} + password = #{password}, role = #{role}, permission = #{permission} diff --git a/datax-core/src/main/java/com/wugui/datatx/core/thread/JobThread.java b/datax-core/src/main/java/com/wugui/datatx/core/thread/JobThread.java index 85350edd..8fd19b1d 100644 --- a/datax-core/src/main/java/com/wugui/datatx/core/thread/JobThread.java +++ b/datax-core/src/main/java/com/wugui/datatx/core/thread/JobThread.java @@ -46,8 +46,8 @@ public class JobThread extends Thread { public JobThread(int jobId, IJobHandler handler) { this.jobId = jobId; this.handler = handler; - this.triggerQueue = new LinkedBlockingQueue<>(); - this.triggerLogIdSet = Collections.synchronizedSet(new HashSet<>()); + this.triggerQueue = new LinkedBlockingQueue(); + this.triggerLogIdSet = Collections.synchronizedSet(new HashSet()); } public IJobHandler getHandler() { diff --git a/datax-executor/src/main/java/com/wugui/datax/executor/core/config/DataXConfig.java b/datax-executor/src/main/java/com/wugui/datax/executor/core/config/DataXConfig.java index 95228958..feb61953 100644 --- a/datax-executor/src/main/java/com/wugui/datax/executor/core/config/DataXConfig.java +++ b/datax-executor/src/main/java/com/wugui/datax/executor/core/config/DataXConfig.java @@ -70,7 +70,7 @@ public class DataXConfig { * spring-cloud-commons * ${version} * - *AE + * * 2、配置文件,或者容器启动变量 * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' * diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/XxlRegistryBaseClient.java b/datax-registry/src/main/java/com.wugui.datax.registry/XxlRegistryBaseClient.java index 0fee1661..f0157806 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/XxlRegistryBaseClient.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/XxlRegistryBaseClient.java @@ -33,13 +33,13 @@ public class XxlRegistryBaseClient { this.env = env; // valid - if (adminAddress == null || adminAddress.trim().length() == 0) { + if (adminAddress==null || adminAddress.trim().length()==0) { throw new RuntimeException("xxl-registry adminAddress empty"); } - if (biz == null || biz.trim().length() < 4 || biz.trim().length() > 255) { + if (biz==null || biz.trim().length()<4 || biz.trim().length()>255) { throw new RuntimeException("xxl-registry biz empty Invalid[4~255]"); } - if (env == null || env.trim().length() < 2 || env.trim().length() > 255) { + if (env==null || env.trim().length()<2 || env.trim().length()>255) { throw new RuntimeException("xxl-registry biz env Invalid[2~255]"); } @@ -59,17 +59,17 @@ public class XxlRegistryBaseClient { * @param registryDataList * @return */ - public boolean registry(List registryDataList) { + public boolean registry(List registryDataList){ // valid - if (registryDataList == null || registryDataList.size() == 0) { + if (registryDataList==null || registryDataList.size()==0) { throw new RuntimeException("xxl-registry registryDataList empty"); } - for (XxlRegistryDataParamVO registryParam : registryDataList) { - if (registryParam.getKey() == null || registryParam.getKey().trim().length() < 4 || registryParam.getKey().trim().length() > 255) { + for (XxlRegistryDataParamVO registryParam: registryDataList) { + if (registryParam.getKey()==null || registryParam.getKey().trim().length()<4 || registryParam.getKey().trim().length()>255) { throw new RuntimeException("xxl-registry registryDataList#key Invalid[4~255]"); } - if (registryParam.getValue() == null || registryParam.getValue().trim().length() < 4 || registryParam.getValue().trim().length() > 255) { + if (registryParam.getValue()==null || registryParam.getValue().trim().length()<4 || registryParam.getValue().trim().length()>255) { throw new RuntimeException("xxl-registry registryDataList#value Invalid[4~255]"); } } @@ -88,12 +88,12 @@ public class XxlRegistryBaseClient { // result Map respObj = requestAndValid(pathUrl, paramsJson, 5); - return respObj != null ? true : false; + return respObj!=null?true:false; } - private Map requestAndValid(String pathUrl, String requestBody, int timeout) { + private Map requestAndValid(String pathUrl, String requestBody, int timeout){ - for (String adminAddressUrl : adminAddressArr) { + for (String adminAddressUrl: adminAddressArr) { String finalUrl = adminAddressUrl + pathUrl; // request @@ -106,15 +106,14 @@ public class XxlRegistryBaseClient { Map resopnseMap = null; try { resopnseMap = BasicJson.parseMap(responseData); - } catch (Exception e) { - } + } catch (Exception e) { } // valid resopnse - if (resopnseMap == null + if (resopnseMap==null || !resopnseMap.containsKey("code") || !"200".equals(String.valueOf(resopnseMap.get("code"))) - ) { + ) { logger.warn("XxlRegistryBaseClient response fail, responseData={}", responseData); return null; } @@ -134,14 +133,14 @@ public class XxlRegistryBaseClient { */ public boolean remove(List registryDataList) { // valid - if (registryDataList == null || registryDataList.size() == 0) { + if (registryDataList==null || registryDataList.size()==0) { throw new RuntimeException("xxl-registry registryDataList empty"); } - for (XxlRegistryDataParamVO registryParam : registryDataList) { - if (registryParam.getKey() == null || registryParam.getKey().trim().length() < 4 || registryParam.getKey().trim().length() > 255) { + for (XxlRegistryDataParamVO registryParam: registryDataList) { + if (registryParam.getKey()==null || registryParam.getKey().trim().length()<4 || registryParam.getKey().trim().length()>255) { throw new RuntimeException("xxl-registry registryDataList#key Invalid[4~255]"); } - if (registryParam.getValue() == null || registryParam.getValue().trim().length() < 4 || registryParam.getValue().trim().length() > 255) { + if (registryParam.getValue()==null || registryParam.getValue().trim().length()<4 || registryParam.getValue().trim().length()>255) { throw new RuntimeException("xxl-registry registryDataList#value Invalid[4~255]"); } } @@ -160,7 +159,7 @@ public class XxlRegistryBaseClient { // result Map respObj = requestAndValid(pathUrl, paramsJson, 5); - return respObj != null ? true : false; + return respObj!=null?true:false; } /** @@ -171,7 +170,7 @@ public class XxlRegistryBaseClient { */ public Map> discovery(Set keys) { // valid - if (keys == null || keys.size() == 0) { + if (keys==null || keys.size()==0) { throw new RuntimeException("xxl-registry keys empty"); } @@ -191,7 +190,7 @@ public class XxlRegistryBaseClient { Map respObj = requestAndValid(pathUrl, paramsJson, 5); // parse - if (respObj != null && respObj.containsKey("data")) { + if (respObj!=null && respObj.containsKey("data")) { Map> data = (Map>) respObj.get("data"); return data; } @@ -207,7 +206,7 @@ public class XxlRegistryBaseClient { */ public boolean monitor(Set keys) { // valid - if (keys == null || keys.size() == 0) { + if (keys==null || keys.size()==0) { throw new RuntimeException("xxl-registry keys empty"); } @@ -225,7 +224,7 @@ public class XxlRegistryBaseClient { // result Map respObj = requestAndValid(pathUrl, paramsJson, 60); - return respObj != null ? true : false; + return respObj!=null?true:false; } } diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/model/XxlRegistryDataParamVO.java b/datax-registry/src/main/java/com.wugui.datax.registry/model/XxlRegistryDataParamVO.java index be3f543d..920a6695 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/model/XxlRegistryDataParamVO.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/model/XxlRegistryDataParamVO.java @@ -14,7 +14,6 @@ public class XxlRegistryDataParamVO { public XxlRegistryDataParamVO() { } - public XxlRegistryDataParamVO(String key, String value) { this.key = key; this.value = value; diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/util/BasicHttpUtil.java b/datax-registry/src/main/java/com.wugui.datax.registry/util/BasicHttpUtil.java index a0bd8975..d562b0ea 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/util/BasicHttpUtil.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/util/BasicHttpUtil.java @@ -51,10 +51,17 @@ public class BasicHttpUtil { dataOutputStream.flush(); dataOutputStream.close(); + /*byte[] requestBodyBytes = requestBody.getBytes("UTF-8"); + connection.setRequestProperty("Content-Length", String.valueOf(requestBodyBytes.length)); + OutputStream outwritestream = connection.getOutputStream(); + outwritestream.write(requestBodyBytes); + outwritestream.flush(); + outwritestream.close();*/ + // valid StatusCode int statusCode = connection.getResponseCode(); if (statusCode != 200) { - throw new RuntimeException("http request StatusCode(" + statusCode + ") invalid. for url : " + url); + throw new RuntimeException("http request StatusCode("+ statusCode +") invalid. for url : " + url); } // result @@ -116,7 +123,7 @@ public class BasicHttpUtil { // valid StatusCode int statusCode = connection.getResponseCode(); if (statusCode != 200) { - throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); + throw new RuntimeException("Http Request StatusCode("+ statusCode +") Invalid."); } // result diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJson.java b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJson.java index b9b78aca..e1a8bac9 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJson.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJson.java @@ -29,7 +29,7 @@ public class BasicJson { * parse json to map * * @param json - * @return only for filed type "null、ArrayList、LinkedHashMap、String、Long、Double、..." + * @return only for filed type "null、ArrayList、LinkedHashMap、String、Long、Double、..." */ public static Map parseMap(String json) { return basicJsonReader.parseMap(json); @@ -46,11 +46,12 @@ public class BasicJson { } + public static void main(String[] args) { Map result = new HashMap<>(); result.put("code", 200); result.put("msg", "success"); - result.put("arr", Arrays.asList("111", "222")); + result.put("arr", Arrays.asList("111","222")); result.put("float", 1.11f); result.put("temp", null); @@ -205,4 +206,6 @@ public class BasicJson { }*/ + + } diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonReader.java b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonReader.java index 1f467887..51b09ad9 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonReader.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonReader.java @@ -12,169 +12,173 @@ import java.util.Map; * @author xuxueli 2018-11-30 */ public class BasicJsonReader { - private static Logger logger = LoggerFactory.getLogger(BasicJsonwriter.class); + private static Logger logger = LoggerFactory.getLogger(BasicJsonwriter.class); - public Map parseMap(String json) { - if (json != null) { - json = json.trim(); - if (json.startsWith("{")) { - return parseMapInternal(json); - } - } - throw new IllegalArgumentException("Cannot parse JSON"); - } + public Map parseMap(String json) { + if (json != null) { + json = json.trim(); + if (json.startsWith("{")) { + return parseMapInternal(json); + } + } + throw new IllegalArgumentException("Cannot parse JSON"); + } - public List parseList(String json) { - if (json != null) { - json = json.trim(); - if (json.startsWith("[")) { - return parseListInternal(json); - } - } - throw new IllegalArgumentException("Cannot parse JSON"); - } + public List parseList(String json) { + if (json != null) { + json = json.trim(); + if (json.startsWith("[")) { + return parseListInternal(json); + } + } + throw new IllegalArgumentException("Cannot parse JSON"); + } - private List parseListInternal(String json) { - List list = new ArrayList(); - json = trimLeadingCharacter(trimTrailingCharacter(json, ']'), '['); - for (String value : tokenize(json)) { - list.add(parseInternal(value)); - } - return list; - } + private List parseListInternal(String json) { + List list = new ArrayList(); + json = trimLeadingCharacter(trimTrailingCharacter(json, ']'), '['); + for (String value : tokenize(json)) { + list.add(parseInternal(value)); + } + return list; + } - private Object parseInternal(String json) { - if (json.equals("null")) { - return null; - } - if (json.startsWith("[")) { - return parseListInternal(json); - } - if (json.startsWith("{")) { - return parseMapInternal(json); - } - if (json.startsWith("\"")) { - return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"'); - } - try { - return Long.valueOf(json); - } catch (NumberFormatException ex) { - // ignore - } - try { - return Double.valueOf(json); - } catch (NumberFormatException ex) { - // ignore - } - return json; - } + private Object parseInternal(String json) { + if (json.equals("null")) { + return null; + } + if (json.startsWith("[")) { + return parseListInternal(json); + } + if (json.startsWith("{")) { + return parseMapInternal(json); + } + if (json.startsWith("\"")) { + return trimTrailingCharacter(trimLeadingCharacter(json, '"'), '"'); + } + try { + return Long.valueOf(json); + } + catch (NumberFormatException ex) { + // ignore + } + try { + return Double.valueOf(json); + } + catch (NumberFormatException ex) { + // ignore + } + return json; + } - private Map parseMapInternal(String json) { - Map map = new LinkedHashMap(); - json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{'); - for (String pair : tokenize(json)) { - String[] values = trimArrayElements(split(pair, ":")); - String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"'); - Object value = parseInternal(values[1]); - map.put(key, value); - } - return map; - } + private Map parseMapInternal(String json) { + Map map = new LinkedHashMap(); + json = trimLeadingCharacter(trimTrailingCharacter(json, '}'), '{'); + for (String pair : tokenize(json)) { + String[] values = trimArrayElements(split(pair, ":")); + String key = trimLeadingCharacter(trimTrailingCharacter(values[0], '"'), '"'); + Object value = parseInternal(values[1]); + map.put(key, value); + } + return map; + } - // append start - private static String[] split(String toSplit, String delimiter) { - if (toSplit != null && !toSplit.isEmpty() && delimiter != null && !delimiter.isEmpty()) { - int offset = toSplit.indexOf(delimiter); - if (offset < 0) { - return null; - } else { - String beforeDelimiter = toSplit.substring(0, offset); - String afterDelimiter = toSplit.substring(offset + delimiter.length()); - return new String[]{beforeDelimiter, afterDelimiter}; - } - } else { - return null; - } - } + // append start + private static String[] split(String toSplit, String delimiter) { + if (toSplit!=null && !toSplit.isEmpty() && delimiter!=null && !delimiter.isEmpty()) { + int offset = toSplit.indexOf(delimiter); + if (offset < 0) { + return null; + } else { + String beforeDelimiter = toSplit.substring(0, offset); + String afterDelimiter = toSplit.substring(offset + delimiter.length()); + return new String[]{beforeDelimiter, afterDelimiter}; + } + } else { + return null; + } + } + private static String[] trimArrayElements(String[] array) { + if (array == null || array.length == 0) { + return new String[0]; + } else { + String[] result = new String[array.length]; - private static String[] trimArrayElements(String[] array) { - if (array == null || array.length == 0) { - return new String[0]; - } else { - String[] result = new String[array.length]; + for(int i = 0; i < array.length; ++i) { + String element = array[i]; + result[i] = element != null ? element.trim() : null; + } - for (int i = 0; i < array.length; ++i) { - String element = array[i]; - result[i] = element != null ? element.trim() : null; - } - - return result; - } - } + return result; + } + } + // append end - private List tokenize(String json) { - List list = new ArrayList<>(); - int index = 0; - int inObject = 0; - int inList = 0; - boolean inValue = false; - boolean inEscape = false; - StringBuilder build = new StringBuilder(); - while (index < json.length()) { - char current = json.charAt(index); - if (inEscape) { - build.append(current); - index++; - inEscape = false; - continue; - } - if (current == '{') { - inObject++; - } - if (current == '}') { - inObject--; - } - if (current == '[') { - inList++; - } - if (current == ']') { - inList--; - } - if (current == '"') { - inValue = !inValue; - } - if (current == ',' && inObject == 0 && inList == 0 && !inValue) { - list.add(build.toString()); - build.setLength(0); - } else if (current == '\\') { - inEscape = true; - } else { - build.append(current); - } - index++; - } - if (build.length() > 0) { - list.add(build.toString()); - } - return list; - } + private List tokenize(String json) { + List list = new ArrayList(); + int index = 0; + int inObject = 0; + int inList = 0; + boolean inValue = false; + boolean inEscape = false; + StringBuilder build = new StringBuilder(); + while (index < json.length()) { + char current = json.charAt(index); + if (inEscape) { + build.append(current); + index++; + inEscape = false; + continue; + } + if (current == '{') { + inObject++; + } + if (current == '}') { + inObject--; + } + if (current == '[') { + inList++; + } + if (current == ']') { + inList--; + } + if (current == '"') { + inValue = !inValue; + } + if (current == ',' && inObject == 0 && inList == 0 && !inValue) { + list.add(build.toString()); + build.setLength(0); + } + else if (current == '\\') { + inEscape = true; + } + else { + build.append(current); + } + index++; + } + if (build.length() > 0) { + list.add(build.toString()); + } + return list; + } - // plugin util - private static String trimTrailingCharacter(String string, char c) { - if (string.length() > 0 && string.charAt(string.length() - 1) == c) { - return string.substring(0, string.length() - 1); - } - return string; - } + // plugin util + private static String trimTrailingCharacter(String string, char c) { + if (string.length() > 0 && string.charAt(string.length() - 1) == c) { + return string.substring(0, string.length() - 1); + } + return string; + } - private static String trimLeadingCharacter(String string, char c) { - if (string.length() > 0 && string.charAt(0) == c) { - return string.substring(1); - } - return string; - } + private static String trimLeadingCharacter(String string, char c) { + if (string.length() > 0 && string.charAt(0) == c) { + return string.substring(1); + } + return string; + } } diff --git a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonwriter.java b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonwriter.java index 4145ed06..2f58e892 100644 --- a/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonwriter.java +++ b/datax-registry/src/main/java/com.wugui.datax.registry/util/json/BasicJsonwriter.java @@ -82,13 +82,13 @@ public class BasicJsonwriter { // string json.append(STR_SLASH).append(value.toString()).append(STR_SLASH); - } else if (value instanceof Boolean + } else if ( value instanceof Boolean || value instanceof Short || value instanceof Integer || value instanceof Long || value instanceof Float || value instanceof Double - ) { + ) { // number json.append(value); @@ -191,4 +191,5 @@ public class BasicJsonwriter { } + } \ No newline at end of file diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/registry/impl/LocalServiceRegistry.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/registry/impl/LocalServiceRegistry.java index 0da1343a..a4f4d264 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/registry/impl/LocalServiceRegistry.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/registry/impl/LocalServiceRegistry.java @@ -36,7 +36,7 @@ public class LocalServiceRegistry extends ServiceRegistry { @Override public boolean registry(Set keys, String value) { - if (keys == null || keys.size() == 0 || value == null || value.trim().length() == 0) { + if (keys==null || keys.size()==0 || value==null || value.trim().length()==0) { return false; } for (String key : keys) { @@ -52,7 +52,7 @@ public class LocalServiceRegistry extends ServiceRegistry { @Override public boolean remove(Set keys, String value) { - if (keys == null || keys.size() == 0 || value == null || value.trim().length() == 0) { + if (keys==null || keys.size()==0 || value==null || value.trim().length()==0) { return false; } for (String key : keys) { @@ -66,7 +66,7 @@ public class LocalServiceRegistry extends ServiceRegistry { @Override public Map> discovery(Set keys) { - if (keys == null || keys.size() == 0) { + if (keys==null || keys.size()==0) { return null; } Map> registryDataTmp = new HashMap>(); diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/call/XxlRpcInvokeFuture.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/call/XxlRpcInvokeFuture.java index 4373afee..ecf416c2 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/call/XxlRpcInvokeFuture.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/call/XxlRpcInvokeFuture.java @@ -20,13 +20,13 @@ public class XxlRpcInvokeFuture implements Future { public XxlRpcInvokeFuture(XxlRpcFutureResponse futureResponse) { this.futureResponse = futureResponse; } - - public void stop() { + public void stop(){ // remove-InvokerFuture futureResponse.removeInvokerFuture(); } + @Override public boolean cancel(boolean mayInterruptIfRunning) { return futureResponse.cancel(mayInterruptIfRunning); diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/impl/XxlRpcSpringInvokerFactory.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/impl/XxlRpcSpringInvokerFactory.java index 1f85f0e9..7debd03d 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/impl/XxlRpcSpringInvokerFactory.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/remoting/invoker/impl/XxlRpcSpringInvokerFactory.java @@ -26,7 +26,7 @@ import java.util.Set; * * @author xuxueli 2018-10-19 */ -public class XxlRpcSpringInvokerFactory extends InstantiationAwareBeanPostProcessorAdapter implements InitializingBean, DisposableBean, BeanFactoryAware { +public class XxlRpcSpringInvokerFactory extends InstantiationAwareBeanPostProcessorAdapter implements InitializingBean,DisposableBean, BeanFactoryAware { private Logger logger = LoggerFactory.getLogger(XxlRpcSpringInvokerFactory.class); // ---------------------- config ---------------------- diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/IpUtil.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/IpUtil.java index 254e6bc7..75c98325 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/IpUtil.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/IpUtil.java @@ -24,6 +24,7 @@ public class IpUtil { private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$"); + private static volatile InetAddress LOCAL_ADDRESS = null; // ---------------------- valid ---------------------- @@ -56,10 +57,11 @@ public class IpUtil { return false; } String name = address.getHostAddress(); - return (name != null + boolean result = (name != null && IP_PATTERN.matcher(name).matches() && !ANYHOST_VALUE.equals(name) && !LOCALHOST_VALUE.equals(name)); + return result; } @@ -123,7 +125,7 @@ public class IpUtil { InetAddress addressItem = toValidAddress(addresses.nextElement()); if (addressItem != null) { try { - if (addressItem.isReachable(100)) { + if(addressItem.isReachable(100)){ return addressItem; } } catch (IOException e) { @@ -166,7 +168,7 @@ public class IpUtil { * * @return String */ - public static String getIp() { + public static String getIp(){ return getLocalAddress().getHostAddress(); } @@ -176,19 +178,19 @@ public class IpUtil { * @param port * @return String */ - public static String getIpPort(int port) { + public static String getIpPort(int port){ String ip = getIp(); return getIpPort(ip, port); } - public static String getIpPort(String ip, int port) { - if (ip == null) { + public static String getIpPort(String ip, int port){ + if (ip==null) { return null; } return ip.concat(":").concat(String.valueOf(port)); } - public static Object[] parseIpPort(String address) { + public static Object[] parseIpPort(String address){ String[] array = address.split(":"); String host = array[0]; diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/NetUtil.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/NetUtil.java index d3a15dba..985ab986 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/NetUtil.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/NetUtil.java @@ -47,7 +47,7 @@ public class NetUtil { * @return */ public static boolean isPortUsed(int port) { - boolean used; + boolean used = false; ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(port); diff --git a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/XxlRpcException.java b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/XxlRpcException.java index 14feb011..add11525 100644 --- a/datax-rpc/src/main/java/com/wugui/datax/rpc/util/XxlRpcException.java +++ b/datax-rpc/src/main/java/com/wugui/datax/rpc/util/XxlRpcException.java @@ -4,7 +4,6 @@ package com.wugui.datax.rpc.util; * @author xuxueli 2018-10-20 23:00:40 */ public class XxlRpcException extends RuntimeException { - private static final long serialVersionUID = 42L; public XxlRpcException(String msg) { diff --git a/doc/db/2.1.2预留.sql b/doc/db/2.1.2预留.sql index 6d27f4c1..7abbe383 100644 --- a/doc/db/2.1.2预留.sql +++ b/doc/db/2.1.2预留.sql @@ -17,15 +17,18 @@ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; +-- ---------------------------- +-- Table structure for job_permission +-- ---------------------------- DROP TABLE IF EXISTS `job_permission`; CREATE TABLE `job_permission` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限名', - `description` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限描述', - `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限名', + `description` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限描述', + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `pid` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of job_permission @@ -39,9 +42,9 @@ INSERT INTO `job_permission` VALUES (2, 'ROLE_ADMIN', 'ABel', '/', NULL); DROP TABLE IF EXISTS `job_role`; CREATE TABLE `job_role` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '角色名称', + `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色名称', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of job_role @@ -55,10 +58,10 @@ INSERT INTO `job_role` VALUES (2, 'ROLE_USER'); DROP TABLE IF EXISTS `job_user`; CREATE TABLE `job_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户主键', - `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名', - `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码', + `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名', + `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of job_user @@ -76,7 +79,7 @@ CREATE TABLE `permission_role` ( `role_id` int(11) NULL DEFAULT NULL COMMENT '角色名称', `permission_id` int(20) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of permission_role @@ -94,7 +97,7 @@ CREATE TABLE `role_user` ( `user_id` int(20) NULL DEFAULT NULL COMMENT '角色名称', `role_id` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of role_user diff --git a/doc/db/datax_web.sql b/doc/db/datax_web.sql index 85262d88..3b36a5fe 100644 --- a/doc/db/datax_web.sql +++ b/doc/db/datax_web.sql @@ -342,9 +342,10 @@ ADD COLUMN `load_average` DOUBLE NULL AFTER `memory_usage`; DROP TABLE IF EXISTS `job_permission`; CREATE TABLE `job_permission` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', - `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '权限名', - `description` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '权限描述', - `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '权限名', + `description` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限描述', + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `pid` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; +