perf:动态调度数据库保存

This commit is contained in:
xiang
2025-07-27 16:01:45 +08:00
parent d96ee51b29
commit 0388d84463
8 changed files with 128 additions and 0 deletions

View File

@@ -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;
}
}

View File

@@ -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 {
} }

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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);
}
} }

View File

@@ -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);
} }

View File

@@ -0,0 +1,2 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xiang.xservice.schedule.config.DynamicSchedulerAutoConfiguration

View File

@@ -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>