亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

spring boot加載第三方jar包的配置文件的方法

2024-07-13 10:12:53
字體:
來源:轉載
供稿:網友

前言

今天收到一封郵件,大概內容如下:spring boot鼓勵去配置化,那么怎么將第三方jar包中的xml去配置化了?

其實,這個問題,在前面的文章中也有提到,http://www.49028c.com/kaifa/java/288739.html

下面,我們就以Quartz定時任務為例,單獨對這個問題來進行說明,如何實現去配置化。

如果不使用spring boot,我們配置一個簡單的定時任務時,需要引入以下配置文件:

<!-- 配置需要定時執行的任務類以及方法 -->  <bean id="doJob"   class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">   <!-- 指定任務類 -->   <property name="targetObject" ref="schedulerTask" />   <!-- 指定任務執行的方法 -->   <property name="targetMethod" value="doTask" />   <property name="concurrent" value="false"></property>  </bean>    <!-- 配置觸發器 -->  <bean id="jobTrigger"   class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">   <property name="jobDetail" ref="doJob" />   <!-- 每5秒運行一次 -->   <property name="cronExpression" value="0/5 * * * * ?" />  </bean>   <!-- 觸發定時任務 -->  <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">   <property name="triggers">    <list>     <ref bean="jobTrigger" /><!-- 此處可以配置多個觸發器 -->    </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 ## 待執行對象的名字 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!!! 

從上面的測試結果可以看出,任務被觸發了,也得到了正確的結果。

上面的這個示例,只是一個簡單的例子,但是生產上復雜的需求,原理也是類似的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产大片精品免费永久看nba| 九色精品免费永久在线| 日韩欧美aaa| 国产一区二区成人| 精品国产一区二区三区久久| 欧美一级电影在线| 日韩中文字幕精品| 日韩欧美在线中文字幕| 成人欧美在线观看| 国产精品99久久久久久www| 亚洲free性xxxx护士白浆| 亚洲高清一二三区| 国产精品视频色| 日韩在线视频导航| 亚洲最大的免费| 国产婷婷成人久久av免费高清| 成人午夜一级二级三级| 在线播放国产精品| 国产成人拍精品视频午夜网站| 91高潮在线观看| 亚洲国产成人精品一区二区| 亚洲a级在线播放观看| 欧美日韩美女视频| 亚洲自拍高清视频网站| 国内精品伊人久久| 国产综合在线观看视频| 操日韩av在线电影| 成人午夜在线视频一区| 久久久国产视频91| 亚洲肉体裸体xxxx137| 国产欧美一区二区三区在线| 日韩av快播网址| 欧美亚洲免费电影| 欧美一级片久久久久久久| 欧美一级成年大片在线观看| 久久精品91久久香蕉加勒比| 欧美激情精品久久久| 亚洲经典中文字幕| 久久久国产精彩视频美女艺术照福利| 欧美极品少妇与黑人| 欧美丰满片xxx777| 中文字幕亚洲欧美日韩在线不卡| 在线成人激情黄色| 亚洲人成在线观看| 日韩中文字幕第一页| 亚洲国产成人精品女人久久久| 欧美性黄网官网| 这里只有精品在线观看| 精品毛片三在线观看| 国产精品香蕉在线观看| 国产成人精品一区二区三区| 国产亚洲精品91在线| 久久精品国产视频| 亚洲精品国精品久久99热一| 亚洲成人在线视频播放| 久久精品影视伊人网| 性欧美亚洲xxxx乳在线观看| 日韩精品极品在线观看播放免费视频| 日韩免费在线电影| 国产视频精品免费播放| 国产欧美日韩丝袜精品一区| 欧美精品在线免费| 欧美一级黄色网| 亚洲成人黄色在线| 亚洲美女性视频| 久久精品电影网| 久久成年人视频| 久久精品夜夜夜夜夜久久| 日韩精品一区二区三区第95| 国产亚洲精品一区二区| 亚洲iv一区二区三区| 91理论片午午论夜理片久久| 国产一区二区三区精品久久久| 欧美性在线视频| 91探花福利精品国产自产在线| 国产精品99导航| 欧美日韩999| 中文字幕亚洲无线码在线一区| 国产成一区二区| 国产区精品在线观看| 午夜精品www| 美女视频久久黄| 国产精品一区久久| 亚洲视频在线免费观看| 亚洲a级在线播放观看| 俺去啦;欧美日韩| 一区二区三区高清国产| 91精品国产91久久久| 国产又爽又黄的激情精品视频| 中文字幕日韩欧美在线| 欧美中文字幕视频在线观看| 欧美成人精品三级在线观看| 久久久精品国产| 亚洲精品国产精品久久清纯直播| 成人高清视频观看www| 色综合久久88色综合天天看泰| 久久这里只有精品视频首页| 日本国产精品视频| 亚洲第一区第二区| 亚洲精品美女久久久久| 亚洲国产精品久久精品怡红院| 国产丝袜一区二区| 日本成人精品在线| 欧美视频在线免费看| yw.139尤物在线精品视频| 欧美精品在线极品| 欧美激情精品久久久久久蜜臀| 国产精品户外野外| 奇米影视亚洲狠狠色| 国产精品露脸自拍| 欧美激情视频在线免费观看 欧美视频免费一| 成人黄色免费看| 性色av一区二区三区红粉影视| 亚洲美女av电影| 在线观看亚洲视频| 欧美激情国内偷拍| 精品美女国产在线| 欧美日韩另类字幕中文| 性欧美视频videos6一9| 日韩中文字幕视频在线| 26uuu久久噜噜噜噜| 成人中文字幕在线观看| 日韩欧美高清视频| 日韩精品中文字幕有码专区| 日韩天堂在线视频| 日韩高清人体午夜| 日本三级久久久| 成人免费网视频| 亚洲欧美一区二区三区情侣bbw| 国产日韩综合一区二区性色av| 中日韩美女免费视频网址在线观看| 亚洲成人动漫在线播放| 国产一区二区香蕉| 日韩av日韩在线观看| 成人网址在线观看| 深夜福利日韩在线看| 欧美麻豆久久久久久中文| 国产精品www网站| 欧美性猛交xxxxx水多| 久久精品国产91精品亚洲| 原创国产精品91| 亚洲精品在线观看www| 欧美日韩中文字幕综合视频| 欧美日韩在线免费| 97国产精品视频| 欧美成人精品在线视频| 91美女高潮出水| 久久久噜久噜久久综合| 欧美性猛交xxxx免费看久久久| 亚洲午夜av久久乱码| 久久久久久久久久亚洲| 成人乱人伦精品视频在线观看| 日韩免费av一区二区| 26uuu另类亚洲欧美日本老年| 欧美激情一区二区三级高清视频| 精品久久久久久久久国产字幕| 久久久精品国产网站| 国产精品美女久久久久久免费| 国产精品一久久香蕉国产线看观看| 综合欧美国产视频二区| 日韩国产中文字幕| 4438全国成人免费| 亚洲精品白浆高清久久久久久| 久久精品国产99国产精品澳门|