您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關利用spring boot怎么對第三方jar包進行加載,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
具體方法如下:
<!-- 配置需要定時執(zhí)行的任務類以及方法 --> <bean id="doJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 指定任務類 --> <property name="targetObject" ref="schedulerTask" /> <!-- 指定任務執(zhí)行的方法 --> <property name="targetMethod" value="doTask" /> <property name="concurrent" value="false"></property> </bean> <!-- 配置觸發(fā)器 --> <bean id="jobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="doJob" /> <!-- 每5秒運行一次 --> <property name="cronExpression" value="0/5 * * * * ?" /> </bean> <!-- 觸發(fā)定時任務 --> <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="jobTrigger" /><!-- 此處可以配置多個觸發(fā)器 --> </list> </property> <property name="applicationContextSchedulerContextKey" value="applicationContextKey" /> <property name="waitForJobsToCompleteOnShutdown" value="true"></property> </bean>
接下來的任務,就是如何將上面的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 ## 待執(zhí)行對象的名字 quartz.config.targetMethod=doJob ## 待執(zhí)行的方法的名字 quartz.config.concurrent=false ## 是否并發(fā),如果上一個定時任務還沒有執(zhí)行完,又被觸發(fā)了,如果配置為false,則需等待上個任務執(zhí)行完,才觸發(fā) quartz.config.cronExpression=0/5 * * * * ? ## 任務觸發(fā)表達式 quartz.config.applicationContextSchedulerContextKey=applicationContextKey ## 通過該key可以獲取spring上下文 quartz.config.waitForJobsToCompleteOnShutdown=true ## 是否等待任務完全執(zhí)行完后,再銷毀線程池
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 * 創(chuàng)建時間:2017年4月11日 下午7:41:21 * @version 1.2.0 */ @Configuration public class QuartzConfig { @Autowired private QuartzConfigProperties properties; // 注入屬性配置文件對應的類實例 /** * attention: * Details:初始化JobDetail * @author chhliu * 創(chuàng)建時間: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為需要執(zhí)行的任務 MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); /* * 是否并發(fā)執(zhí)行 * 例如每5s執(zhí)行一次任務,但是當前任務還沒有執(zhí)行完,就已經過了5s了, * 如果此處為true,則下一個任務會執(zhí)行,如果此處為false,則下一個任務會等待上一個任務執(zhí)行完后,再開始執(zhí)行 */ jobDetail.setConcurrent(properties.isConcurrent()); /* * 為需要執(zhí)行的實體類對應的對象 */ String targetObject = properties.getTargetObject(); jobDetail.setTargetBeanName(targetObject); /* * 通過這幾個配置,告訴JobDetailFactoryBean我們需要定時執(zhí)行targetObject類中的properties.getTargetMethod()方法 */ jobDetail.setTargetMethod(properties.getTargetMethod()); return jobDetail; } /** * attention: * Details:實例化JobTrigger * @author chhliu * 創(chuàng)建時間: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 * 創(chuàng)建時間:2017年4月11日 下午7:39:35 * @param cronJobTrigger * @return * SchedulerFactoryBean */ @Bean(name = "scheduler") public SchedulerFactoryBean schedulerFactory(Trigger cronJobTrigger) { SchedulerFactoryBean bean = new SchedulerFactoryBean(); // 注冊觸發(fā)器 bean.setTriggers(cronJobTrigger); // 通過applicationContextSchedulerContextKey屬性配置獲取spring上下文 bean.setApplicationContextSchedulerContextKey(properties.getApplicationContextSchedulerContextKey()); // 關閉任務的時候,是否等待任務執(zhí)行完畢 bean.setWaitForJobsToCompleteOnShutdown(properties.isWaitForJobsToCompleteOnShutdown()); return bean; } }
4、編寫需要執(zhí)行的方法
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包進行加載,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。