可配置的定时任务(只修改小时)

通过读取数据库,配置定时任务
1.controller

@Slf4j
@RestController
@RequestMapping(value = "/yfgs/cron")
@Api(description = "定时任务corn")
public class CornController {

    @Autowired
    public CornService cornService;

    @ApiOperation(value = "查询当前正在使用corn")
    @RequestMapping(value = "/findCorn", method = RequestMethod.GET)
    public CronVo findCorn() {

        return cornService.getTime();
    }

    @ApiOperation(value = "编辑当前正在使用corn")
    @RequestMapping(value = "/editCorn", method = RequestMethod.POST)
    public Json<CronVo> editCorn(@Validated @RequestBody CronVo time, BindingResult result) {

        Json<CronVo> timeJson = new Json<>();
        if (result.hasErrors()) {
            timeJson.setCode(400);
            timeJson.setSuccess(false);
            timeJson.setError("【hours只能传整数0~23或者*】");
            return timeJson;
        }
        cornService.editCorn(time);
        timeJson.setCode(200);
        timeJson.setSuccess(true);
        return timeJson;
    }

}

2.实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Cron implements Serializable {
    private Integer cron_id;

    @Pattern(regexp = "^([0-9]|[1-5][0-9]|59|[/*]|[0-9]/[1-5][0-9]|[1-5][0-9]/[1-5][0-9])|[0-9]/[0-9]$",
            message = "seconds参数不正确")
    private String seconds;

    @Pattern(regexp = "^([0-9]|[1-5][0-9]|59|[/*]|[0-9]/[1-5][0-9]|[1-5][0-9]/[1-5][0-9])|[0-9]/[0-9]$",
            message = "minutes参数不正确")
    private String minutes;

    @Pattern(regexp = "([0-9]|[1-2][0-3]|[/*])",
            message = "hours只能传整数0~23或者*")
    private String hours;

    @Pattern(regexp = "^([1-9]|[1-2][2-9]|[1-3][0-1]|[/*]|[0-9]/[1-9]|[0-9]/([1-2][2-9])|[0-9]/([1-3][0-1]))$",
            message = "dayofMonth参数不正确")
    private String dayofMonth;

    @Pattern(regexp = "^([1-7]|[/*]|[0-7]/[1-7])$",
            message = "dayofWeek参数不正确")
    private String dayofWeek;

    @Pattern(regexp = "^([1-9]|[1][0-2]|)$",
            message = "month参数不正确")
    private String month;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CronVo {
    @Pattern(regexp = "^([0-9]|[1-2][0-3]|[/*])$",
            message = "hours只能传整数0~23或者*")
    private String hours;
}

3.dao层

@Repository
public interface CronMapper {
    //@Select("select cron from cron limit 1")
    //String getCron();
    @Select("select cron_id,seconds,minutes,hours,dayofMonth,month,dayofWeek from cron limit 1")
    Cron getCron();

    @Select("select hours from cron limit 1")
    CronVo getTime();

    @Update("update cron set seconds= #{cron.seconds}," +
            " minutes= #{cron.minutes}," +
            "hours= #{cron.hours}," +
            "dayofMonth= #{cron.dayofMonth}," +
            "month= #{cron.month}," +
            "dayofWeek= #{cron.dayofWeek}" +
            " where cron_id=#{cron_id}")
    void editCorn(@Param("cron") Cron cron, @Param("cron_id") Integer id);

    @Insert({"insert into cron ( cron_id,seconds, minutes, hours, dayofMonth,month,dayofWeek) " +
            "values(#{cron.cron_id}, #{cron.seconds}, #{cron.minutes}, #{cron.hours}, #{cron.dayofMonth},#{cron.month},#{cron.dayofWeek})"})
    void addCron(@Param("cron") Cron cron);
}

4.service

@Service
public class CornServiceImpl implements CornService {
    @Autowired
    private CronMapper cronMapper;

    @Override
    public Cron findCorn() {
        return cronMapper.getCron();
    }

    @Override
    public CronVo getTime() {
        CronVo time = cronMapper.getTime();
        String s = time.getHours();
        CronVo timeStr = new CronVo();
        if (s.contains("*")) {
          return time;
        } else {
            String[] split = s.split("/");
            String hours = split[1];
            timeStr.setHours(hours);
        }
        return timeStr;
    }

    @Override
    public void editCorn(CronVo time) {

        //获取当前时间的整点数
        Date today = new Date();
        SimpleDateFormat f = new SimpleDateFormat("HH");
        String CurrentHour = f.format(today);
        Cron cron = new Cron();
        cron.setCron_id(1);
        cron.setSeconds("0");
        cron.setMinutes("0");
        cron.setDayofWeek("*");
        cron.setDayofMonth("*");
        cron.setMonth("*");
        if (time.getHours().toString().contains("*")) {
            cron.setHours("*");
        } else {
            cron.setHours(CurrentHour + "/" + time.getHours());
        }

        Integer id = cron.getCron_id();
        cronMapper.editCorn(cron, id);

    }

}
public interface CornService {
    Cron findCorn();

    CronVo getTime();

    void editCorn(CronVo time);

}

5.定时任务

/**
 * 动态修改cron
 */
@Component
public class Task implements SchedulingConfigurer {
    private static Logger log = LoggerFactory.getLogger(Task.class);


    private static String cron;
    @Autowired
    @SuppressWarnings("all")
    CronMapper cronMapper;

    @Autowired
    private JiraDataScheduler jiraDataScheduler;
    @Autowired
    private SonarDataScheduler sonarDataScheduler;


    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {

        scheduledTaskRegistrar.addTriggerTask(doTask1(), getTrigger());

    }
    //同时被定时调度器开启俩个线程
    private Runnable doTask1() {
        return new Runnable() {
            @Override
            public void run() {
                new MyThread().start();
                new Thread(doTask()).start();
            }
        };
    }
    //sonarDataScheduler的线程
    public class MyThread extends Thread {
        @Override
        public void run() {
            log.info("sonarDataScheduler开始执行,时间为:" + new SimpleDateFormat("yyyy-MM-dd: HH:mm:ss").format(new Date(System.currentTimeMillis())));
            sonarDataScheduler.getSonarData();
            log.info("sonarDataScheduler执行完毕,时间为:" + new SimpleDateFormat("yyyy-MM-dd: HH:mm:ss").format(new Date(System.currentTimeMillis())));
        }
    }
   //jiraDataScheduler的线程
    private Runnable doTask() {
        return new Runnable() {
            @Override
            public void run() {
                // 业务逻辑
                log.info("jiraDataScheduler开始执行,时间为:" + new SimpleDateFormat("yyyy-MM-dd: HH:mm:ss").format(new Date(System.currentTimeMillis())));
                jiraDataScheduler.getJiraInfo();
                log.info("jiraDataScheduler执行完毕,时间为:" + new SimpleDateFormat("yyyy-MM-dd: HH:mm:ss").format(new Date(System.currentTimeMillis())));
            }
        };
    }

    private Trigger getTrigger() {
        return new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 触发器
                CronTrigger trigger = null;
                try {
                    trigger = new CronTrigger(getCron());
                    return trigger.nextExecutionTime(triggerContext);
                } catch (Exception e) {
                    log.error("cron表达式不合法,系统已默认每天18点执行一次");
                }
                trigger = new CronTrigger("0 0 18 * * *");
                return trigger.nextExecutionTime(triggerContext);
            }
        };
    }

    public String getCron() {
        Cron cron = cronMapper.getCron();
        //如果数据库没有cron规则,默认cron="0 0 1 * * *"
        Cron cron1 = new Cron();
        cron1.setCron_id(1);
        cron1.setSeconds("0");
        cron1.setMinutes("0");
        cron1.setHours("1");
        cron1.setDayofMonth("*");
        cron1.setDayofWeek("*");
        cron1.setMonth("*");
        if (Objects.isNull(cron)) {
            cronMapper.addCron(cron1);
            cron = cron1;
        }

        String seconds = cron.getSeconds();
        String minutes = cron.getMinutes();
        String hours = cron.getHours();
        String dayofMonth = cron.getDayofMonth();
        String month = cron.getMonth();
        String dayofWeek = cron.getDayofWeek();

        String s = cron.toString();
        s = seconds + " " + minutes + " " + hours + " " + dayofMonth + " "
                + month + " " + dayofWeek;

        if (!s.equals(Task.cron)) {
            log.info(new StringBuffer("cron将改变为: ").append(s).append("旧的cron为: ").append(Task.cron).append("'").toString());
            Task.cron = s;
        }
        return Task.cron;
    }
}

6.数据库
CREATE DATABASE /!32312 IF NOT EXISTS/task /*!40100 DEFAULT CHARACTER SET utf8 */;

USE task;
/*Table structure for table cron */

DROP TABLE IF EXISTS cron;
CREATE TABLE cron (
cron_id varchar(10) NOT NULL COMMENT ‘主键’,
seconds varchar(10) NOT NULL COMMENT ‘秒’,
minutes varchar(10) NOT NULL COMMENT ‘分’,
hours varchar(10) NOT NULL COMMENT ‘时’,
dayOfMonth varchar(10) NOT NULL COMMENT ‘天’,
dayOfWeek varchar(10) NOT NULL COMMENT ‘月’,
month varchar(10) NOT NULL COMMENT ‘周’,
PRIMARY KEY (cron_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 任务管理系统Jira是一款由澳大利亚公司Atlassian开发的工具,旨在帮助团队协作、追踪和管理任务的软件。Jira提供了一个可视化的项目管理界面,使得团队成员能够更好地规划、执行和跟踪任务的进度。 Jira的工作方式是通过创建项目和任务来进行任务管理。用户可以在Jira中创建项目,然后为项目添加任务。每个任务可以包含必要的描述、优先级、截止日期和分配给具体成员等信息。此外,用户还可以在每个任务下创建子任务以更细致地划分工作。 利用Jira,团队成员可以方便地查看任务的状态和进展。Jira提供了丰富的图表和报表,可以展示任务的进度、剩余工作量和时间估算等信息。团队成员可以更好地了解自己的工作情况,也能更好地协作和沟通。 除了任务管理,Jira还支持问题跟踪和缺陷管理。用户可以通过Jira来记录和追踪项目中出现的问题,跟踪解决问题的进程,以及与其他团队成员就问题进行讨论。这可以帮助团队更好地解决项目中的挑战和风险。 总之,Jira是一款功能强大的任务管理系统,为团队提供了有效的工具和平台,帮助团队实现任务派发、追踪、协作和报告等管理活动。它的灵活性和可定制性使得Jira能够适应各种不同的项目和团队需求,成为许多企业和组织的首选任务管理工具。 ### 回答2: Jira是一种任务管理系统,它提供了一个有效的平台,用于跟踪和管理项目中的任务、缺陷和故障。Jira的主要目标是帮助团队更好地协作、管理和跟踪任务的状态。 首先,Jira允许用户创建任务,并为任务指定优先级、截止日期和负责人。这样,团队成员就可以清楚地了解自己需要完成的任务以及任务的重要性和截止日期。此外,Jira还允许用户添加任务的详细描述、附件和评论,以便更好地沟通和记录任务相关的信息。 其次,Jira提供了一个灵活的工作流引擎,可以根据团队的需求自定义任务的状态。用户可以定义自己的任务状态,如“待办”、“进行中”、“已完成”等,以及任务在不同状态之间的转换规则。这使得团队能够清晰地了解任务的进展以及每个任务所处的阶段。 此外,Jira还提供了丰富的报表和统计功能。用户可以随时查看项目中的任务分配情况、任务完成情况以及每个任务的工作量。这些数据可以帮助团队了解项目的进度和每个成员的负荷,以便进行有效的资源分配和进度管理。 总之,Jira是一个功能强大且高度可定制的任务管理系统。它能够帮助团队更好地跟踪和管理任务,促进团队协作和沟通,并提供了有价值的统计数据和报表,帮助团队更好地进行任务规划和资源管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值