corn传参转化和corn字符串内容提取的通用方法记录

发布时间:2023年12月25日

说明

  • 相信小伙伴在开发的时候,也会遇到一些动态定时任务的开发,这里提供一些传参以及cron字符串提取的通用方法

接口参数

@RestController
public class ReminderController {
    @PostMapping("/reminders")
    public void createReminder(
            @RequestParam int second,
            @RequestParam int minute,
            @RequestParam int hour,
            @RequestParam String dayOfMonth,
            @RequestParam String month,
            @RequestParam String dayOfWeek,
            @RequestParam String reminderContent) {
        
        String cronExpression = generateCronExpression(second, minute, hour, dayOfMonth, month, dayOfWeek);
        
        // Save the cron expression and reminder content to the database using JPA or other ORM framework
        
        // Schedule the reminder using a scheduler library like Quartz or Spring TaskScheduler
    }
    
    private String generateCronExpression(int second, int minute, int hour, String dayOfMonth, String month, String dayOfWeek) {
        // Return the cron expression
        // 构建cron表达式
    String cronExpression = String.format("%d %d %d %s %s %s", second, minute, hour, dayOfMonth, month, dayOfWeek);
    return cronExpression;
    }
}

Cron表达式部分参数提取通用方法

  • 星期使用数字表示,周日用1,周一用2,以此类推
  • 不建议使用正则表达式,cron中存在特殊字符,很容易导致错误,不利于维护和阅读
private int extractMinute(String cronExpression) {
    String[] tokens = cronExpression.split("\\s+");
    return Integer.parseInt(tokens[1]);  // tokens[1] 是分钟字段
}

private int extractHour(String cronExpression) {
    String[] tokens = cronExpression.split("\\s+");
    return Integer.parseInt(tokens[2]);  // tokens[2] 是小时字段
}

private int extractDayOfWeek(String cronExpression) {
    String[] tokens = cronExpression.split("\\s+");
    return Integer.parseInt(tokens[5]);  // tokens[5] 是星期几字段
}

// 示例用法
public static void main(String[] args) {
    String cron = "0 15 15 ? * 3";

    int minute = extractMinute(cron);
    int hour = extractHour(cron);
    int dayOfWeek = extractDayOfWeek(cron);

    System.out.println("Minute: " + minute);     // 输出应该是 15
    System.out.println("Hour: " + hour);         // 输出应该是 15
    System.out.println("Day of week: " + dayOfWeek);  // 输出应该是 3
}
文章来源:https://blog.csdn.net/yang2330648064/article/details/135190969
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。