🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
步骤如下: **1. 引入 spring-boot-starter-quartz** ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </dependency> </dependencies> ``` **2. 定时任务要执行的业务代码** ```java @Slf4j public class AccountJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { //通过 JobDataMap 获取任务传递过来的参数 JobDataMap fromJobData = context.getJobDetail().getJobDataMap(); JobDataMap fromTriggerData = context.getTrigger().getJobDataMap(); log.info("任务传递的数据:{}", fromJobData.get("hello") + " " + fromJobData.get("world")); log.info("触发器传递的数据:{}\n", fromTriggerData.get("hello") + "," + fromTriggerData.get("world")); } } ``` **3. 创建定时任务** ```java @Slf4j @RestController public class AccountJobController { @Autowired private Scheduler scheduler; @GetMapping("/createJob") public void createJob() throws SchedulerException { //定义任务 JobDetail jobDetail = JobBuilder //定时任务要执行的业务代码 .newJob(AccountJob.class) //传递参数 .usingJobData("hello", "Hello") .usingJobData("world", "World!") //withIdentity(String name, String group) //该 JobDetail 的 ID,由name(任务名称) + group(任务组) 组成。ID 需要保证全局唯一 .withIdentity("job1", "job-group1") .build(); //定义触发器 Trigger trigger = TriggerBuilder.newTrigger() //也可以在触发器这里传递参数 .usingJobData("hello", "你好") .usingJobData("world", "世界!") //该触发器的 ID .withIdentity("trigger1", "trigger-group1") //定时任务立刻执行,也可以用 startAt(Date) 来指定具体执行时间 .startNow() //定时任务的执行规则 .withSchedule( SimpleScheduleBuilder.simpleSchedule() //每隔 4s 执行一次 .withIntervalInSeconds(4) //重复执行,不调用该 API 否则只执行一次 .repeatForever() ) .build(); //任务与触发器绑定 scheduler.scheduleJob(jobDetail, trigger); //启动调度器 scheduler.start(); } } ``` **4. 测试,创建定时任务后日志输出如下** ``` //每隔 4s 执行一次 2023-03-30T18:43:43...job.AccountJob : 任务传递的数据:Hello World! 2023-03-30T18:43:43...job.AccountJob : 触发器传递的数据:你好,世界! . 2023-03-30T18:43:47...job.AccountJob : 任务传递的数据:Hello World! 2023-03-30T18:43:47...job.AccountJob : 触发器传递的数据:你好,世界! . 2023-03-30T18:43:51...job.AccountJob : 任务传递的数据:Hello World! 2023-03-30T18:43:51...job.AccountJob : 触发器传递的数据:你好,世界! ... ```