提交 354f6483 authored 作者: xueli.xue's avatar xueli.xue

任务组,改为使用执行器ID

上级 9c05c3a9
...@@ -204,12 +204,13 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_REGISTRY ( ...@@ -204,12 +204,13 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_REGISTRY (
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE XXL_JOB_QRTZ_TRIGGER_GROUP ( CREATE TABLE XXL_JOB_QRTZ_TRIGGER_GROUP (
`id` int(11) NOT NULL AUTO_INCREMENT,
`app_name` varchar(64) NOT NULL, `app_name` varchar(64) NOT NULL,
`title` varchar(12) NOT NULL, `title` varchar(12) NOT NULL,
`order` tinyint(4) NOT NULL, `order` tinyint(4) NOT NULL,
PRIMARY KEY (`app_name`) PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP VALUES ('xxl-job-executor-example', '示例项目', '1'); INSERT INTO `XXL_JOB_QRTZ_TRIGGER_GROUP` VALUES ('1', 'xxl-job-executor-example', '示例执行器', '1');
commit; commit;
...@@ -60,12 +60,6 @@ public class JobGroupController { ...@@ -60,12 +60,6 @@ public class JobGroupController {
return new ReturnT<String>(500, "请输入名称"); return new ReturnT<String>(500, "请输入名称");
} }
// check repeat
XxlJobGroup group = xxlJobGroupDao.load(xxlJobGroup.getAppName());
if (group!=null) {
return new ReturnT<String>(500, "AppName对应的执行器已存在, 请勿重复添加");
}
int ret = xxlJobGroupDao.save(xxlJobGroup); int ret = xxlJobGroupDao.save(xxlJobGroup);
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL; return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
} }
...@@ -90,10 +84,10 @@ public class JobGroupController { ...@@ -90,10 +84,10 @@ public class JobGroupController {
@RequestMapping("/remove") @RequestMapping("/remove")
@ResponseBody @ResponseBody
public ReturnT<String> remove(String appName){ public ReturnT<String> remove(int id){
// valid // valid
int count = xxlJobInfoDao.pageListCount(0, 10, appName, null); int count = xxlJobInfoDao.pageListCount(0, 10, String.valueOf(id), null);
if (count > 0) { if (count > 0) {
return new ReturnT<String>(500, "该分组使用中, 不可删除"); return new ReturnT<String>(500, "该分组使用中, 不可删除");
} }
...@@ -103,7 +97,7 @@ public class JobGroupController { ...@@ -103,7 +97,7 @@ public class JobGroupController {
return new ReturnT<String>(500, "删除失败, 系统需要至少预留一个默认分组"); return new ReturnT<String>(500, "删除失败, 系统需要至少预留一个默认分组");
} }
int ret = xxlJobGroupDao.remove(appName); int ret = xxlJobGroupDao.remove(id);
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL; return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
} }
......
...@@ -48,7 +48,7 @@ public class JobInfoController { ...@@ -48,7 +48,7 @@ public class JobInfoController {
@RequestMapping("/add") @RequestMapping("/add")
@ResponseBody @ResponseBody
public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> add(int jobGroup, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, String executorAppname, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String glueSource, String glueRemark, String childJobKey) { int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
...@@ -59,7 +59,7 @@ public class JobInfoController { ...@@ -59,7 +59,7 @@ public class JobInfoController {
@RequestMapping("/reschedule") @RequestMapping("/reschedule")
@ResponseBody @ResponseBody
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAppname, String executorAddress, String executorHandler, String executorParam, String executorAppname, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String childJobKey) { int glueSwitch, String childJobKey) {
......
...@@ -45,6 +45,7 @@ public class JobLogController { ...@@ -45,6 +45,7 @@ public class JobLogController {
public String index(Model model, String jobGroup, String jobName) { public String index(Model model, String jobGroup, String jobName) {
// 任务组 // 任务组
List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll(); List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll();
model.addAttribute("jobGroup", jobGroup); model.addAttribute("jobGroup", jobGroup);
......
...@@ -73,7 +73,7 @@ public class RemoteHttpJobBean extends QuartzJobBean { ...@@ -73,7 +73,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
addressList.addAll(addressArr); addressList.addAll(addressArr);
parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList); parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList);
} else { } else {
XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(jobInfo.getJobGroup()); XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(Integer.valueOf(jobInfo.getJobGroup()));
if (group!=null) { if (group!=null) {
addressList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName()); addressList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName());
} }
......
...@@ -7,6 +7,7 @@ import java.util.List; ...@@ -7,6 +7,7 @@ import java.util.List;
*/ */
public class XxlJobGroup { public class XxlJobGroup {
private int id;
private String appName; private String appName;
private String title; private String title;
private int order; private int order;
...@@ -14,6 +15,14 @@ public class XxlJobGroup { ...@@ -14,6 +15,14 @@ public class XxlJobGroup {
// registry list // registry list
private List<String> registryList; private List<String> registryList;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAppName() { public String getAppName() {
return appName; return appName;
} }
......
...@@ -59,7 +59,7 @@ public class JobMonitorHelper { ...@@ -59,7 +59,7 @@ public class JobMonitorHelper {
Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(","))); Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
for (String email: emailSet) { for (String email: emailSet) {
String title = "《调度监控报警-任务调度中心XXL-JOB》"; String title = "《调度监控报警-任务调度中心XXL-JOB》";
XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(info.getJobGroup()); XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
String content = MessageFormat.format("任务调度失败, 执行器名称:{0}, 任务描述:{1}.", group!=null?group.getTitle():"null", info.getJobDesc()); String content = MessageFormat.format("任务调度失败, 执行器名称:{0}, 任务描述:{1}.", group!=null?group.getTitle():"null", info.getJobDesc());
MailUtil.sendMail(email, title, content, false, null); MailUtil.sendMail(email, title, content, false, null);
} }
......
...@@ -15,7 +15,7 @@ public interface IXxlJobGroupDao { ...@@ -15,7 +15,7 @@ public interface IXxlJobGroupDao {
public int update(XxlJobGroup xxlJobGroup); public int update(XxlJobGroup xxlJobGroup);
public int remove(String appName); public int remove(int id);
public XxlJobGroup load(String appName); public XxlJobGroup load(int id);
} }
...@@ -33,13 +33,13 @@ public class XxlJobGroupDaoImpl implements IXxlJobGroupDao { ...@@ -33,13 +33,13 @@ public class XxlJobGroupDaoImpl implements IXxlJobGroupDao {
} }
@Override @Override
public int remove(String appName) { public int remove(int id) {
return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", appName); return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", id);
} }
@Override @Override
public XxlJobGroup load(String appName) { public XxlJobGroup load(int id) {
return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", appName); return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", id);
} }
......
...@@ -13,11 +13,11 @@ public interface IXxlJobService { ...@@ -13,11 +13,11 @@ public interface IXxlJobService {
public Map<String, Object> pageList(int start, int length, String jobGroup, String executorHandler, String filterTime); public Map<String, Object> pageList(int start, int length, String jobGroup, String executorHandler, String filterTime);
public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail, public ReturnT<String> add(int jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
String executorAddress, String executorHandler, String executorParam, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String glueSource, String glueRemark, String childJobKey); int glueSwitch, String glueSource, String glueRemark, String childJobKey);
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey); String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey);
public ReturnT<String> remove(String jobGroup, String jobName); public ReturnT<String> remove(String jobGroup, String jobName);
......
...@@ -64,7 +64,7 @@ public class XxlJobServiceImpl implements IXxlJobService { ...@@ -64,7 +64,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
} }
@Override @Override
public ReturnT<String> add(String jobGroup, String jobCron, String jobDesc,String author, String alarmEmail, public ReturnT<String> add(int jobGroup, String jobCron, String jobDesc,String author, String alarmEmail,
String executorAddress, String executorHandler, String executorParam, String executorAddress, String executorHandler, String executorParam,
int glueSwitch, String glueSource, String glueRemark, String childJobKey) { int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
// valid // valid
...@@ -106,7 +106,7 @@ public class XxlJobServiceImpl implements IXxlJobService { ...@@ -106,7 +106,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
// generate jobName // generate jobName
String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date()); String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
try { try {
if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) { if (DynamicSchedulerUtil.checkExists(jobName, String.valueOf(jobGroup))) {
return new ReturnT<String>(500, "系统繁忙,请稍后重试"); return new ReturnT<String>(500, "系统繁忙,请稍后重试");
} }
} catch (SchedulerException e1) { } catch (SchedulerException e1) {
...@@ -116,7 +116,7 @@ public class XxlJobServiceImpl implements IXxlJobService { ...@@ -116,7 +116,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
// Backup to the database // Backup to the database
XxlJobInfo jobInfo = new XxlJobInfo(); XxlJobInfo jobInfo = new XxlJobInfo();
jobInfo.setJobGroup(jobGroup); jobInfo.setJobGroup(String.valueOf(jobGroup));
jobInfo.setJobName(jobName); jobInfo.setJobName(jobName);
jobInfo.setJobCron(jobCron); jobInfo.setJobCron(jobCron);
jobInfo.setJobDesc(jobDesc); jobInfo.setJobDesc(jobDesc);
...@@ -146,7 +146,7 @@ public class XxlJobServiceImpl implements IXxlJobService { ...@@ -146,7 +146,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
} }
@Override @Override
public ReturnT<String> reschedule(String jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail, public ReturnT<String> reschedule(int jobGroup, String jobName, String jobCron, String jobDesc, String author, String alarmEmail,
String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) { String executorAddress, String executorHandler, String executorParam, int glueSwitch, String childJobKey) {
// valid // valid
...@@ -189,7 +189,7 @@ public class XxlJobServiceImpl implements IXxlJobService { ...@@ -189,7 +189,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
} }
// stage job info // stage job info
XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName); XxlJobInfo jobInfo = xxlJobInfoDao.load(String.valueOf(jobGroup), jobName);
jobInfo.setJobCron(jobCron); jobInfo.setJobCron(jobCron);
jobInfo.setJobDesc(jobDesc); jobInfo.setJobDesc(jobDesc);
jobInfo.setAuthor(author); jobInfo.setAuthor(author);
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
<mapper namespace="XxlJobGroupMapper"> <mapper namespace="XxlJobGroupMapper">
<resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" > <resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" >
<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" />
<result column="order" property="order" /> <result column="order" property="order" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
t.id,
t.app_name, t.app_name,
t.title, t.title,
t.order t.order
...@@ -21,27 +23,28 @@ ...@@ -21,27 +23,28 @@
ORDER BY t.order ASC ORDER BY t.order ASC
</select> </select>
<insert id="save" parameterType="java.util.Map" > <insert id="save" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" >
INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `app_name`, `title`, `order`) INSERT INTO XXL_JOB_QRTZ_TRIGGER_GROUP ( `app_name`, `title`, `order`)
values ( #{appName}, #{title}, #{order}); values ( #{appName}, #{title}, #{order});
</insert> </insert>
<update id="update" parameterType="java.util.Map" > <update id="update" parameterType="com.xxl.job.admin.core.model.XxlJobGroup" >
UPDATE XXL_JOB_QRTZ_TRIGGER_GROUP UPDATE XXL_JOB_QRTZ_TRIGGER_GROUP
SET `title` = #{title}, SET `app_name` = #{appName},
`title` = #{title},
`order` = #{order} `order` = #{order}
WHERE app_name = #{appName} WHERE id = #{id}
</update> </update>
<delete id="remove" parameterType="java.lang.String" > <delete id="remove" parameterType="java.lang.Integer" >
DELETE FROM XXL_JOB_QRTZ_TRIGGER_GROUP DELETE FROM XXL_JOB_QRTZ_TRIGGER_GROUP
WHERE app_name = #{appName} WHERE id = #{id}
</delete> </delete>
<select id="load" parameterType="java.lang.String" resultMap="XxlJobGroup"> <select id="load" parameterType="java.lang.Integer" resultMap="XxlJobGroup">
SELECT <include refid="Base_Column_List" /> SELECT <include refid="Base_Column_List" />
FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t
WHERE t.app_name = #{appName} WHERE t.id = #{id}
</select> </select>
</mapper> </mapper>
\ No newline at end of file
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
<table id="joblog_list" class="table table-bordered table-striped display" width="100%" > <table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
<thead> <thead>
<tr> <tr>
<th name="id" >ID</th>
<th name="appName" >AppName</th> <th name="appName" >AppName</th>
<th name="title" >名称</th> <th name="title" >名称</th>
<th name="order" >排序</th> <th name="order" >排序</th>
...@@ -48,13 +49,14 @@ ...@@ -48,13 +49,14 @@
<#if list?exists && list?size gt 0> <#if list?exists && list?size gt 0>
<#list list as group> <#list list as group>
<tr> <tr>
<td>${group.id}</td>
<td>${group.appName}</td> <td>${group.appName}</td>
<td>${group.title}</td> <td>${group.title}</td>
<td>${group.order}</td> <td>${group.order}</td>
<td><#if group.registryList?exists><#list group.registryList as item><span class="badge bg-green">${item}</span><br></#list></#if></td> <td><#if group.registryList?exists><#list group.registryList as item><span class="badge bg-green">${item}</span><br></#list></#if></td>
<td> <td>
<button class="btn btn-warning btn-xs update" appName="${group.appName}" title="${group.title}" order="${group.order}" >编辑</button> <button class="btn btn-warning btn-xs update" id="${group.id}" appName="${group.appName}" title="${group.title}" order="${group.order}" >编辑</button>
<button class="btn btn-danger btn-xs remove" appName="${group.appName}" >删除</button> <button class="btn btn-danger btn-xs remove" id="${group.id}" >删除</button>
</td> </td>
</tr> </tr>
</#list> </#list>
...@@ -113,7 +115,7 @@ ...@@ -113,7 +115,7 @@
<form class="form-horizontal form" role="form" > <form class="form-horizontal form" role="form" >
<div class="form-group"> <div class="form-group">
<label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label> <label for="lastname" class="col-sm-2 control-label">AppName<font color="red">*</font></label>
<div class="col-sm-10"><input type="text" class="form-control" name="appName" placeholder="请输入“AppName”" maxlength="64" readonly ></div> <div class="col-sm-10"><input type="text" class="form-control" name="appName" placeholder="请输入“AppName”" maxlength="64" ></div>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label> <label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
...@@ -128,6 +130,7 @@ ...@@ -128,6 +130,7 @@
<div class="col-sm-offset-3 col-sm-6"> <div class="col-sm-offset-3 col-sm-6">
<button type="submit" class="btn btn-primary" >保存</button> <button type="submit" class="btn btn-primary" >保存</button>
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<input type="hidden" name="id" >
</div> </div>
</div> </div>
</form> </form>
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
<span class="input-group-addon">执行器</span> <span class="input-group-addon">执行器</span>
<select class="form-control" id="jobGroup" > <select class="form-control" id="jobGroup" >
<#list JobGroupList as group> <#list JobGroupList as group>
<option value="${group.appName}" >${group.title}</option> <option value="${group.id}" >${group.title}</option>
</#list> </#list>
</select> </select>
</div> </div>
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
<div class="col-sm-4"> <div class="col-sm-4">
<select class="form-control" name="jobGroup" > <select class="form-control" name="jobGroup" >
<#list JobGroupList as group> <#list JobGroupList as group>
<option value="${group.appName}" >${group.title}</option> <option value="${group.id}" >${group.title}</option>
</#list> </#list>
</select> </select>
</div> </div>
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<select class="form-control" id="jobGroup" paramVal="${jobGroup}" > <select class="form-control" id="jobGroup" paramVal="${jobGroup}" >
<option value="" selected>请选择</option> <option value="" selected>请选择</option>
<#list JobGroupList as group> <#list JobGroupList as group>
<option value="${group.appName}" <#if jobGroup == group.appName && false>selected</#if> >${group.title}</option> <option value="${group.id}" <#if jobGroup == group.appName && false>selected</#if> >${group.title}</option>
</#list> </#list>
</select> </select>
</div> </div>
......
...@@ -2,13 +2,13 @@ $(function() { ...@@ -2,13 +2,13 @@ $(function() {
// remove // remove
$('.remove').on('click', function(){ $('.remove').on('click', function(){
var appName = $(this).attr('appName'); var id = $(this).attr('id');
ComConfirm.show("确认删除分组?", function(){ ComConfirm.show("确认删除分组?", function(){
$.ajax({ $.ajax({
type : 'POST', type : 'POST',
url : base_url + '/jobgroup/remove', url : base_url + '/jobgroup/remove',
data : {"appName":appName}, data : {"id":id},
dataType : "json", dataType : "json",
success : function(data){ success : function(data){
if (data.code == 200) { if (data.code == 200) {
...@@ -108,6 +108,7 @@ $(function() { ...@@ -108,6 +108,7 @@ $(function() {
}); });
$('.update').on('click', function(){ $('.update').on('click', function(){
$("#updateModal .form input[name='id']").val($(this).attr("id"));
$("#updateModal .form input[name='appName']").val($(this).attr("appName")); $("#updateModal .form input[name='appName']").val($(this).attr("appName"));
$("#updateModal .form input[name='title']").val($(this).attr("title")); $("#updateModal .form input[name='title']").val($(this).attr("title"));
$("#updateModal .form input[name='order']").val($(this).attr("order")); $("#updateModal .form input[name='order']").val($(this).attr("order"));
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论