任务组,改为使用执行器ID
This commit is contained in:
parent
9c05c3a96f
commit
354f6483b2
|
@ -204,12 +204,13 @@ CREATE TABLE XXL_JOB_QRTZ_TRIGGER_REGISTRY (
|
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE XXL_JOB_QRTZ_TRIGGER_GROUP (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`app_name` varchar(64) NOT NULL,
|
||||
`title` varchar(12) NOT NULL,
|
||||
`order` tinyint(4) NOT NULL,
|
||||
PRIMARY KEY (`app_name`)
|
||||
PRIMARY KEY (`id`)
|
||||
) 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;
|
||||
|
||||
|
|
|
@ -60,12 +60,6 @@ public class JobGroupController {
|
|||
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);
|
||||
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
|
||||
}
|
||||
|
@ -90,10 +84,10 @@ public class JobGroupController {
|
|||
|
||||
@RequestMapping("/remove")
|
||||
@ResponseBody
|
||||
public ReturnT<String> remove(String appName){
|
||||
public ReturnT<String> remove(int id){
|
||||
|
||||
// valid
|
||||
int count = xxlJobInfoDao.pageListCount(0, 10, appName, null);
|
||||
int count = xxlJobInfoDao.pageListCount(0, 10, String.valueOf(id), null);
|
||||
if (count > 0) {
|
||||
return new ReturnT<String>(500, "该分组使用中, 不可删除");
|
||||
}
|
||||
|
@ -103,7 +97,7 @@ public class JobGroupController {
|
|||
return new ReturnT<String>(500, "删除失败, 系统需要至少预留一个默认分组");
|
||||
}
|
||||
|
||||
int ret = xxlJobGroupDao.remove(appName);
|
||||
int ret = xxlJobGroupDao.remove(id);
|
||||
return (ret>0)?ReturnT.SUCCESS:ReturnT.FAIL;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ public class JobInfoController {
|
|||
|
||||
@RequestMapping("/add")
|
||||
@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,
|
||||
int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
|
||||
|
||||
|
@ -59,7 +59,7 @@ public class JobInfoController {
|
|||
|
||||
@RequestMapping("/reschedule")
|
||||
@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,
|
||||
int glueSwitch, String childJobKey) {
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@ public class JobLogController {
|
|||
public String index(Model model, String jobGroup, String jobName) {
|
||||
|
||||
// 任务组
|
||||
|
||||
List<XxlJobGroup> jobGroupList = xxlJobGroupDao.findAll();
|
||||
|
||||
model.addAttribute("jobGroup", jobGroup);
|
||||
|
|
|
@ -73,7 +73,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
|
|||
addressList.addAll(addressArr);
|
||||
parseAddressMsg = MessageFormat.format("Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>", addressList);
|
||||
} else {
|
||||
XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(jobInfo.getJobGroup());
|
||||
XxlJobGroup group = DynamicSchedulerUtil.xxlJobGroupDao.load(Integer.valueOf(jobInfo.getJobGroup()));
|
||||
if (group!=null) {
|
||||
addressList = JobRegistryHelper.discover(RegistHelper.RegistType.EXECUTOR.name(), group.getAppName());
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.util.List;
|
|||
*/
|
||||
public class XxlJobGroup {
|
||||
|
||||
private int id;
|
||||
private String appName;
|
||||
private String title;
|
||||
private int order;
|
||||
|
@ -14,6 +15,14 @@ public class XxlJobGroup {
|
|||
// registry list
|
||||
private List<String> registryList;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getAppName() {
|
||||
return appName;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public class JobMonitorHelper {
|
|||
Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
|
||||
for (String email: emailSet) {
|
||||
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());
|
||||
MailUtil.sendMail(email, title, content, false, null);
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ public interface IXxlJobGroupDao {
|
|||
|
||||
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 {
|
|||
}
|
||||
|
||||
@Override
|
||||
public int remove(String appName) {
|
||||
return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", appName);
|
||||
public int remove(int id) {
|
||||
return sqlSessionTemplate.delete("XxlJobGroupMapper.remove", id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public XxlJobGroup load(String appName) {
|
||||
return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", appName);
|
||||
public XxlJobGroup load(int id) {
|
||||
return sqlSessionTemplate.selectOne("XxlJobGroupMapper.load", id);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -13,11 +13,11 @@ public interface IXxlJobService {
|
|||
|
||||
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,
|
||||
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);
|
||||
|
||||
public ReturnT<String> remove(String jobGroup, String jobName);
|
||||
|
|
|
@ -64,7 +64,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|||
}
|
||||
|
||||
@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,
|
||||
int glueSwitch, String glueSource, String glueRemark, String childJobKey) {
|
||||
// valid
|
||||
|
@ -106,7 +106,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|||
// generate jobName
|
||||
String jobName = FastDateFormat.getInstance("yyyyMMddHHmmssSSSS").format(new Date());
|
||||
try {
|
||||
if (DynamicSchedulerUtil.checkExists(jobName, jobGroup)) {
|
||||
if (DynamicSchedulerUtil.checkExists(jobName, String.valueOf(jobGroup))) {
|
||||
return new ReturnT<String>(500, "系统繁忙,请稍后重试");
|
||||
}
|
||||
} catch (SchedulerException e1) {
|
||||
|
@ -116,7 +116,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|||
|
||||
// Backup to the database
|
||||
XxlJobInfo jobInfo = new XxlJobInfo();
|
||||
jobInfo.setJobGroup(jobGroup);
|
||||
jobInfo.setJobGroup(String.valueOf(jobGroup));
|
||||
jobInfo.setJobName(jobName);
|
||||
jobInfo.setJobCron(jobCron);
|
||||
jobInfo.setJobDesc(jobDesc);
|
||||
|
@ -146,7 +146,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|||
}
|
||||
|
||||
@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) {
|
||||
|
||||
// valid
|
||||
|
@ -189,7 +189,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
|
|||
}
|
||||
|
||||
// stage job info
|
||||
XxlJobInfo jobInfo = xxlJobInfoDao.load(jobGroup, jobName);
|
||||
XxlJobInfo jobInfo = xxlJobInfoDao.load(String.valueOf(jobGroup), jobName);
|
||||
jobInfo.setJobCron(jobCron);
|
||||
jobInfo.setJobDesc(jobDesc);
|
||||
jobInfo.setAuthor(author);
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
<mapper namespace="XxlJobGroupMapper">
|
||||
|
||||
<resultMap id="XxlJobGroup" type="com.xxl.job.admin.core.model.XxlJobGroup" >
|
||||
<result column="id" property="id" />
|
||||
<result column="app_name" property="appName" />
|
||||
<result column="title" property="title" />
|
||||
<result column="order" property="order" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="Base_Column_List">
|
||||
t.id,
|
||||
t.app_name,
|
||||
t.title,
|
||||
t.order
|
||||
|
@ -21,27 +23,28 @@
|
|||
ORDER BY t.order ASC
|
||||
</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`)
|
||||
values ( #{appName}, #{title}, #{order});
|
||||
</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
|
||||
SET `title` = #{title},
|
||||
SET `app_name` = #{appName},
|
||||
`title` = #{title},
|
||||
`order` = #{order}
|
||||
WHERE app_name = #{appName}
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<delete id="remove" parameterType="java.lang.String" >
|
||||
<delete id="remove" parameterType="java.lang.Integer" >
|
||||
DELETE FROM XXL_JOB_QRTZ_TRIGGER_GROUP
|
||||
WHERE app_name = #{appName}
|
||||
WHERE id = #{id}
|
||||
</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" />
|
||||
FROM XXL_JOB_QRTZ_TRIGGER_GROUP AS t
|
||||
WHERE t.app_name = #{appName}
|
||||
WHERE t.id = #{id}
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -37,6 +37,7 @@
|
|||
<table id="joblog_list" class="table table-bordered table-striped display" width="100%" >
|
||||
<thead>
|
||||
<tr>
|
||||
<th name="id" >ID</th>
|
||||
<th name="appName" >AppName</th>
|
||||
<th name="title" >名称</th>
|
||||
<th name="order" >排序</th>
|
||||
|
@ -48,13 +49,14 @@
|
|||
<#if list?exists && list?size gt 0>
|
||||
<#list list as group>
|
||||
<tr>
|
||||
<td>${group.id}</td>
|
||||
<td>${group.appName}</td>
|
||||
<td>${group.title}</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>
|
||||
<button class="btn btn-warning btn-xs update" 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-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" id="${group.id}" >删除</button>
|
||||
</td>
|
||||
</tr>
|
||||
</#list>
|
||||
|
@ -113,7 +115,7 @@
|
|||
<form class="form-horizontal form" role="form" >
|
||||
<div class="form-group">
|
||||
<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 class="form-group">
|
||||
<label for="lastname" class="col-sm-2 control-label">名称<font color="red">*</font></label>
|
||||
|
@ -128,6 +130,7 @@
|
|||
<div class="col-sm-offset-3 col-sm-6">
|
||||
<button type="submit" class="btn btn-primary" >保存</button>
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
|
||||
<input type="hidden" name="id" >
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
<span class="input-group-addon">执行器</span>
|
||||
<select class="form-control" id="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.appName}" >${group.title}</option>
|
||||
<option value="${group.id}" >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
@ -118,7 +118,7 @@
|
|||
<div class="col-sm-4">
|
||||
<select class="form-control" name="jobGroup" >
|
||||
<#list JobGroupList as group>
|
||||
<option value="${group.appName}" >${group.title}</option>
|
||||
<option value="${group.id}" >${group.title}</option>
|
||||
</#list>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<select class="form-control" id="jobGroup" paramVal="${jobGroup}" >
|
||||
<option value="" selected>请选择</option>
|
||||
<#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>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
@ -2,13 +2,13 @@ $(function() {
|
|||
|
||||
// remove
|
||||
$('.remove').on('click', function(){
|
||||
var appName = $(this).attr('appName');
|
||||
var id = $(this).attr('id');
|
||||
|
||||
ComConfirm.show("确认删除分组?", function(){
|
||||
$.ajax({
|
||||
type : 'POST',
|
||||
url : base_url + '/jobgroup/remove',
|
||||
data : {"appName":appName},
|
||||
data : {"id":id},
|
||||
dataType : "json",
|
||||
success : function(data){
|
||||
if (data.code == 200) {
|
||||
|
@ -108,6 +108,7 @@ $(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='title']").val($(this).attr("title"));
|
||||
$("#updateModal .form input[name='order']").val($(this).attr("order"));
|
||||
|
|
Loading…
Reference in New Issue