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