最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年10月13日 10:11:50   作者:牛奮lch  
本篇文章主要介紹了spring boot加載第三方jar包的配置文件的方法,詳細的介紹了spring boot jar包配置文件的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言

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

其實,這個問題,在前面的文章中也有提到,http://www.fzitv.net/article/125700.htm

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

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

<!-- 配置需要定時執(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í)行完,就已經(jīng)過了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!!! 

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java如何讀取csv文件并將數(shù)據(jù)放入對象中

    Java如何讀取csv文件并將數(shù)據(jù)放入對象中

    這篇文章主要介紹了Java如何讀取csv文件并將數(shù)據(jù)放入對象中的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • SpringBoot靜態(tài)資源路徑配置及主頁顯示

    SpringBoot靜態(tài)資源路徑配置及主頁顯示

    這篇文章主要介紹了SpringBoot靜態(tài)資源路徑配置及主頁顯示,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Java日期工具類操作字符串Date和LocalDate互轉

    Java日期工具類操作字符串Date和LocalDate互轉

    這篇文章主要介紹了Java日期工具類操作字符串Date和LocalDate互轉,文章首先通過需要先引入坐標展開主題的相關內(nèi)容介紹,需要的朋友可以參一下
    2022-06-06
  • Java Web程序中利用Spring框架返回JSON格式的日期

    Java Web程序中利用Spring框架返回JSON格式的日期

    這里我們來介紹一下Java Web程序中利用Spring框架返回JSON格式的日期的方法,前提注意使用@DatetimeFormat時要引入一個類庫joda-time-版本.jar,否則會無法訪問相應路徑
    2016-05-05
  • java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例

    java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例

    今天小編就為大家分享一篇java 鍵盤輸入一個數(shù),輸出數(shù)組中指定元素的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • maven項目在實踐中的構建管理之路的方法

    maven項目在實踐中的構建管理之路的方法

    這篇文章主要介紹了maven項目在實踐中的構建管理之路的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Spring Boot 2.x基礎教程之使用@Scheduled實現(xiàn)定時任務的方法

    Spring Boot 2.x基礎教程之使用@Scheduled實現(xiàn)定時任務的方法

    在Spring Boot中編寫定時任務是非常簡單的事,下面通過實例介紹如何在Spring Boot中創(chuàng)建定時任務,實現(xiàn)每過5秒輸出一個當前時間,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • Java8新特性之新日期時間庫的使用教程

    Java8新特性之新日期時間庫的使用教程

    這篇文章主要給大家介紹了關于Java8新特性之新日期時間庫使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • java編寫冒泡排序的完整示例

    java編寫冒泡排序的完整示例

    這篇文章主要給大家介紹了關于java編寫冒泡排序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Java SpringBoot的相關知識點詳解

    Java SpringBoot的相關知識點詳解

    這篇文章主要介紹了SpringBoot的相關知識點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-10-10

最新評論

上饶市| 中西区| 睢宁县| 大名县| 汉川市| 迁西县| 嘉定区| 徐闻县| 英吉沙县| 永福县| 聂拉木县| 安徽省| 咸丰县| 延安市| 阿拉尔市| 阿鲁科尔沁旗| 泸西县| 延川县| 景德镇市| 繁峙县| 大同县| 龙江县| 虹口区| 乌兰县| 太保市| 江川县| 象州县| 北海市| 平陆县| 涿鹿县| 酉阳| 博客| 江川县| 金山区| 盐亭县| 京山县| 墨脱县| 鄄城县| 黑山县| 聂拉木县| 兴业县|