项目结构重构,提升可维护性与易读性;

3.2.0-release
xuxueli 4 weeks ago
parent 34a28a49a2
commit d99271c9d5

@ -2556,8 +2556,8 @@ public void execute() {
- 10、【优化】调度中心系统日志调整支持启动时指定 -DLOG_HOME 参数自定义日志位置;同时优化日志格式提升易读性; - 10、【优化】调度中心系统日志调整支持启动时指定 -DLOG_HOME 参数自定义日志位置;同时优化日志格式提升易读性;
- 11、【新增】GLUE模式(Python) 扩展,可选 "GLUE(Python3)" 或 "GLUE(Python2)" 两种模式,分别支持 python3/2 多版本; - 11、【新增】GLUE模式(Python) 扩展,可选 "GLUE(Python3)" 或 "GLUE(Python2)" 两种模式,分别支持 python3/2 多版本;
- 12、【优化】任务Bean扫描规则调整过滤冗余不必要扫描避免系统组件提前初始化 - 12、【优化】任务Bean扫描规则调整过滤冗余不必要扫描避免系统组件提前初始化
- - 13、【重构】项目结构重构提升可维护性与易读性
- 13、【ING】底层组件移除单例写法汇总factory统一管理
- 14、【ING】登录安全升级密码加密处理算法从Md5改为Sha256 - 14、【ING】登录安全升级密码加密处理算法从Md5改为Sha256
``` ```
// 1、用户表password字段需要调整长度执行如下命令 // 1、用户表password字段需要调整长度执行如下命令
@ -2570,6 +2570,9 @@ UPDATE xxl_conf_user t SET t.password = '8d969eef6ecad3c29a3a629280e686cf0c3f5d5
- 2、【规划中】登录认证重构规范登录态以及权限认证逻辑提升系统安全登陆态Token生成逻辑优化混淆登陆时间属性降低token泄漏风险 - 2、【规划中】登录认证重构规范登录态以及权限认证逻辑提升系统安全登陆态Token生成逻辑优化混淆登陆时间属性降低token泄漏风险
### 7.41 版本 v3.2.1 Release Notes[规划中]
- 1、【ING】底层组件移除单例写法汇总factory统一管理
### TODO LIST ### TODO LIST
- 1、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。 - 1、调度隔离调度中心针对不同执行器各自维护不同的调度和远程触发组件。

@ -1,4 +1,4 @@
package com.xxl.job.admin.controller.annotation; package com.xxl.job.admin.annotation;
import java.lang.annotation.ElementType; import java.lang.annotation.ElementType;

@ -1,6 +1,6 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller;
import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.annotation.PermissionLimit;
import com.xxl.job.admin.service.impl.LoginService; import com.xxl.job.admin.service.impl.LoginService;
import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.service.XxlJobService;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;

@ -1,7 +1,7 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.annotation.PermissionLimit;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.core.biz.AdminBiz; import com.xxl.job.core.biz.AdminBiz;
import com.xxl.job.core.biz.model.HandleCallbackParam; import com.xxl.job.core.biz.model.HandleCallbackParam;
import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.RegistryParam;

@ -1,105 +1,105 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.interceptor.PermissionInterceptor; import com.xxl.job.admin.web.interceptor.PermissionInterceptor;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.model.XxlJobLogGlue;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.mapper.XxlJobInfoDao;
import com.xxl.job.admin.dao.XxlJobLogGlueDao; import com.xxl.job.admin.mapper.XxlJobLogGlueDao;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.glue.GlueTypeEnum; import com.xxl.job.core.glue.GlueTypeEnum;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/** /**
* job code controller * job code controller
* @author xuxueli 2015-12-19 16:13:16 * @author xuxueli 2015-12-19 16:13:16
*/ */
@Controller @Controller
@RequestMapping("/jobcode") @RequestMapping("/jobcode")
public class JobCodeController { public class JobCodeController {
@Resource @Resource
private XxlJobInfoDao xxlJobInfoDao; private XxlJobInfoDao xxlJobInfoDao;
@Resource @Resource
private XxlJobLogGlueDao xxlJobLogGlueDao; private XxlJobLogGlueDao xxlJobLogGlueDao;
@RequestMapping @RequestMapping
public String index(HttpServletRequest request, Model model, @RequestParam("jobId") int jobId) { public String index(HttpServletRequest request, Model model, @RequestParam("jobId") int jobId) {
XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId); XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId); List<XxlJobLogGlue> jobLogGlues = xxlJobLogGlueDao.findByJobId(jobId);
if (jobInfo == null) { if (jobInfo == null) {
throw new RuntimeException(I18nUtil.getString("jobinfo_glue_jobid_unvalid")); throw new RuntimeException(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
} }
if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType())) { if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType())) {
throw new RuntimeException(I18nUtil.getString("jobinfo_glue_gluetype_unvalid")); throw new RuntimeException(I18nUtil.getString("jobinfo_glue_gluetype_unvalid"));
} }
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, jobInfo.getJobGroup()); PermissionInterceptor.validJobGroupPermission(request, jobInfo.getJobGroup());
// Glue类型-字典 // Glue类型-字典
model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());
model.addAttribute("jobInfo", jobInfo); model.addAttribute("jobInfo", jobInfo);
model.addAttribute("jobLogGlues", jobLogGlues); model.addAttribute("jobLogGlues", jobLogGlues);
return "jobcode/jobcode.index"; return "jobcode/jobcode.index";
} }
@RequestMapping("/save") @RequestMapping("/save")
@ResponseBody @ResponseBody
public ReturnT<String> save(HttpServletRequest request, public ReturnT<String> save(HttpServletRequest request,
@RequestParam("id") int id, @RequestParam("id") int id,
@RequestParam("glueSource") String glueSource, @RequestParam("glueSource") String glueSource,
@RequestParam("glueRemark") String glueRemark) { @RequestParam("glueRemark") String glueRemark) {
// valid // valid
if (glueRemark==null) { if (glueRemark==null) {
return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) ); return new ReturnT<String>(500, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_glue_remark")) );
} }
if (glueRemark.length()<4 || glueRemark.length()>100) { if (glueRemark.length()<4 || glueRemark.length()>100) {
return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_remark_limit")); return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_remark_limit"));
} }
XxlJobInfo existsJobInfo = xxlJobInfoDao.loadById(id); XxlJobInfo existsJobInfo = xxlJobInfoDao.loadById(id);
if (existsJobInfo == null) { if (existsJobInfo == null) {
return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid")); return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
} }
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, existsJobInfo.getJobGroup()); PermissionInterceptor.validJobGroupPermission(request, existsJobInfo.getJobGroup());
// update new code // update new code
existsJobInfo.setGlueSource(glueSource); existsJobInfo.setGlueSource(glueSource);
existsJobInfo.setGlueRemark(glueRemark); existsJobInfo.setGlueRemark(glueRemark);
existsJobInfo.setGlueUpdatetime(new Date()); existsJobInfo.setGlueUpdatetime(new Date());
existsJobInfo.setUpdateTime(new Date()); existsJobInfo.setUpdateTime(new Date());
xxlJobInfoDao.update(existsJobInfo); xxlJobInfoDao.update(existsJobInfo);
// log old code // log old code
XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue(); XxlJobLogGlue xxlJobLogGlue = new XxlJobLogGlue();
xxlJobLogGlue.setJobId(existsJobInfo.getId()); xxlJobLogGlue.setJobId(existsJobInfo.getId());
xxlJobLogGlue.setGlueType(existsJobInfo.getGlueType()); xxlJobLogGlue.setGlueType(existsJobInfo.getGlueType());
xxlJobLogGlue.setGlueSource(glueSource); xxlJobLogGlue.setGlueSource(glueSource);
xxlJobLogGlue.setGlueRemark(glueRemark); xxlJobLogGlue.setGlueRemark(glueRemark);
xxlJobLogGlue.setAddTime(new Date()); xxlJobLogGlue.setAddTime(new Date());
xxlJobLogGlue.setUpdateTime(new Date()); xxlJobLogGlue.setUpdateTime(new Date());
xxlJobLogGlueDao.save(xxlJobLogGlue); xxlJobLogGlueDao.save(xxlJobLogGlue);
// remove code backup more than 30 // remove code backup more than 30
xxlJobLogGlueDao.removeOld(existsJobInfo.getId(), 30); xxlJobLogGlueDao.removeOld(existsJobInfo.getId(), 30);
return ReturnT.ofSuccess(); return ReturnT.ofSuccess();
} }
} }

@ -1,12 +1,12 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.annotation.PermissionLimit;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.model.XxlJobRegistry;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobGroupDao; import com.xxl.job.admin.mapper.XxlJobGroupDao;
import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.mapper.XxlJobInfoDao;
import com.xxl.job.admin.dao.XxlJobRegistryDao; import com.xxl.job.admin.mapper.XxlJobRegistryDao;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.enums.RegistryConfig; import com.xxl.job.core.enums.RegistryConfig;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;

@ -1,16 +1,16 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.interceptor.PermissionInterceptor; import com.xxl.job.admin.web.interceptor.PermissionInterceptor;
import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.scheduler.exception.XxlJobException;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.scheduler.route.ExecutorRouteStrategyEnum;
import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum; import com.xxl.job.admin.scheduler.scheduler.MisfireStrategyEnum;
import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum; import com.xxl.job.admin.scheduler.scheduler.ScheduleTypeEnum;
import com.xxl.job.admin.core.thread.JobScheduleHelper; import com.xxl.job.admin.scheduler.thread.JobScheduleHelper;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobGroupDao; import com.xxl.job.admin.mapper.XxlJobGroupDao;
import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.service.XxlJobService;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;

@ -1,290 +1,290 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.interceptor.PermissionInterceptor; import com.xxl.job.admin.web.interceptor.PermissionInterceptor;
import com.xxl.job.admin.core.complete.XxlJobCompleter; import com.xxl.job.admin.scheduler.complete.XxlJobCompleter;
import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.scheduler.exception.XxlJobException;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobGroupDao; import com.xxl.job.admin.mapper.XxlJobGroupDao;
import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.mapper.XxlJobInfoDao;
import com.xxl.job.admin.dao.XxlJobLogDao; import com.xxl.job.admin.mapper.XxlJobLogDao;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.KillParam; import com.xxl.job.core.biz.model.KillParam;
import com.xxl.job.core.biz.model.LogParam; import com.xxl.job.core.biz.model.LogParam;
import com.xxl.job.core.biz.model.LogResult; import com.xxl.job.core.biz.model.LogResult;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.util.DateUtil; import com.xxl.job.core.util.DateUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.util.HtmlUtils; import org.springframework.web.util.HtmlUtils;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* index controller * index controller
* @author xuxueli 2015-12-19 16:13:16 * @author xuxueli 2015-12-19 16:13:16
*/ */
@Controller @Controller
@RequestMapping("/joblog") @RequestMapping("/joblog")
public class JobLogController { public class JobLogController {
private static Logger logger = LoggerFactory.getLogger(JobLogController.class); private static Logger logger = LoggerFactory.getLogger(JobLogController.class);
@Resource @Resource
private XxlJobGroupDao xxlJobGroupDao; private XxlJobGroupDao xxlJobGroupDao;
@Resource @Resource
public XxlJobInfoDao xxlJobInfoDao; public XxlJobInfoDao xxlJobInfoDao;
@Resource @Resource
public XxlJobLogDao xxlJobLogDao; public XxlJobLogDao xxlJobLogDao;
@RequestMapping @RequestMapping
public String index(HttpServletRequest request, Model model, @RequestParam(value = "jobId", required = false, defaultValue = "0") Integer jobId) { public String index(HttpServletRequest request, Model model, @RequestParam(value = "jobId", required = false, defaultValue = "0") Integer jobId) {
// 执行器列表 // 执行器列表
List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll(); List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll();
// filter group // filter group
List<XxlJobGroup> jobGroupList = PermissionInterceptor.filterJobGroupByRole(request, jobGroupList_all); List<XxlJobGroup> jobGroupList = PermissionInterceptor.filterJobGroupByRole(request, jobGroupList_all);
if (jobGroupList==null || jobGroupList.size()==0) { if (jobGroupList==null || jobGroupList.size()==0) {
throw new XxlJobException(I18nUtil.getString("jobgroup_empty")); throw new XxlJobException(I18nUtil.getString("jobgroup_empty"));
} }
model.addAttribute("JobGroupList", jobGroupList); model.addAttribute("JobGroupList", jobGroupList);
// 任务 // 任务
if (jobId > 0) { if (jobId > 0) {
XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId); XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
if (jobInfo == null) { if (jobInfo == null) {
throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid")); throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid"));
} }
model.addAttribute("jobInfo", jobInfo); model.addAttribute("jobInfo", jobInfo);
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, jobInfo.getJobGroup()); PermissionInterceptor.validJobGroupPermission(request, jobInfo.getJobGroup());
} }
return "joblog/joblog.index"; return "joblog/joblog.index";
} }
@RequestMapping("/getJobsByGroup") @RequestMapping("/getJobsByGroup")
@ResponseBody @ResponseBody
public ReturnT<List<XxlJobInfo>> getJobsByGroup(@RequestParam("jobGroup") int jobGroup){ public ReturnT<List<XxlJobInfo>> getJobsByGroup(@RequestParam("jobGroup") int jobGroup){
List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup); List<XxlJobInfo> list = xxlJobInfoDao.getJobsByGroup(jobGroup);
return ReturnT.ofSuccess(list); return ReturnT.ofSuccess(list);
} }
@RequestMapping("/pageList") @RequestMapping("/pageList")
@ResponseBody @ResponseBody
public Map<String, Object> pageList(HttpServletRequest request, public Map<String, Object> pageList(HttpServletRequest request,
@RequestParam(value = "start", required = false, defaultValue = "0") int start, @RequestParam(value = "start", required = false, defaultValue = "0") int start,
@RequestParam(value = "length", required = false, defaultValue = "10") int length, @RequestParam(value = "length", required = false, defaultValue = "10") int length,
@RequestParam("jobGroup") int jobGroup, @RequestParam("jobGroup") int jobGroup,
@RequestParam("jobId") int jobId, @RequestParam("jobId") int jobId,
@RequestParam("logStatus") int logStatus, @RequestParam("logStatus") int logStatus,
@RequestParam("filterTime") String filterTime) { @RequestParam("filterTime") String filterTime) {
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, jobGroup); // 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup PermissionInterceptor.validJobGroupPermission(request, jobGroup); // 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup
// parse param // parse param
Date triggerTimeStart = null; Date triggerTimeStart = null;
Date triggerTimeEnd = null; Date triggerTimeEnd = null;
if (filterTime!=null && filterTime.trim().length()>0) { if (filterTime!=null && filterTime.trim().length()>0) {
String[] temp = filterTime.split(" - "); String[] temp = filterTime.split(" - ");
if (temp.length == 2) { if (temp.length == 2) {
triggerTimeStart = DateUtil.parseDateTime(temp[0]); triggerTimeStart = DateUtil.parseDateTime(temp[0]);
triggerTimeEnd = DateUtil.parseDateTime(temp[1]); triggerTimeEnd = DateUtil.parseDateTime(temp[1]);
} }
} }
// page query // page query
List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus); int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
// package result // package result
Map<String, Object> maps = new HashMap<String, Object>(); Map<String, Object> maps = new HashMap<String, Object>();
maps.put("recordsTotal", list_count); // 总记录数 maps.put("recordsTotal", list_count); // 总记录数
maps.put("recordsFiltered", list_count); // 过滤后的总记录数 maps.put("recordsFiltered", list_count); // 过滤后的总记录数
maps.put("data", list); // 分页列表 maps.put("data", list); // 分页列表
return maps; return maps;
} }
@RequestMapping("/logDetailPage") @RequestMapping("/logDetailPage")
public String logDetailPage(HttpServletRequest request, @RequestParam("id") int id, Model model){ public String logDetailPage(HttpServletRequest request, @RequestParam("id") int id, Model model){
// base check // base check
XxlJobLog jobLog = xxlJobLogDao.load(id); XxlJobLog jobLog = xxlJobLogDao.load(id);
if (jobLog == null) { if (jobLog == null) {
throw new RuntimeException(I18nUtil.getString("joblog_logid_unvalid")); throw new RuntimeException(I18nUtil.getString("joblog_logid_unvalid"));
} }
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, jobLog.getJobGroup()); PermissionInterceptor.validJobGroupPermission(request, jobLog.getJobGroup());
// data // data
model.addAttribute("triggerCode", jobLog.getTriggerCode()); model.addAttribute("triggerCode", jobLog.getTriggerCode());
model.addAttribute("handleCode", jobLog.getHandleCode()); model.addAttribute("handleCode", jobLog.getHandleCode());
model.addAttribute("logId", jobLog.getId()); model.addAttribute("logId", jobLog.getId());
return "joblog/joblog.detail"; return "joblog/joblog.detail";
} }
@RequestMapping("/logDetailCat") @RequestMapping("/logDetailCat")
@ResponseBody @ResponseBody
public ReturnT<LogResult> logDetailCat(@RequestParam("logId") long logId, @RequestParam("fromLineNum") int fromLineNum){ public ReturnT<LogResult> logDetailCat(@RequestParam("logId") long logId, @RequestParam("fromLineNum") int fromLineNum){
try { try {
// valid // valid
XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve performance XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve performance
if (jobLog == null) { if (jobLog == null) {
return new ReturnT<LogResult>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid")); return new ReturnT<LogResult>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid"));
} }
// log cat // log cat
ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress()); ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress());
ReturnT<LogResult> logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum)); ReturnT<LogResult> logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
// is end // is end
if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) { if (logResult.getContent()!=null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
if (jobLog.getHandleCode() > 0) { if (jobLog.getHandleCode() > 0) {
logResult.getContent().setEnd(true); logResult.getContent().setEnd(true);
} }
} }
// fix xss // fix xss
if (logResult.getContent()!=null && StringUtils.hasText(logResult.getContent().getLogContent())) { if (logResult.getContent()!=null && StringUtils.hasText(logResult.getContent().getLogContent())) {
String newLogContent = filter(logResult.getContent().getLogContent()); String newLogContent = filter(logResult.getContent().getLogContent());
logResult.getContent().setLogContent(newLogContent); logResult.getContent().setLogContent(newLogContent);
} }
return logResult; return logResult;
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
return new ReturnT<LogResult>(ReturnT.FAIL_CODE, e.getMessage()); return new ReturnT<LogResult>(ReturnT.FAIL_CODE, e.getMessage());
} }
} }
/** /**
* filter xss tag * filter xss tag
* *
* @param originData * @param originData
* @return * @return
*/ */
private String filter(String originData){ private String filter(String originData){
// exclude tag // exclude tag
Map<String, String> excludeTagMap = new HashMap<String, String>(); Map<String, String> excludeTagMap = new HashMap<String, String>();
excludeTagMap.put("<br>", "###TAG_BR###"); excludeTagMap.put("<br>", "###TAG_BR###");
excludeTagMap.put("<b>", "###TAG_BOLD###"); excludeTagMap.put("<b>", "###TAG_BOLD###");
excludeTagMap.put("</b>", "###TAG_BOLD_END###"); excludeTagMap.put("</b>", "###TAG_BOLD_END###");
// replace // replace
for (String key : excludeTagMap.keySet()) { for (String key : excludeTagMap.keySet()) {
String value = excludeTagMap.get(key); String value = excludeTagMap.get(key);
originData = originData.replaceAll(key, value); originData = originData.replaceAll(key, value);
} }
// htmlEscape // htmlEscape
originData = HtmlUtils.htmlEscape(originData, "UTF-8"); originData = HtmlUtils.htmlEscape(originData, "UTF-8");
// replace back // replace back
for (String key : excludeTagMap.keySet()) { for (String key : excludeTagMap.keySet()) {
String value = excludeTagMap.get(key); String value = excludeTagMap.get(key);
originData = originData.replaceAll(value, key); originData = originData.replaceAll(value, key);
} }
return originData; return originData;
} }
@RequestMapping("/logKill") @RequestMapping("/logKill")
@ResponseBody @ResponseBody
public ReturnT<String> logKill(@RequestParam("id") int id){ public ReturnT<String> logKill(@RequestParam("id") int id){
// base check // base check
XxlJobLog log = xxlJobLogDao.load(id); XxlJobLog log = xxlJobLogDao.load(id);
XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId()); XxlJobInfo jobInfo = xxlJobInfoDao.loadById(log.getJobId());
if (jobInfo==null) { if (jobInfo==null) {
return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid")); return new ReturnT<String>(500, I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
} }
if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) { if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
return new ReturnT<String>(500, I18nUtil.getString("joblog_kill_log_limit")); return new ReturnT<String>(500, I18nUtil.getString("joblog_kill_log_limit"));
} }
// request of kill // request of kill
ReturnT<String> runResult = null; ReturnT<String> runResult = null;
try { try {
ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress()); ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress());
runResult = executorBiz.kill(new KillParam(jobInfo.getId())); runResult = executorBiz.kill(new KillParam(jobInfo.getId()));
} catch (Exception e) { } catch (Exception e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
runResult = new ReturnT<String>(500, e.getMessage()); runResult = new ReturnT<String>(500, e.getMessage());
} }
if (ReturnT.SUCCESS_CODE == runResult.getCode()) { if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
log.setHandleCode(ReturnT.FAIL_CODE); log.setHandleCode(ReturnT.FAIL_CODE);
log.setHandleMsg( I18nUtil.getString("joblog_kill_log_byman")+":" + (runResult.getMsg()!=null?runResult.getMsg():"")); log.setHandleMsg( I18nUtil.getString("joblog_kill_log_byman")+":" + (runResult.getMsg()!=null?runResult.getMsg():""));
log.setHandleTime(new Date()); log.setHandleTime(new Date());
XxlJobCompleter.updateHandleInfoAndFinish(log); XxlJobCompleter.updateHandleInfoAndFinish(log);
return ReturnT.ofSuccess(runResult.getMsg()); return ReturnT.ofSuccess(runResult.getMsg());
} else { } else {
return ReturnT.ofFail(runResult.getMsg()); return ReturnT.ofFail(runResult.getMsg());
} }
} }
@RequestMapping("/clearLog") @RequestMapping("/clearLog")
@ResponseBody @ResponseBody
public ReturnT<String> clearLog(HttpServletRequest request, public ReturnT<String> clearLog(HttpServletRequest request,
@RequestParam("jobGroup") int jobGroup, @RequestParam("jobGroup") int jobGroup,
@RequestParam("jobId") int jobId, @RequestParam("jobId") int jobId,
@RequestParam("type") int type){ @RequestParam("type") int type){
// valid permission // valid permission
PermissionInterceptor.validJobGroupPermission(request, jobGroup); PermissionInterceptor.validJobGroupPermission(request, jobGroup);
// opt // opt
Date clearBeforeTime = null; Date clearBeforeTime = null;
int clearBeforeNum = 0; int clearBeforeNum = 0;
if (type == 1) { if (type == 1) {
clearBeforeTime = DateUtil.addMonths(new Date(), -1); // 清理一个月之前日志数据 clearBeforeTime = DateUtil.addMonths(new Date(), -1); // 清理一个月之前日志数据
} else if (type == 2) { } else if (type == 2) {
clearBeforeTime = DateUtil.addMonths(new Date(), -3); // 清理三个月之前日志数据 clearBeforeTime = DateUtil.addMonths(new Date(), -3); // 清理三个月之前日志数据
} else if (type == 3) { } else if (type == 3) {
clearBeforeTime = DateUtil.addMonths(new Date(), -6); // 清理六个月之前日志数据 clearBeforeTime = DateUtil.addMonths(new Date(), -6); // 清理六个月之前日志数据
} else if (type == 4) { } else if (type == 4) {
clearBeforeTime = DateUtil.addYears(new Date(), -1); // 清理一年之前日志数据 clearBeforeTime = DateUtil.addYears(new Date(), -1); // 清理一年之前日志数据
} else if (type == 5) { } else if (type == 5) {
clearBeforeNum = 1000; // 清理一千条以前日志数据 clearBeforeNum = 1000; // 清理一千条以前日志数据
} else if (type == 6) { } else if (type == 6) {
clearBeforeNum = 10000; // 清理一万条以前日志数据 clearBeforeNum = 10000; // 清理一万条以前日志数据
} else if (type == 7) { } else if (type == 7) {
clearBeforeNum = 30000; // 清理三万条以前日志数据 clearBeforeNum = 30000; // 清理三万条以前日志数据
} else if (type == 8) { } else if (type == 8) {
clearBeforeNum = 100000; // 清理十万条以前日志数据 clearBeforeNum = 100000; // 清理十万条以前日志数据
} else if (type == 9) { } else if (type == 9) {
clearBeforeNum = 0; // 清理所有日志数据 clearBeforeNum = 0; // 清理所有日志数据
} else { } else {
return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid")); return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid"));
} }
List<Long> logIds = null; List<Long> logIds = null;
do { do {
logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime, clearBeforeNum, 1000); logIds = xxlJobLogDao.findClearLogIds(jobGroup, jobId, clearBeforeTime, clearBeforeNum, 1000);
if (logIds!=null && logIds.size()>0) { if (logIds!=null && logIds.size()>0) {
xxlJobLogDao.clearLog(logIds); xxlJobLogDao.clearLog(logIds);
} }
} while (logIds!=null && logIds.size()>0); } while (logIds!=null && logIds.size()>0);
return ReturnT.ofSuccess(); return ReturnT.ofSuccess();
} }
} }

@ -1,12 +1,12 @@
package com.xxl.job.admin.controller; package com.xxl.job.admin.controller.biz;
import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.annotation.PermissionLimit;
import com.xxl.job.admin.controller.interceptor.PermissionInterceptor; import com.xxl.job.admin.web.interceptor.PermissionInterceptor;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.XxlJobGroupDao; import com.xxl.job.admin.mapper.XxlJobGroupDao;
import com.xxl.job.admin.dao.XxlJobUserDao; import com.xxl.job.admin.mapper.XxlJobUserDao;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.model.XxlJobLogGlue;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobLogReport; import com.xxl.job.admin.model.XxlJobLogReport;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.model.XxlJobRegistry;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;

@ -1,6 +1,6 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.mapper;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.Date; import java.util.Date;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.Date; import java.util.Date;

@ -1,75 +1,75 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.Date; import java.util.Date;
/** /**
* xxl-job log for glue, used to track job code process * xxl-job log for glue, used to track job code process
* @author xuxueli 2016-5-19 17:57:46 * @author xuxueli 2016-5-19 17:57:46
*/ */
public class XxlJobLogGlue { public class XxlJobLogGlue {
private int id; private int id;
private int jobId; // 任务主键ID private int jobId; // 任务主键ID
private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum private String glueType; // GLUE类型 #com.xxl.job.core.glue.GlueTypeEnum
private String glueSource; private String glueSource;
private String glueRemark; private String glueRemark;
private Date addTime; private Date addTime;
private Date updateTime; private Date updateTime;
public int getId() { public int getId() {
return id; return id;
} }
public void setId(int id) { public void setId(int id) {
this.id = id; this.id = id;
} }
public int getJobId() { public int getJobId() {
return jobId; return jobId;
} }
public void setJobId(int jobId) { public void setJobId(int jobId) {
this.jobId = jobId; this.jobId = jobId;
} }
public String getGlueType() { public String getGlueType() {
return glueType; return glueType;
} }
public void setGlueType(String glueType) { public void setGlueType(String glueType) {
this.glueType = glueType; this.glueType = glueType;
} }
public String getGlueSource() { public String getGlueSource() {
return glueSource; return glueSource;
} }
public void setGlueSource(String glueSource) { public void setGlueSource(String glueSource) {
this.glueSource = glueSource; this.glueSource = glueSource;
} }
public String getGlueRemark() { public String getGlueRemark() {
return glueRemark; return glueRemark;
} }
public void setGlueRemark(String glueRemark) { public void setGlueRemark(String glueRemark) {
this.glueRemark = glueRemark; this.glueRemark = glueRemark;
} }
public Date getAddTime() { public Date getAddTime() {
return addTime; return addTime;
} }
public void setAddTime(Date addTime) { public void setAddTime(Date addTime) {
this.addTime = addTime; this.addTime = addTime;
} }
public Date getUpdateTime() { public Date getUpdateTime() {
return updateTime; return updateTime;
} }
public void setUpdateTime(Date updateTime) { public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime; this.updateTime = updateTime;
} }
} }

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.Date; import java.util.Date;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import java.util.Date; import java.util.Date;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.model; package com.xxl.job.admin.model;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;

@ -1,7 +1,7 @@
package com.xxl.job.admin.core.alarm; package com.xxl.job.admin.scheduler.alarm;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
/** /**
* @author xuxueli 2020-01-19 * @author xuxueli 2020-01-19

@ -1,7 +1,7 @@
package com.xxl.job.admin.core.alarm; package com.xxl.job.admin.scheduler.alarm;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;

@ -1,11 +1,11 @@
package com.xxl.job.admin.core.alarm.impl; package com.xxl.job.admin.scheduler.alarm.impl;
import com.xxl.job.admin.core.alarm.JobAlarm; import com.xxl.job.admin.scheduler.alarm.JobAlarm;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMessage;
import org.slf4j.Logger; import org.slf4j.Logger;

@ -1,11 +1,11 @@
package com.xxl.job.admin.core.complete; package com.xxl.job.admin.scheduler.complete;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; import com.xxl.job.admin.scheduler.thread.JobTriggerPoolHelper;
import com.xxl.job.admin.core.trigger.TriggerTypeEnum; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobContext; import com.xxl.job.core.context.XxlJobContext;
import org.slf4j.Logger; import org.slf4j.Logger;

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.conf; package com.xxl.job.admin.scheduler.conf;
import com.xxl.job.admin.core.alarm.JobAlarmer; import com.xxl.job.admin.scheduler.alarm.JobAlarmer;
import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler;
import com.xxl.job.admin.dao.*; import com.xxl.job.admin.mapper.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.cron; package com.xxl.job.admin.scheduler.cron;
import java.io.Serializable; import java.io.Serializable;
import java.text.ParseException; import java.text.ParseException;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.exception; package com.xxl.job.admin.scheduler.exception;
/** /**
* @author xuxueli 2019-05-04 23:19:29 * @author xuxueli 2019-05-04 23:19:29

@ -1,7 +1,7 @@
package com.xxl.job.admin.core.route; package com.xxl.job.admin.scheduler.route;
import com.xxl.job.admin.core.route.strategy.*; import com.xxl.job.admin.scheduler.route.strategy.*;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
/** /**
* Created by xuxueli on 17/3/10. * Created by xuxueli on 17/3/10.

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.route; package com.xxl.job.admin.scheduler.route;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.IdleBeatParam; import com.xxl.job.core.biz.model.IdleBeatParam;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.route.strategy; package com.xxl.job.admin.scheduler.route.strategy;
import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.scheduler.route.ExecutorRouter;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.scheduler; package com.xxl.job.admin.scheduler.scheduler;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
/** /**
* @author xuxueli 2020-10-29 21:11:23 * @author xuxueli 2020-10-29 21:11:23

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.scheduler; package com.xxl.job.admin.scheduler.scheduler;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
/** /**
* @author xuxueli 2020-10-29 21:11:23 * @author xuxueli 2020-10-29 21:11:23

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.scheduler; package com.xxl.job.admin.scheduler.scheduler;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.thread.*; import com.xxl.job.admin.scheduler.thread.*;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.client.ExecutorBizClient; import com.xxl.job.core.biz.client.ExecutorBizClient;
import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;

@ -1,9 +1,9 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.complete.XxlJobCompleter; import com.xxl.job.admin.scheduler.complete.XxlJobCompleter;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.model.HandleCallbackParam; import com.xxl.job.core.biz.model.HandleCallbackParam;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.util.DateUtil; import com.xxl.job.core.util.DateUtil;

@ -1,10 +1,10 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.trigger.TriggerTypeEnum; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,7 +1,7 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobLogReport; import com.xxl.job.admin.model.XxlJobLogReport;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.model.XxlJobRegistry;
import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.RegistryParam;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.enums.RegistryConfig; import com.xxl.job.core.enums.RegistryConfig;

@ -1,11 +1,11 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.cron.CronExpression; import com.xxl.job.admin.scheduler.cron.CronExpression;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum; import com.xxl.job.admin.scheduler.scheduler.MisfireStrategyEnum;
import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum; import com.xxl.job.admin.scheduler.scheduler.ScheduleTypeEnum;
import com.xxl.job.admin.core.trigger.TriggerTypeEnum; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,8 +1,8 @@
package com.xxl.job.admin.core.thread; package com.xxl.job.admin.scheduler.thread;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.trigger.TriggerTypeEnum; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.admin.scheduler.trigger.XxlJobTrigger;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.trigger; package com.xxl.job.admin.scheduler.trigger;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
/** /**
* trigger type enum * trigger type enum

@ -1,12 +1,12 @@
package com.xxl.job.admin.core.trigger; package com.xxl.job.admin.scheduler.trigger;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.scheduler.route.ExecutorRouteStrategyEnum;
import com.xxl.job.admin.core.scheduler.XxlJobScheduler; import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.ExecutorBiz;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.biz.model.TriggerParam;

@ -1,8 +1,8 @@
package com.xxl.job.admin.service; package com.xxl.job.admin.service;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import java.util.Date; import java.util.Date;

@ -1,7 +1,7 @@
package com.xxl.job.admin.service.impl; package com.xxl.job.admin.service.impl;
import com.xxl.job.admin.core.thread.JobCompleteHelper; import com.xxl.job.admin.scheduler.thread.JobCompleteHelper;
import com.xxl.job.admin.core.thread.JobRegistryHelper; import com.xxl.job.admin.scheduler.thread.JobRegistryHelper;
import com.xxl.job.core.biz.AdminBiz; import com.xxl.job.core.biz.AdminBiz;
import com.xxl.job.core.biz.model.HandleCallbackParam; import com.xxl.job.core.biz.model.HandleCallbackParam;
import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.RegistryParam;

@ -1,10 +1,10 @@
package com.xxl.job.admin.service.impl; package com.xxl.job.admin.service.impl;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.admin.core.util.CookieUtil; import com.xxl.job.admin.util.CookieUtil;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.core.util.JacksonUtil; import com.xxl.job.admin.util.JacksonUtil;
import com.xxl.job.admin.dao.XxlJobUserDao; import com.xxl.job.admin.mapper.XxlJobUserDao;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

@ -1,18 +1,18 @@
package com.xxl.job.admin.service.impl; package com.xxl.job.admin.service.impl;
import com.xxl.job.admin.core.cron.CronExpression; import com.xxl.job.admin.scheduler.cron.CronExpression;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.model.XxlJobLogReport; import com.xxl.job.admin.model.XxlJobLogReport;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; import com.xxl.job.admin.scheduler.route.ExecutorRouteStrategyEnum;
import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum; import com.xxl.job.admin.scheduler.scheduler.MisfireStrategyEnum;
import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum; import com.xxl.job.admin.scheduler.scheduler.ScheduleTypeEnum;
import com.xxl.job.admin.core.thread.JobScheduleHelper; import com.xxl.job.admin.scheduler.thread.JobScheduleHelper;
import com.xxl.job.admin.core.thread.JobTriggerPoolHelper; import com.xxl.job.admin.scheduler.thread.JobTriggerPoolHelper;
import com.xxl.job.admin.core.trigger.TriggerTypeEnum; import com.xxl.job.admin.scheduler.trigger.TriggerTypeEnum;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.dao.*; import com.xxl.job.admin.mapper.*;
import com.xxl.job.admin.service.XxlJobService; import com.xxl.job.admin.service.XxlJobService;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;

@ -1,98 +1,98 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.util;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
/** /**
* Cookie.Util * Cookie.Util
* *
* @author xuxueli 2015-12-12 18:01:06 * @author xuxueli 2015-12-12 18:01:06
*/ */
public class CookieUtil { public class CookieUtil {
// 默认缓存时间,单位/秒, 2H // 默认缓存时间,单位/秒, 2H
private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE; private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
// 保存路径,根路径 // 保存路径,根路径
private static final String COOKIE_PATH = "/"; private static final String COOKIE_PATH = "/";
/** /**
* *
* *
* @param response * @param response
* @param key * @param key
* @param value * @param value
* @param ifRemember * @param ifRemember
*/ */
public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) { public static void set(HttpServletResponse response, String key, String value, boolean ifRemember) {
int age = ifRemember?COOKIE_MAX_AGE:-1; int age = ifRemember?COOKIE_MAX_AGE:-1;
set(response, key, value, null, COOKIE_PATH, age, true); set(response, key, value, null, COOKIE_PATH, age, true);
} }
/** /**
* *
* *
* @param response * @param response
* @param key * @param key
* @param value * @param value
* @param maxAge * @param maxAge
*/ */
private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) { private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
Cookie cookie = new Cookie(key, value); Cookie cookie = new Cookie(key, value);
if (domain != null) { if (domain != null) {
cookie.setDomain(domain); cookie.setDomain(domain);
} }
cookie.setPath(path); cookie.setPath(path);
cookie.setMaxAge(maxAge); cookie.setMaxAge(maxAge);
cookie.setHttpOnly(isHttpOnly); cookie.setHttpOnly(isHttpOnly);
response.addCookie(cookie); response.addCookie(cookie);
} }
/** /**
* value * value
* *
* @param request * @param request
* @param key * @param key
* @return * @return
*/ */
public static String getValue(HttpServletRequest request, String key) { public static String getValue(HttpServletRequest request, String key) {
Cookie cookie = get(request, key); Cookie cookie = get(request, key);
if (cookie != null) { if (cookie != null) {
return cookie.getValue(); return cookie.getValue();
} }
return null; return null;
} }
/** /**
* Cookie * Cookie
* *
* @param request * @param request
* @param key * @param key
*/ */
private static Cookie get(HttpServletRequest request, String key) { private static Cookie get(HttpServletRequest request, String key) {
Cookie[] arr_cookie = request.getCookies(); Cookie[] arr_cookie = request.getCookies();
if (arr_cookie != null && arr_cookie.length > 0) { if (arr_cookie != null && arr_cookie.length > 0) {
for (Cookie cookie : arr_cookie) { for (Cookie cookie : arr_cookie) {
if (cookie.getName().equals(key)) { if (cookie.getName().equals(key)) {
return cookie; return cookie;
} }
} }
} }
return null; return null;
} }
/** /**
* Cookie * Cookie
* *
* @param request * @param request
* @param response * @param response
* @param key * @param key
*/ */
public static void remove(HttpServletRequest request, HttpServletResponse response, String key) { public static void remove(HttpServletRequest request, HttpServletResponse response, String key) {
Cookie cookie = get(request, key); Cookie cookie = get(request, key);
if (cookie != null) { if (cookie != null) {
set(response, key, "", null, COOKIE_PATH, 0, true); set(response, key, "", null, COOKIE_PATH, 0, true);
} }
} }
} }

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.util;
import freemarker.ext.beans.BeansWrapper; import freemarker.ext.beans.BeansWrapper;
import freemarker.ext.beans.BeansWrapperBuilder; import freemarker.ext.beans.BeansWrapperBuilder;

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.util;
import com.xxl.job.admin.core.conf.XxlJobAdminConfig; import com.xxl.job.admin.scheduler.conf.XxlJobAdminConfig;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.util;
import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParseException;

@ -1,4 +1,4 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.util;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentMap;

@ -1,42 +1,42 @@
package com.xxl.job.admin.controller.interceptor; package com.xxl.job.admin.web.interceptor;
import com.xxl.job.admin.core.util.FtlUtil; import com.xxl.job.admin.util.FtlUtil;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.AsyncHandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap; import java.util.HashMap;
/** /**
* push cookies to model as cookieMap * push cookies to model as cookieMap
* *
* @author xuxueli 2015-12-12 18:09:04 * @author xuxueli 2015-12-12 18:09:04
*/ */
@Component @Component
public class CookieInterceptor implements AsyncHandlerInterceptor { public class CookieInterceptor implements AsyncHandlerInterceptor {
@Override @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception { ModelAndView modelAndView) throws Exception {
// cookie // cookie
if (modelAndView!=null && request.getCookies()!=null && request.getCookies().length>0) { if (modelAndView!=null && request.getCookies()!=null && request.getCookies().length>0) {
HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>(); HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>();
for (Cookie ck : request.getCookies()) { for (Cookie ck : request.getCookies()) {
cookieMap.put(ck.getName(), ck); cookieMap.put(ck.getName(), ck);
} }
modelAndView.addObject("cookieMap", cookieMap); modelAndView.addObject("cookieMap", cookieMap);
} }
// static method // static method
if (modelAndView != null) { if (modelAndView != null) {
modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName())); modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName()));
} }
} }
} }

@ -1,131 +1,131 @@
package com.xxl.job.admin.controller.interceptor; package com.xxl.job.admin.web.interceptor;
import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.admin.annotation.PermissionLimit;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.core.model.XxlJobUser; import com.xxl.job.admin.model.XxlJobUser;
import com.xxl.job.admin.core.util.I18nUtil; import com.xxl.job.admin.util.I18nUtil;
import com.xxl.job.admin.service.impl.LoginService; import com.xxl.job.admin.service.impl.LoginService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod; import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.AsyncHandlerInterceptor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
* *
* *
* @author xuxueli 2015-12-12 18:09:04 * @author xuxueli 2015-12-12 18:09:04
*/ */
@Component @Component
public class PermissionInterceptor implements AsyncHandlerInterceptor { public class PermissionInterceptor implements AsyncHandlerInterceptor {
@Resource @Resource
private LoginService loginService; private LoginService loginService;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) { if (!(handler instanceof HandlerMethod)) {
return true; // proceed with the next interceptor return true; // proceed with the next interceptor
} }
// if need login // if need login
boolean needLogin = true; boolean needLogin = true;
boolean needAdminuser = false; boolean needAdminuser = false;
HandlerMethod method = (HandlerMethod)handler; HandlerMethod method = (HandlerMethod)handler;
PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class); PermissionLimit permission = method.getMethodAnnotation(PermissionLimit.class);
if (permission!=null) { if (permission!=null) {
needLogin = permission.limit(); needLogin = permission.limit();
needAdminuser = permission.adminuser(); needAdminuser = permission.adminuser();
} }
if (needLogin) { if (needLogin) {
XxlJobUser loginUser = loginService.ifLogin(request, response); XxlJobUser loginUser = loginService.ifLogin(request, response);
if (loginUser == null) { if (loginUser == null) {
response.setStatus(302); response.setStatus(302);
response.setHeader("location", request.getContextPath()+"/toLogin"); response.setHeader("location", request.getContextPath()+"/toLogin");
return false; return false;
} }
if (needAdminuser && loginUser.getRole()!=1) { if (needAdminuser && loginUser.getRole()!=1) {
throw new RuntimeException(I18nUtil.getString("system_permission_limit")); throw new RuntimeException(I18nUtil.getString("system_permission_limit"));
} }
// set loginUser, with request // set loginUser, with request
setLoginUser(request, loginUser); setLoginUser(request, loginUser);
} }
return true; // proceed with the next interceptor return true; // proceed with the next interceptor
} }
// -------------------- permission tool -------------------- // -------------------- permission tool --------------------
/** /**
* set loginUser * set loginUser
* *
* @param request * @param request
* @param loginUser * @param loginUser
*/ */
private static void setLoginUser(HttpServletRequest request, XxlJobUser loginUser){ private static void setLoginUser(HttpServletRequest request, XxlJobUser loginUser){
request.setAttribute("loginUser", loginUser); request.setAttribute("loginUser", loginUser);
} }
/** /**
* get loginUser * get loginUser
* *
* @param request * @param request
* @return * @return
*/ */
public static XxlJobUser getLoginUser(HttpServletRequest request){ public static XxlJobUser getLoginUser(HttpServletRequest request){
XxlJobUser loginUser = (XxlJobUser) request.getAttribute("loginUser"); // get loginUser, with request XxlJobUser loginUser = (XxlJobUser) request.getAttribute("loginUser"); // get loginUser, with request
return loginUser; return loginUser;
} }
/** /**
* valid permission by JobGroup * valid permission by JobGroup
* *
* @param request * @param request
* @param jobGroup * @param jobGroup
*/ */
public static void validJobGroupPermission(HttpServletRequest request, int jobGroup) { public static void validJobGroupPermission(HttpServletRequest request, int jobGroup) {
XxlJobUser loginUser = getLoginUser(request); XxlJobUser loginUser = getLoginUser(request);
if (!loginUser.validPermission(jobGroup)) { if (!loginUser.validPermission(jobGroup)) {
throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]"); throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username="+ loginUser.getUsername() +"]");
} }
} }
/** /**
* filter XxlJobGroup by role * filter XxlJobGroup by role
* *
* @param request * @param request
* @param jobGroupList_all * @param jobGroupList_all
* @return * @return
*/ */
public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){ public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all){
List<XxlJobGroup> jobGroupList = new ArrayList<>(); List<XxlJobGroup> jobGroupList = new ArrayList<>();
if (jobGroupList_all!=null && jobGroupList_all.size()>0) { if (jobGroupList_all!=null && jobGroupList_all.size()>0) {
XxlJobUser loginUser = PermissionInterceptor.getLoginUser(request); XxlJobUser loginUser = PermissionInterceptor.getLoginUser(request);
if (loginUser.getRole() == 1) { if (loginUser.getRole() == 1) {
jobGroupList = jobGroupList_all; jobGroupList = jobGroupList_all;
} else { } else {
List<String> groupIdStrs = new ArrayList<>(); List<String> groupIdStrs = new ArrayList<>();
if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) { if (loginUser.getPermission()!=null && loginUser.getPermission().trim().length()>0) {
groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(",")); groupIdStrs = Arrays.asList(loginUser.getPermission().trim().split(","));
} }
for (XxlJobGroup groupItem:jobGroupList_all) { for (XxlJobGroup groupItem:jobGroupList_all) {
if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) { if (groupIdStrs.contains(String.valueOf(groupItem.getId()))) {
jobGroupList.add(groupItem); jobGroupList.add(groupItem);
} }
} }
} }
} }
return jobGroupList; return jobGroupList;
} }
} }

@ -1,4 +1,4 @@
package com.xxl.job.admin.controller.interceptor; package com.xxl.job.admin.web.interceptor;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;

@ -1,4 +1,4 @@
package com.xxl.job.admin.controller.resolver; package com.xxl.job.admin.web.resolver;
import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.ErrorPage;
import org.springframework.boot.web.server.ErrorPageRegistrar; import org.springframework.boot.web.server.ErrorPageRegistrar;

@ -1,8 +1,8 @@
package com.xxl.job.admin.controller.resolver; package com.xxl.job.admin.web.resolver;
import com.xxl.job.admin.core.exception.XxlJobException; import com.xxl.job.admin.scheduler.exception.XxlJobException;
import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.admin.core.util.JacksonUtil; import com.xxl.job.admin.util.JacksonUtil;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.Logger;

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobGroupDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobGroupDao">
<resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" > <resultMap id="XxlJobGroup" type="com.xxl.job.admin.model.XxlJobGroup" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="app_name" property="appname" /> <result column="app_name" property="appname" />
<result column="title" property="title" /> <result column="title" property="title" />
@ -34,12 +34,12 @@
ORDER BY t.app_name, t.title, t.id ASC ORDER BY t.app_name, t.title, t.id ASC
</select> </select>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobGroup" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_group ( `app_name`, `title`, `address_type`, `address_list`, `update_time`) INSERT INTO xxl_job_group ( `app_name`, `title`, `address_type`, `address_list`, `update_time`)
values ( #{appname}, #{title}, #{addressType}, #{addressList}, #{updateTime} ); values ( #{appname}, #{title}, #{addressType}, #{addressList}, #{updateTime} );
</insert> </insert>
<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" > <update id="update" parameterType="com.xxl.job.admin.model.XxlJobGroup" >
UPDATE xxl_job_group UPDATE xxl_job_group
SET `app_name` = #{appname}, SET `app_name` = #{appname},
`title` = #{title}, `title` = #{title},

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobInfoDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobInfoDao">
<resultMap id="XxlJobInfo" type="com.xxl.job.admin.core.model.XxlJobInfo" > <resultMap id="XxlJobInfo" type="com.xxl.job.admin.model.XxlJobInfo" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="job_group" property="jobGroup" /> <result column="job_group" property="jobGroup" />
@ -111,7 +111,7 @@
</trim> </trim>
</select> </select>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobInfo" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_info ( INSERT INTO xxl_job_info (
job_group, job_group,
job_desc, job_desc,
@ -173,7 +173,7 @@
WHERE t.id = #{id} WHERE t.id = #{id}
</select> </select>
<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" > <update id="update" parameterType="com.xxl.job.admin.model.XxlJobInfo" >
UPDATE xxl_job_info UPDATE xxl_job_info
SET SET
job_group = #{jobGroup}, job_group = #{jobGroup},
@ -228,7 +228,7 @@
LIMIT #{pagesize} LIMIT #{pagesize}
</select> </select>
<update id="scheduleUpdate" parameterType="com.xxl.job.admin.core.model.XxlJobInfo" > <update id="scheduleUpdate" parameterType="com.xxl.job.admin.model.XxlJobInfo" >
UPDATE xxl_job_info UPDATE xxl_job_info
SET SET
trigger_last_time = #{triggerLastTime}, trigger_last_time = #{triggerLastTime},

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobLogGlueDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobLogGlueDao">
<resultMap id="XxlJobLogGlue" type="com.xxl.job.admin.core.model.XxlJobLogGlue" > <resultMap id="XxlJobLogGlue" type="com.xxl.job.admin.model.XxlJobLogGlue" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="job_id" property="jobId" /> <result column="job_id" property="jobId" />
<result column="glue_type" property="glueType" /> <result column="glue_type" property="glueType" />
@ -23,7 +23,7 @@
t.update_time t.update_time
</sql> </sql>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobLogGlue" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_logglue ( INSERT INTO xxl_job_logglue (
`job_id`, `job_id`,
`glue_type`, `glue_type`,

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobLogDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobLogDao">
<resultMap id="XxlJobLog" type="com.xxl.job.admin.core.model.XxlJobLog" > <resultMap id="XxlJobLog" type="com.xxl.job.admin.model.XxlJobLog" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="job_group" property="jobGroup" /> <result column="job_group" property="jobGroup" />
@ -117,7 +117,7 @@
</select> </select>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobLog" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_log ( INSERT INTO xxl_job_log (
`job_group`, `job_group`,
`job_id`, `job_id`,

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobLogReportDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobLogReportDao">
<resultMap id="XxlJobLogReport" type="com.xxl.job.admin.core.model.XxlJobLogReport" > <resultMap id="XxlJobLogReport" type="com.xxl.job.admin.model.XxlJobLogReport" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="trigger_day" property="triggerDay" /> <result column="trigger_day" property="triggerDay" />
<result column="running_count" property="runningCount" /> <result column="running_count" property="runningCount" />
@ -19,7 +19,7 @@
t.fail_count t.fail_count
</sql> </sql>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobLogReport" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_log_report ( INSERT INTO xxl_job_log_report (
`trigger_day`, `trigger_day`,
`running_count`, `running_count`,

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobRegistryDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobRegistryDao">
<resultMap id="XxlJobRegistry" type="com.xxl.job.admin.core.model.XxlJobRegistry" > <resultMap id="XxlJobRegistry" type="com.xxl.job.admin.model.XxlJobRegistry" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="registry_group" property="registryGroup" /> <result column="registry_group" property="registryGroup" />
<result column="registry_key" property="registryKey" /> <result column="registry_key" property="registryKey" />

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxl.job.admin.dao.XxlJobUserDao"> <mapper namespace="com.xxl.job.admin.mapper.XxlJobUserDao">
<resultMap id="XxlJobUser" type="com.xxl.job.admin.core.model.XxlJobUser" > <resultMap id="XxlJobUser" type="com.xxl.job.admin.model.XxlJobUser" >
<result column="id" property="id" /> <result column="id" property="id" />
<result column="username" property="username" /> <result column="username" property="username" />
<result column="password" property="password" /> <result column="password" property="password" />
@ -53,7 +53,7 @@
WHERE t.username = #{username} WHERE t.username = #{username}
</select> </select>
<insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobUser" useGeneratedKeys="true" keyProperty="id" > <insert id="save" parameterType="com.xxl.job.admin.model.XxlJobUser" useGeneratedKeys="true" keyProperty="id" >
INSERT INTO xxl_job_user ( INSERT INTO xxl_job_user (
username, username,
password, password,
@ -67,7 +67,7 @@
); );
</insert> </insert>
<update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobUser" > <update id="update" parameterType="com.xxl.job.admin.model.XxlJobUser" >
UPDATE xxl_job_user UPDATE xxl_job_user
SET SET
<if test="password != null and password != ''"> <if test="password != null and password != ''">

@ -1,6 +1,6 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.core.util;
import com.xxl.job.admin.core.cron.CronExpression; import com.xxl.job.admin.scheduler.cron.CronExpression;
import com.xxl.job.core.util.DateUtil; import com.xxl.job.core.util.DateUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

@ -1,11 +1,12 @@
package com.xxl.job.admin.core.util; package com.xxl.job.admin.core.util;
import com.xxl.job.admin.util.JacksonUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static com.xxl.job.admin.core.util.JacksonUtil.writeValueAsString; import static com.xxl.job.admin.util.JacksonUtil.writeValueAsString;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class JacksonUtilTest { public class JacksonUtilTest {

@ -1,6 +1,7 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobGroup;
import com.xxl.job.admin.mapper.XxlJobGroupDao;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;

@ -1,8 +1,9 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.admin.core.scheduler.MisfireStrategyEnum; import com.xxl.job.admin.scheduler.scheduler.MisfireStrategyEnum;
import com.xxl.job.admin.core.scheduler.ScheduleTypeEnum; import com.xxl.job.admin.scheduler.scheduler.ScheduleTypeEnum;
import com.xxl.job.admin.mapper.XxlJobInfoDao;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.slf4j.Logger; import org.slf4j.Logger;

@ -1,6 +1,7 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.model.XxlJobLog;
import com.xxl.job.admin.mapper.XxlJobLogDao;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;

@ -1,6 +1,7 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobLogGlue; import com.xxl.job.admin.model.XxlJobLogGlue;
import com.xxl.job.admin.mapper.XxlJobLogGlueDao;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;

@ -1,6 +1,7 @@
package com.xxl.job.admin.dao; package com.xxl.job.admin.dao;
import com.xxl.job.admin.core.model.XxlJobRegistry; import com.xxl.job.admin.model.XxlJobRegistry;
import com.xxl.job.admin.mapper.XxlJobRegistryDao;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;

@ -1,6 +1,5 @@
package com.xxl.job.admin.util; package com.xxl.job.admin.util;
import com.xxl.job.admin.core.util.I18nUtil;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

Loading…
Cancel
Save