扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本篇文章给大家分享的是有关利用spring boot怎么对第三方jar包进行加载,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
成都创新互联公司主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务古田,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
具体方法如下:
接下来的任务,就是如何将上面的xml配置文件,去配置化。
从上面的配置文件中,可以得出,我们需要配置3个实例,分别是JobDetail,JobTrigger和Scheduler。
1、首先抽取出需要在application.properties配置文件中配置的属性项,从上面的配置文件中,可以得出如下需要配置的属性项,对应的VO如下:
package com.chhliu.springboot.quartz.config; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix="quartz.config") public class QuartzConfigProperties { private String targetObject; private String targetMethod; private boolean concurrent; private String cronExpression; private String applicationContextSchedulerContextKey; private boolean waitForJobsToCompleteOnShutdown; ……省略getter、setter方法…… }
2、在application.properties配置文件中,加入如下配置
quartz.config.targetObject=taskJob ## 待执行对象的名字 quartz.config.targetMethod=doJob ## 待执行的方法的名字 quartz.config.concurrent=false ## 是否并发,如果上一个定时任务还没有执行完,又被触发了,如果配置为false,则需等待上个任务执行完,才触发 quartz.config.cronExpression=0/5 * * * * ? ## 任务触发表达式 quartz.config.applicationContextSchedulerContextKey=applicationContextKey ## 通过该key可以获取spring上下文 quartz.config.waitForJobsToCompleteOnShutdown=true ## 是否等待任务完全执行完后,再销毁线程池
3、分别实例化JobDetail,JobTrigger和Scheduler
package com.chhliu.springboot.quartz.entity; import org.quartz.Trigger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.CronTriggerFactoryBean; import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import com.chhliu.springboot.quartz.config.QuartzConfigProperties; /** * 描述:将quartz的xml配置文件去配置化 * @author chhliu * 创建时间:2017年4月11日 下午7:41:21 * @version 1.2.0 */ @Configuration public class QuartzConfig { @Autowired private QuartzConfigProperties properties; // 注入属性配置文件对应的类实例 /** * attention: * Details:初始化JobDetail * @author chhliu * 创建时间:2017年4月11日 下午6:17:06 * @param task * @return * MethodInvokingJobDetailFactoryBean * @throws ClassNotFoundException * @throws IllegalAccessException * @throws InstantiationException */ @Bean(name = "jobDetail") public MethodInvokingJobDetailFactoryBean detailFactoryBean() throws ClassNotFoundException, InstantiationException, IllegalAccessException {// ScheduleTask为需要执行的任务 MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); /* * 是否并发执行 * 例如每5s执行一次任务,但是当前任务还没有执行完,就已经过了5s了, * 如果此处为true,则下一个任务会执行,如果此处为false,则下一个任务会等待上一个任务执行完后,再开始执行 */ jobDetail.setConcurrent(properties.isConcurrent()); /* * 为需要执行的实体类对应的对象 */ String targetObject = properties.getTargetObject(); jobDetail.setTargetBeanName(targetObject); /* * 通过这几个配置,告诉JobDetailFactoryBean我们需要定时执行targetObject类中的properties.getTargetMethod()方法 */ jobDetail.setTargetMethod(properties.getTargetMethod()); return jobDetail; } /** * attention: * Details:实例化JobTrigger * @author chhliu * 创建时间:2017年4月11日 下午7:39:14 * @param jobDetail * @return * CronTriggerFactoryBean */ @Bean(name = "jobTrigger") public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) { CronTriggerFactoryBean tigger = new CronTriggerFactoryBean(); tigger.setJobDetail(jobDetail.getObject()); tigger.setCronExpression(properties.getCronExpression()); return tigger; } /** * attention: * Details:实例化Scheduler * @author chhliu * 创建时间:2017年4月11日 下午7:39:35 * @param cronJobTrigger * @return * SchedulerFactoryBean */ @Bean(name = "scheduler") public SchedulerFactoryBean schedulerFactory(Trigger cronJobTrigger) { SchedulerFactoryBean bean = new SchedulerFactoryBean(); // 注册触发器 bean.setTriggers(cronJobTrigger); // 通过applicationContextSchedulerContextKey属性配置获取spring上下文 bean.setApplicationContextSchedulerContextKey(properties.getApplicationContextSchedulerContextKey()); // 关闭任务的时候,是否等待任务执行完毕 bean.setWaitForJobsToCompleteOnShutdown(properties.isWaitForJobsToCompleteOnShutdown()); return bean; } }
4、编写需要执行的方法
package com.chhliu.springboot.quartz.job; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; @Service("taskJob") public class TaskJob { private static final Logger LOGGER = LoggerFactory.getLogger(TaskJob.class); public void doJob(){ LOGGER.info("hello spring boot, i'm the king of the world!!!"); } }
5、测试
package com.chhliu.springboot.quartz; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; import com.chhliu.springboot.quartz.config.QuartzConfigProperties; @SpringBootApplication @EnableConfigurationProperties({QuartzConfigProperties.class} ) // 开启配置属性支持 public class SpringbootQuartzApplication { public static void main(String[] args) { SpringApplication.run(SpringbootQuartzApplication.class, args); } }
6、测试结果如下
2017-04-11 19:09:35.017 INFO 7500 --- [eduler_Worker-1] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:09:40.004 INFO 7500 --- [eduler_Worker-2] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:09:45.004 INFO 7500 --- [eduler_Worker-3] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:09:50.004 INFO 7500 --- [eduler_Worker-4] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:09:55.001 INFO 7500 --- [eduler_Worker-5] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:10:00.002 INFO 7500 --- [eduler_Worker-6] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!! 2017-04-11 19:10:05.001 INFO 7500 --- [eduler_Worker-7] c.chhliu.springboot.quartz.job.TaskJob : hello spring boot, i'm the king of the world!!!
以上就是利用spring boot怎么对第三方jar包进行加载,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流