perf:动态调度数据库保存
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
package com.xiang.xservice.schedule;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum TaskGroupEnum {
|
||||||
|
SERVICE_FWD_SCHEDULE("xs-fwd", "芬玩岛定时任务");
|
||||||
|
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
TaskGroupEnum(String code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
package com.xiang.xservice.schedule.config;
|
package com.xiang.xservice.schedule.config;
|
||||||
|
|
||||||
import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService;
|
import com.xiang.xservice.schedule.service.IDynamicTaskSchedulerService;
|
||||||
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
@AutoConfiguration
|
@AutoConfiguration
|
||||||
|
@MapperScan("com.xiang.xservice.schedule.mapper")
|
||||||
@Import({DynamicTaskSchedulerConfig.class, IDynamicTaskSchedulerService.class, TaskRegistry.class})
|
@Import({DynamicTaskSchedulerConfig.class, IDynamicTaskSchedulerService.class, TaskRegistry.class})
|
||||||
public class DynamicSchedulerAutoConfiguration {
|
public class DynamicSchedulerAutoConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.xiang.xservice.schedule.entity;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ScheduledTaskEntity {
|
||||||
|
private Long id;
|
||||||
|
private String taskName;
|
||||||
|
private String taskGroup;
|
||||||
|
private LocalDateTime runTime;
|
||||||
|
private Integer status;
|
||||||
|
private String parameters;
|
||||||
|
private LocalDateTime createdTime;
|
||||||
|
private LocalDateTime updatedTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.xiang.xservice.schedule.mapper;
|
||||||
|
|
||||||
|
import com.xiang.xservice.schedule.entity.ScheduledTaskEntity;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
@Repository
|
||||||
|
public interface ScheduledTaskMapper {
|
||||||
|
|
||||||
|
int save(ScheduledTaskEntity entity);
|
||||||
|
|
||||||
|
int update(ScheduledTaskEntity entity);
|
||||||
|
|
||||||
|
ScheduledTaskEntity getTask(@Param("id") String taskId);
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.xiang.xservice.schedule.service;
|
package com.xiang.xservice.schedule.service;
|
||||||
|
|
||||||
|
import com.xiang.xservice.schedule.entity.ScheduledTaskEntity;
|
||||||
import com.xiang.xservice.schedule.entity.TaskConfig;
|
import com.xiang.xservice.schedule.entity.TaskConfig;
|
||||||
|
import com.xiang.xservice.schedule.mapper.ScheduledTaskMapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -17,6 +19,7 @@ import java.util.concurrent.ScheduledFuture;
|
|||||||
public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerService{
|
public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerService{
|
||||||
|
|
||||||
private final ThreadPoolTaskScheduler taskScheduler;
|
private final ThreadPoolTaskScheduler taskScheduler;
|
||||||
|
private final ScheduledTaskMapper scheduledTaskMapper;
|
||||||
|
|
||||||
private final Map<Long, ScheduledFuture<?>> taskMap = new ConcurrentHashMap<>();
|
private final Map<Long, ScheduledFuture<?>> taskMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@@ -41,6 +44,7 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer
|
|||||||
ScheduledFuture<?> future = taskMap.get(taskId);
|
ScheduledFuture<?> future = taskMap.get(taskId);
|
||||||
if (future != null) {
|
if (future != null) {
|
||||||
future.cancel(true);
|
future.cancel(true);
|
||||||
|
|
||||||
taskMap.remove(taskId);
|
taskMap.remove(taskId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,4 +53,19 @@ public class DynamicTaskSchedulerServiceImpl implements IDynamicTaskSchedulerSer
|
|||||||
public Boolean contains(String taskId) {
|
public Boolean contains(String taskId) {
|
||||||
return taskMap.containsKey(taskId);
|
return taskMap.containsKey(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean saveTask(ScheduledTaskEntity entity) {
|
||||||
|
return scheduledTaskMapper.save(entity) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean updateTask(ScheduledTaskEntity entity) {
|
||||||
|
return scheduledTaskMapper.update(entity) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ScheduledTaskEntity getTask(String taskId) {
|
||||||
|
return scheduledTaskMapper.getTask(taskId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.xiang.xservice.schedule.service;
|
package com.xiang.xservice.schedule.service;
|
||||||
|
|
||||||
|
import com.xiang.xservice.schedule.entity.ScheduledTaskEntity;
|
||||||
import com.xiang.xservice.schedule.entity.TaskConfig;
|
import com.xiang.xservice.schedule.entity.TaskConfig;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -8,4 +9,7 @@ public interface IDynamicTaskSchedulerService {
|
|||||||
void schedule(TaskConfig config, Runnable task);
|
void schedule(TaskConfig config, Runnable task);
|
||||||
void cancel(String taskId);
|
void cancel(String taskId);
|
||||||
Boolean contains(String taskId);
|
Boolean contains(String taskId);
|
||||||
|
Boolean saveTask(ScheduledTaskEntity entity);
|
||||||
|
Boolean updateTask(ScheduledTaskEntity entity);
|
||||||
|
ScheduledTaskEntity getTask(String taskId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
||||||
|
com.xiang.xservice.schedule.config.DynamicSchedulerAutoConfiguration
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.xiang.xservice.schedule.mapper.ScheduledTaskMapper">
|
||||||
|
|
||||||
|
<resultMap id="BaseResultMap" type="com.xiang.xservice.schedule.entity.ScheduledTaskEntity" >
|
||||||
|
<result column="id" property="id"/>
|
||||||
|
<result column="task_name" property="taskName"/>
|
||||||
|
<result column="task_group" property="taskGroup"/>
|
||||||
|
<result column="run_time" property="runTime"/>
|
||||||
|
<result column="parameters" property="status"/>
|
||||||
|
<result column="create_time" property="parameters"/>
|
||||||
|
<result column="update_time" property="createdTime"/>
|
||||||
|
<result column="status" property="updatedTime"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="Base_Column_List">
|
||||||
|
id, task_name, task_group, run_time, status, parameters, create_time, update_time
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<!-- 插入一条任务 -->
|
||||||
|
<insert id="insertTask" useGeneratedKeys="true" keyProperty="id">
|
||||||
|
INSERT INTO script_schedule_task (task_name, task_group, run_time, status, parameters, create_time, update_time)
|
||||||
|
VALUES (#{taskName}, #{taskGroup}, #{runTime}, #{status}, #{parameters}, #{createdTime}, #{updatedTime})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<!-- 更新任务 -->
|
||||||
|
<update id="updateTask">
|
||||||
|
UPDATE script_schedule_task
|
||||||
|
SET task_name = #{taskName},
|
||||||
|
task_group = #{taskGroup},
|
||||||
|
run_time = #{runTime},
|
||||||
|
status = #{status},
|
||||||
|
parameters = #{parameters},
|
||||||
|
create_time = #{createdTime},
|
||||||
|
update_time = #{updatedTime}
|
||||||
|
WHERE id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<select id="getTask" resultMap="BaseResultMap">
|
||||||
|
select <include refid="Base_Column_List"/>
|
||||||
|
from script_schedule_task where id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Reference in New Issue
Block a user