1.当我们不知道程序怎么跑的时候是十分可怕的,所有对于定时任务,我们需要把每一次的执行细节,传入的参数,执行的结果等保存到数据库中。那么怎样保存那。我这里给出一个方案。springbatch。
2.项目基础springboot,maven,druid。
(1)maven中引入jar:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
@Configuration
@EnableBatchProcessing
@ComponentScan(basePackageClasses = DefaultBatchConfigurer.class)
public class ShopJobConfig {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory steps;
@Autowired
private ShopTask shopTask;
@Bean
public Job job(Step step1) {
return jobs.get("shopJob").incrementer(new RunIdIncrementer()).start(step1).build();
}
@Bean
public Step Step1() {
MethodInvokingTaskletAdapter adapter = new MethodInvokingTaskletAdapter();
adapter.setTargetObject(shopTask);
adapter.setTargetMethod("doTask");
return steps.get("shopJobStep1").tasklet(adapter).build();
}
}
(2)配置一个job,来执行我们的任务
@Component
public class ShopTaskImpl implements ShopTask{
@Override
public void doTask() {
System.out.println("task execute");
}
}
(3)配置一个定时任务来执行:
@Component
public class ScheduledTasks {
@Autowired
private JobLauncher jobLauncher;
@Autowired
private Job job;
@Scheduled(cron="0/5 * * * * * ")
public void showCurrentTime() throws Exception{
System.out.println(1);
Map<String, JobParameter> param = new HashMap<String, JobParameter>();
param.put("startTime", new JobParameter(new Date()));
jobLauncher.run(job, new JobParameters(param));
System.out.println(1);
}
}
(4)查看数据库:
(5)我们发现springboot启动的时候会自动执行一遍定时任务,若想按照指定的规则来,屏蔽第一次启动执行需要设置:
spring.batch.job.enabled=false