配色: 字号:
Spring定时任务的几种实现
2017-03-31 | 阅:  转:  |  分享 
  
Spring瀹氭椂浠诲姟鐨勫嚑绉嶅疄鐜?
涓€锛庡垎绫?鈥粠瀹炵幇鐨勬妧鏈笂鏉ュ垎绫伙紝鐩墠涓昏鏈変笁绉嶆妧鏈紙鎴栬€呰鏈変笁绉嶄骇鍝侊級锛?1.Java鑷甫鐨刯ava.util.Timer绫伙紝杩欎釜绫诲厑璁镐綘璋冨害涓€涓猨ava.util.TimerTask浠诲姟銆備娇鐢ㄨ繖绉嶆柟寮忓彲浠ヨ浣犵殑绋嬪簭鎸夌収鏌愪竴涓搴︽墽琛岋紝浣嗕笉鑳藉湪鎸囧畾鏃堕棿杩愯銆備竴鑸敤鐨勮緝灏戯紝杩欑瘒鏂囩珷灏嗕笉鍋氳缁嗕粙缁嶃€?2.浣跨敤Quartz锛岃繖鏄竴涓姛鑳芥瘮杈冨己澶х殑鐨勮皟搴﹀櫒锛屽彲浠ヨ浣犵殑绋嬪簭鍦ㄦ寚瀹氭椂闂存墽琛岋紝涔熷彲浠ユ寜鐓ф煇涓€涓搴︽墽琛岋紝閰嶇疆璧锋潵绋嶆樉澶嶆潅锛岀◢鍚庝細璇︾粏浠嬬粛銆?3.Spring3.0浠ュ悗鑷甫鐨則ask锛屽彲浠ュ皢瀹冪湅鎴愪竴涓交閲忕骇鐨凲uartz锛岃€屼笖浣跨敤璧锋潵姣擰uartz绠€鍗曡澶氾紝绋嶅悗浼氫粙缁嶃€?鈥粠浣滀笟绫荤殑缁ф壙鏂瑰紡鏉ヨ锛屽彲浠ュ垎涓轰袱绫伙細
1.浣滀笟绫婚渶瑕佺户鎵胯嚜鐗瑰畾鐨勪綔涓氱被鍩虹被锛屽Quartz涓渶瑕佺户鎵胯嚜org.springframework.scheduling.quartz.QuartzJobBean锛沯ava.util.Timer涓渶瑕佺户鎵胯嚜java.util.TimerTask銆?2.浣滀笟绫诲嵆鏅€氱殑java绫伙紝涓嶉渶瑕佺户鎵胯嚜浠讳綍鍩虹被銆?娉?涓汉鎺ㄨ崘浣跨敤绗簩绉嶆柟寮忥紝鍥犱负杩欐牱鎵€浠ョ殑绫婚兘鏄櫘閫氱被锛屼笉闇€瑕佷簨鍏堝尯鍒寰呫€?
鈥粠浠诲姟璋冨害鐨勮Е鍙戞椂鏈烘潵鍒嗭紝杩欓噷涓昏鏄拡瀵逛綔涓氫娇鐢ㄧ殑瑙﹀彂鍣紝涓昏鏈変互涓嬩袱绉嶏細
1.姣忛殧鎸囧畾鏃堕棿鍒欒Е鍙戜竴娆★紝鍦≦uartz涓搴旂殑瑙﹀彂鍣ㄤ负锛歰rg.springframework.scheduling.quartz.SimpleTriggerBean
2.姣忓埌鎸囧畾鏃堕棿鍒欒Е鍙戜竴娆★紝鍦≦uartz涓搴旂殑璋冨害鍣ㄤ负锛歰rg.springframework.scheduling.quartz.CronTriggerBean
娉細骞堕潪姣忕浠诲姟閮藉彲浠ヤ娇鐢ㄨ繖涓ょ瑙﹀彂鍣紝濡俲ava.util.TimerTask浠诲姟灏卞彧鑳戒娇鐢ㄧ涓€绉嶃€俀uartz鍜宻pringtask閮藉彲浠ユ敮鎸佽繖涓ょ瑙﹀彂鏉′欢銆?
浜岋紟鐢ㄦ硶璇存槑
璇︾粏浠嬬粛姣忕浠诲姟璋冨害宸ュ叿鐨勪娇鐢ㄦ柟寮忥紝鍖呮嫭Quartz鍜宻pringtask涓ょ銆?
Quartz
绗竴绉嶏紝浣滀笟绫荤户鎵胯嚜鐗瑰畾鐨勫熀绫伙細org.springframework.scheduling.quartz.QuartzJobBean銆?绗竴姝ワ細瀹氫箟浣滀笟绫?
importorg.quartz.JobExecutionContext;
importorg.quartz.JobExecutionException;
importorg.springframework.scheduling.quartz.QuartzJobBean;
publicclassJob1extendsQuartzJobBean{

privateinttimeout;
privatestaticinti=0;
//璋冨害宸ュ巶瀹炰緥鍖栧悗锛岀粡杩噒imeout鏃堕棿寮€濮嬫墽琛岃皟搴?publicvoidsetTimeout(inttimeout){
this.timeout=timeout;
}

/
瑕佽皟搴︾殑鍏蜂綋浠诲姟
/
@Override
protectedvoidexecuteInternal(JobExecutionContextcontext)
throwsJobExecutionException{
System.out.println("瀹氭椂浠诲姟鎵ц涓€?);
}
}绗簩姝ワ細spring閰嶇疆鏂囦欢涓厤缃綔涓氱被JobDetailBean








璇存槑锛歰rg.springframework.scheduling.quartz.JobDetailBean鏈変袱涓睘鎬э紝jobClass灞炴€у嵆鎴戜滑鍦╦ava浠g爜涓畾涔夌殑浠诲姟绫伙紝jobDataAsMap灞炴€у嵆璇ヤ换鍔$被涓渶瑕佹敞鍏ョ殑灞炴€у€笺€?
绗笁姝ワ細閰嶇疆浣滀笟璋冨害鐨勮Е鍙戞柟寮忥紙瑙﹀彂鍣級

Quartz鐨勪綔涓氳Е鍙戝櫒鏈変袱绉嶏紝鍒嗗埆鏄?
org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

绗竴绉峉impleTriggerBean锛屽彧鏀寔鎸夌収涓€瀹氶搴﹁皟鐢ㄤ换鍔★紝濡傛瘡闅?0鍒嗛挓杩愯涓€娆°€?
閰嶇疆鏂瑰紡濡備笅锛?




绗簩绉岰ronTriggerBean锛屾敮鎸佸埌鎸囧畾鏃堕棿杩愯涓€娆★紝濡傛瘡澶?2:00杩愯涓€娆$瓑銆?
閰嶇疆鏂瑰紡濡備笅锛?




鍏充簬cronExpression琛ㄨ揪寮忕殑璇硶鍙傝闄勫綍銆?
绗洓姝ワ細閰嶇疆璋冨害宸ュ巶







璇存槑锛氳鍙傛暟鎸囧畾鐨勫氨鏄箣鍓嶉厤缃殑瑙﹀彂鍣ㄧ殑鍚嶅瓧銆?
绗簲姝ワ細鍚姩浣犵殑搴旂敤鍗冲彲锛屽嵆灏嗗伐绋嬮儴缃茶嚦tomcat鎴栧叾浠栧鍣ㄣ€?
绗簩绉嶏紝浣滀笟绫讳笉缁ф壙鐗瑰畾鍩虹被銆?Spring鑳藉鏀寔杩欑鏂瑰紡锛屽綊鍔熶簬涓や釜绫伙細

org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

杩欎袱涓被鍒嗗埆瀵瑰簲spring鏀寔鐨勪袱绉嶅疄鐜颁换鍔¤皟搴︾殑鏂瑰紡锛屽嵆鍓嶆枃鎻愬埌鍒癹ava鑷甫鐨則imertask鏂瑰紡鍜孮uartz鏂瑰紡銆傝繖閲屾垜鍙啓MethodInvokingJobDetailFactoryBean鐨勭敤娉曪紝
浣跨敤璇ョ被鐨勫ソ澶勬槸,鎴戜滑鐨勪换鍔$被涓嶅啀闇€瑕佺户鎵胯嚜浠讳綍绫伙紝鑰屾槸鏅€氱殑pojo銆?
绗竴姝ワ細缂栧啓浠诲姟绫?
publicclassJob2{
publicvoiddoJob2(){
System.out.println("涓嶇户鎵縌uartzJobBean鏂瑰紡-璋冨害杩涜涓?..");
}
}鍙互鐪嬪嚭锛岃繖灏辨槸涓€涓櫘閫氱殑绫伙紝骞朵笖鏈変竴涓柟娉曘€?
绗簩姝ワ細閰嶇疆浣滀笟绫?
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">





璇存槑锛氳繖涓€姝ユ槸鍏抽敭姝ラ锛屽0鏄庝竴涓狹ethodInvokingJobDetailFactoryBean锛屾湁涓や釜鍏抽敭灞炴€э細targetObject鎸囧畾浠诲姟绫伙紝targetMethod鎸囧畾杩愯鐨勬柟娉曘€傚線涓嬬殑姝ラ灏变笌鏂规硶涓€鐩稿悓浜嗭紝涓轰簡瀹屾暣锛屽悓鏍疯创鍑恒€?
绗笁姝ワ細閰嶇疆浣滀笟璋冨害鐨勮Е鍙戞柟寮忥紙瑙﹀彂鍣級

Quartz鐨勪綔涓氳Е鍙戝櫒鏈変袱绉嶏紝鍒嗗埆鏄?
org.springframework.scheduling.quartz.SimpleTriggerBean

org.springframework.scheduling.quartz.CronTriggerBean

绗竴绉峉impleTriggerBean锛屽彧鏀寔鎸夌収涓€瀹氶搴﹁皟鐢ㄤ换鍔★紝濡傛瘡闅?0鍒嗛挓杩愯涓€娆°€?
閰嶇疆鏂瑰紡濡備笅锛?




绗簩绉岰ronTriggerBean锛屾敮鎸佸埌鎸囧畾鏃堕棿杩愯涓€娆★紝濡傛瘡澶?2:00杩愯涓€娆$瓑銆?
閰嶇疆鏂瑰紡濡備笅锛?




浠ヤ笂涓ょ璋冨害鏂瑰紡鏍规嵁瀹為檯鎯呭喌锛屼换閫変竴绉嶅嵆鍙€?
绗洓姝ワ細閰嶇疆璋冨害宸ュ巶







璇存槑锛氳鍙傛暟鎸囧畾鐨勫氨鏄箣鍓嶉厤缃殑瑙﹀彂鍣ㄧ殑鍚嶅瓧銆?
绗簲姝ワ細鍚姩浣犵殑搴旂敤鍗冲彲锛屽嵆灏嗗伐绋嬮儴缃茶嚦tomcat鎴栧叾浠栧鍣ㄣ€?


鍒版锛宻pring涓璔uartz鐨勫熀鏈厤缃氨浠嬬粛瀹屼簡锛屽綋鐒朵簡锛屼娇鐢ㄤ箣鍓嶏紝瑕佸鍏ョ浉搴旂殑spring鐨勫寘涓嶲uartz鐨勫寘锛岃繖浜涘氨涓嶆秷澶氳浜嗐€?
鍏跺疄鍙互鐪嬪嚭Quartz鐨勯厤缃湅涓婂幓杩樻槸鎸哄鏉傜殑锛屾病鏈夊姙娉曪紝鍥犱负Quartz鍏跺疄鏄釜閲嶉噺绾х殑宸ュ叿锛屽鏋滄垜浠彧鏄兂绠€鍗曠殑鎵ц鍑犱釜绠€鍗曠殑瀹氭椂浠诲姟锛屾湁娌℃湁鏇寸畝鍗曠殑宸ュ叿锛屾湁锛?
璇风湅鎴戠涓嬫枃Springtask鐨勪粙缁嶃€?


Spring-Task
涓婅妭浠嬬粛浜嗗湪Spring涓娇鐢≦uartz锛屾湰鏂囦粙缁峉pring3.0浠ュ悗鑷富寮€鍙戠殑瀹氭椂浠诲姟宸ュ叿锛宻pringtask锛屽彲浠ュ皢瀹冩瘮浣滀竴涓交閲忕骇鐨凲uartz锛岃€屼笖浣跨敤璧锋潵寰堢畝鍗曪紝闄pring鐩稿叧鐨勫寘澶栦笉闇€瑕侀澶栫殑鍖咃紝
鑰屼笖鏀寔娉ㄨВ鍜岄厤缃枃浠朵袱绉?
褰㈠紡锛屼笅闈㈠皢鍒嗗埆浠嬬粛杩欎袱绉嶆柟寮忋€?
绗竴绉嶏細閰嶇疆鏂囦欢鏂瑰紡
绗竴姝ワ細缂栧啓浣滀笟绫?
鍗虫櫘閫氱殑pojo锛屽涓嬶細

importorg.springframework.stereotype.Service;
@Service
publicclassTaskJob{

publicvoidjob1(){
System.out.println(鈥滀换鍔¤繘琛屼腑銆傘€傘€傗€?;
}
}绗簩姝ワ細鍦╯pring閰嶇疆鏂囦欢澶翠腑娣诲姞鍛藉悕绌洪棿鍙婃弿杩?
xmlns:task="http://www.springframework.org/schema/task"
銆傘€傘€傘€傘€傘€?xsi:schemaLocation="http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsd">绗笁姝ワ細spring閰嶇疆鏂囦欢涓缃叿浣撶殑浠诲姟





璇存槑锛歳ef鍙傛暟鎸囧畾鐨勫嵆浠诲姟绫伙紝method鎸囧畾鐨勫嵆闇€瑕佽繍琛岀殑鏂规硶锛宑ron鍙奵ronExpression琛ㄨ揪寮忥紝鍏蜂綋鍐欐硶杩欓噷涓嶄粙缁嶄簡锛岃鎯呰涓婄瘒鏂囩珷闄勫綍銆?
杩欎釜閰嶇疆涓嶆秷澶氳浜嗭紝spring鎵弿娉ㄨВ鐢ㄧ殑銆?
鍒拌繖閲岄厤缃氨瀹屾垚浜嗭紝鏄笉鏄緢绠€鍗曘€?
绗簩绉嶏細浣跨敤娉ㄨВ褰㈠紡
涔熻鎴戜滑涓嶆兂姣忓啓涓€涓换鍔$被杩樿鍦▁ml鏂囦欢涓厤缃笅锛屾垜浠彲浠ヤ娇鐢ㄦ敞瑙Scheduled锛屾垜浠湅鐪嬫簮鏂囦欢涓娉ㄨВ鐨勫畾涔夛細

@Target({java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceScheduled
{
publicabstractStringcron();

publicabstractlongfixedDelay();

publicabstractlongfixedRate();
}鍙互鐪嬪嚭璇ユ敞瑙f湁涓変釜鏂规硶鎴栬€呭彨鍙傛暟锛屽垎鍒〃绀虹殑鎰忔€濇槸锛?
cron锛氭寚瀹歝ron琛ㄨ揪寮?
fixedDelay锛氬畼鏂规枃妗hВ閲婏細Aninterval-basedtriggerwheretheintervalismeasuredfromthecompletiontimeoftheprevioustask.Thetimeunitvalueismeasuredinmilliseconds.
鍗宠〃绀轰粠涓婁竴涓换鍔″畬鎴愬紑濮嬪埌涓嬩竴涓换鍔″紑濮嬬殑闂撮殧锛屽崟浣嶆槸姣銆?
fixedRate锛氬畼鏂规枃妗hВ閲婏細Aninterval-basedtriggerwheretheintervalismeasuredfromthestarttimeoftheprevioustask.Thetimeunitvalueismeasuredinmilliseconds.
鍗充粠涓婁竴涓换鍔″紑濮嬪埌涓嬩竴涓换鍔″紑濮嬬殑闂撮殧锛屽崟浣嶆槸姣銆?


涓嬮潰鎴戞潵閰嶇疆涓€涓嬨€?
绗竴姝ワ細缂栧啓pojo

importorg.springframework.scheduling.annotation.Scheduled;
importorg.springframework.stereotype.Component;

@Component(鈥渢askJob鈥?
publicclassTaskJob{
@Scheduled(cron="003?")
publicvoidjob1(){
System.out.println(鈥滀换鍔¤繘琛屼腑銆傘€傘€傗€?;
}
}绗簩姝ワ細娣诲姞task鐩稿叧鐨勯厤缃細


xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-3.0.xsd"
default-lazy-init="false">








璇存槑锛氱悊璁轰笂鍙渶瑕佸姞涓?task:annotation-driven/>杩欏彞閰嶇疆灏卞彲浠ヤ簡锛岃繖浜涘弬鏁伴兘涓嶆槸蹇呴』鐨勩€?


Ok閰嶇疆瀹屾瘯锛屽綋鐒秙pringtask杩樻湁寰堝鍙傛暟锛屾垜灏变笉涓€涓€瑙i噴浜嗭紝鍏蜂綋鍙傝€儀sd鏂囨。http://www.springframework.org/schema/task/spring-task-3.0.xsd銆?
闄勫綍锛?
cronExpression鐨勯厤缃鏄庯紝鍏蜂綋浣跨敤浠ュ強鍙傛暟璇风櫨搴oogle

瀛楁鍏佽鍊?鍏佽鐨勭壒娈婂瓧绗?
绉?0-59,-/

鍒?0-59,-/

灏忔椂0-23,-/

鏃ユ湡1-31,-?/LWC

鏈堜唤1-12鎴栬€?JAN-DEC,-/

鏄熸湡1-7鎴栬€?SUN-SAT,-?/LC#

骞达紙鍙€夛級鐣欑┖,1970-2099,-/

-鍖洪棿

閫氶厤绗?

?浣犱笉鎯宠缃偅涓瓧娈?
涓嬮潰鍙緥鍑哄嚑涓紡瀛?


CRON琛ㄨ揪寮?鍚箟

"0012?"姣忓ぉ涓崍鍗佷簩鐐硅Е鍙?

"01510?"姣忓ぉ鏃╀笂10锛?5瑙﹀彂

"01510?"姣忓ぉ鏃╀笂10锛?5瑙﹀彂

"01510?"姣忓ぉ鏃╀笂10锛?5瑙﹀彂

"01510?2005"2005骞寸殑姣忓ぉ鏃╀笂10锛?5瑙﹀彂

"014?"姣忓ぉ浠庝笅鍗?鐐瑰紑濮嬪埌2鐐?9鍒嗘瘡鍒嗛挓涓€娆¤Е鍙?

"00/514?"姣忓ぉ浠庝笅鍗?鐐瑰紑濮嬪埌2锛?5鍒嗙粨鏉熸瘡5鍒嗛挓涓€娆¤Е鍙?

"00/514,18?"姣忓ぉ鐨勪笅鍗?鐐硅嚦2锛?5鍜?鐐硅嚦6鐐?5鍒嗕袱涓椂闂存鍐呮瘡5鍒嗛挓涓€娆¤Е鍙?

"00-514?"姣忓ぉ14:00鑷?4:05姣忓垎閽熶竴娆¤Е鍙?

"010,4414?3WED"涓夋湀鐨勬瘡鍛ㄤ笁鐨?4锛?0鍜?4锛?4瑙﹀彂

"01510?MON-FRI"姣忎釜鍛ㄤ竴銆佸懆浜屻€佸懆涓夈€佸懆鍥涖€佸懆浜旂殑10锛?5瑙﹀彂




1銆丩istener鐨勫畾涔変笌浣滅敤

銆€銆€鐩戝惉鍣↙istener灏辨槸鍦╝pplication,session,request涓変釜瀵硅薄鍒涘缓銆侀攢姣佹垨鑰呭線鍏朵腑娣诲姞淇敼鍒犻櫎灞炴€ф椂鑷姩鎵ц浠g爜鐨勫姛鑳界粍浠躲€?
銆€銆€Listener鏄疭ervlet鐨勭洃鍚櫒锛屽彲浠ョ洃鍚鎴风鐨勮姹傦紝鏈嶅姟绔殑鎿嶄綔绛夈€?
2銆丩istener鐨勫垎绫讳笌浣跨敤

銆€銆€涓昏鏈変互涓嬩笁绫伙細

銆€銆€1銆丼ervletContext鐩戝惉

銆€銆€ServletContextListener锛氱敤浜庡Servlet鏁翠釜涓婁笅鏂囪繘琛岀洃鍚紙鍒涘缓銆侀攢姣侊級銆?
publicvoidcontextInitialized(ServletContextEventsce);//涓婁笅鏂囧垵濮嬪寲
publicvoidcontextDestroyed(ServletContextEventsce);//涓婁笅鏂囬攢姣?
publicServletContextgetServletContext();//ServletContextEvent浜嬩欢锛氬彇寰椾竴涓猄ervletContext锛坅pplication锛夊璞°€€銆€ServletContextAttributeListener锛氬Servlet涓婁笅鏂囧睘鎬х殑鐩戝惉锛堝鍒犳敼灞炴€э級銆?

publicvoidattributeAdded(ServletContextAttributeEventscab);//澧炲姞灞炴€?publicvoidattributeRemoved(ServletContextAttributeEventscab);//灞炴€у垹闄?publicvoidattributeRepalced(ServletContextAttributeEventscab);//灞炴€ф浛鎹紙绗簩娆¤缃悓涓€灞炴€э級

//ServletContextAttributeEvent浜嬩欢锛氳兘鍙栧緱璁剧疆灞炴€х殑鍚嶇О涓庡唴瀹?publicStringgetName();//寰楀埌灞炴€у悕绉?publicObjectgetValue();//鍙栧緱灞炴€х殑鍊笺€€銆€2銆丼ession鐩戝惉

銆€銆€Session灞炰簬http鍗忚涓嬬殑鍐呭锛屾帴鍙d綅浜巎avax.servlet.http.鍖呬笅銆?
銆€銆€HttpSessionListener鎺ュ彛锛氬Session鐨勬暣浣撶姸鎬佺殑鐩戝惉銆?
publicvoidsessionCreated(HttpSessionEventse);//session鍒涘缓
publicvoidsessionDestroyed(HttpSessionEventse);//session閿€姣?
//HttpSessionEvent浜嬩欢锛?publicHttpSessiongetSession();//鍙栧緱褰撳墠鎿嶄綔鐨剆ession銆€銆€HttpSessionAttributeListener鎺ュ彛锛氬session鐨勫睘鎬х洃鍚€?

publicvoidattributeAdded(HttpSessionBindingEventse);//澧炲姞灞炴€?publicvoidattributeRemoved(HttpSessionBindingEventse);//鍒犻櫎灞炴€?publicvoidattributeReplaced(HttpSessionBindingEventse);//鏇挎崲灞炴€?
//HttpSessionBindingEvent浜嬩欢锛?publicStringgetName();//鍙栧緱灞炴€х殑鍚嶇О
publicObjectgetValue();//鍙栧緱灞炴€х殑鍊?publicHttpSessiongetSession();//鍙栧緱褰撳墠鐨剆ession銆€銆€session鐨勯攢姣佹湁涓ょ鎯呭喌锛?
銆€銆€1銆乻ession瓒呮椂锛寃eb.xml閰嶇疆锛?

120



org.springframework.web.context.ContextLoaderListener
銆€銆€3銆丼pring浣跨敤Log4jConfigListener閰嶇疆Log4j鏃ュ織

銆€銆€Spring浣跨敤Log4jConfigListener鐨勫ソ澶勶細

1.鍔ㄦ€佺殑鏀瑰彉璁板綍绾у埆鍜岀瓥鐣ワ紝涓嶉渶瑕侀噸鍚疻eb搴旂敤銆?2.鎶妉og鏂囦欢瀹氬湪/WEB-INF/logs/鑰屼笉闇€瑕佸啓缁濆璺緞銆傚洜涓虹郴缁熸妸web鐩綍鐨勮矾寰勫帇鍏ヤ竴涓彨webapp.root鐨勭郴缁熷彉閲忋€傝繖鏍峰啓log鏂囦欢璺緞鏃朵笉鐢ㄥ啓缁濆璺緞浜嗐€?3.鍙互鎶妉og4j.properties鍜屽叾浠杙roperties涓€璧锋斁鍦?WEB-INF/锛岃€屼笉鏄疌lass-Path銆?4.璁剧疆log4jRefreshInterval鏃堕棿锛屽紑涓€鏉atchdog绾跨▼姣忛殧娈垫椂闂存壂鎻忎竴涓嬮厤缃枃浠剁殑鍙樺寲銆?

webAppRootKey
project.root


log4jConfigLocation
classpath:log4j.properties


log4jRefreshInterval
60000



org.springframework.web.util.Log4jConfigListener
銆€銆€4銆丼pring浣跨敤IntrospectorCleanupListener娓呯悊缂撳瓨

銆€銆€杩欎釜鐩戝惉鍣ㄧ殑浣滅敤鏄湪web搴旂敤鍏抽棴鏃跺埛鏂癑DK鐨凧avaBeans鐨処ntrospector缂撳瓨锛屼互纭繚Web搴旂敤绋嬪簭鐨勭被鍔犺浇鍣ㄤ互鍙婂叾鍔犺浇鐨勭被姝g‘鐨勯噴鏀捐祫婧愩€?
銆€銆€濡傛灉JavaBeans鐨処ntrospector宸茶鐢ㄦ潵鍒嗘瀽搴旂敤绋嬪簭绫伙紝绯荤粺绾х殑Introspector缂撳瓨灏嗘寔鏈夎繖浜涚被鐨勪竴涓‖寮曠敤銆傚洜姝わ紝杩欎簺绫诲拰Web搴旂敤绋嬪簭鐨勭被鍔犺浇鍣ㄥ湪Web搴旂敤绋嬪簭鍏抽棴鏃跺皢涓嶄細琚瀮鍦炬敹闆嗗櫒鍥炴敹锛佽€孖ntrospectorCleanupListener鍒欎細瀵瑰叾杩涜閫傚綋鐨勬竻鐞嗭紝宸蹭娇鍏惰兘澶熻鍨冨溇鏀堕泦鍣ㄥ洖鏀躲€?
銆€銆€鍞竴鑳藉娓呯悊Introspector鐨勬柟娉曟槸鍒锋柊鏁翠釜Introspector缂撳瓨锛屾病鏈夊叾浠栧姙娉曟潵纭垏鎸囧畾搴旂敤绋嬪簭鎵€寮曠敤鐨勭被銆傝繖灏嗗垹闄ゆ墍鏈夊叾浠栧簲鐢ㄧ▼搴忓湪鏈嶅姟鍣ㄧ殑缂撳瓨鐨処ntrospector缁撴灉銆?
銆€銆€鍦ㄤ娇鐢⊿pring鍐呴儴鐨刡ean鏈哄埗鏃讹紝涓嶉渶瑕佷娇鐢ㄦ鐩戝惉鍣紝鍥犱负Spring鑷繁鐨刬ntrospectionresultscache灏嗕細绔嬪嵆鍒锋柊琚垎鏋愯繃鐨凧avaBeansIntrospectorcache锛岃€屼粎浠呬細鍦ㄥ簲鐢ㄧ▼搴忚嚜宸辩殑ClassLoader閲岄潰鎸佹湁涓€涓猚ache銆傝櫧鐒禨pring鏈韩涓嶄骇鐢熸硠婕忥紝娉ㄦ剰锛屽嵆浣垮湪Spring妗嗘灦鐨勭被鏈韩椹荤暀鍦ㄤ竴涓€滃叡鍚屸€濈被鍔犺浇鍣紙濡傜郴缁熺殑ClassLoader锛夌殑鎯呭喌涓嬶紝涔熶粛鐒跺簲璇ヤ娇鐢ㄤ娇鐢↖ntrospectorCleanupListener銆傚湪杩欑鎯呭喌涓嬶紝杩欎釜IntrospectorCleanupListener灏嗕細濡ュ杽娓呯悊Spring鐨刬ntrospectioncache銆?
銆€銆€搴旂敤绋嬪簭绫伙紝鍑犱箮涓嶉渶瑕佺洿鎺ヤ娇鐢↗avaBeansIntrospector锛屾墍浠ワ紝閫氬父閮戒笉鏄疘ntrospectorresource閫犳垚鍐呭瓨娉勯湶銆傜浉鍙嶏紝璁稿搴撳拰妗嗘灦锛屼笉娓呯悊Introspector锛屼緥濡傦細Struts鍜孮uartz銆?
銆€銆€闇€瑕佹敞鎰忕殑鏄竴涓畝鍗旾ntrospector娉勬紡灏嗕細瀵艰嚧鏁翠釜Web搴旂敤绋嬪簭鐨勭被鍔犺浇鍣ㄤ笉浼氳鍥炴敹锛佽繖鏍峰仛鐨勭粨鏋滐紝灏嗕細鏄湪web搴旂敤绋嬪簭鍏抽棴鏃讹紝璇ュ簲鐢ㄧ▼搴忔墍鏈夌殑闈欐€佺被璧勬簮锛堟瘮濡傦細鍗曞疄渚嬪璞★級閮芥病鏈夊緱鍒伴噴鏀俱€傝€屽鑷村唴瀛樻硠闇茬殑鏍规湰鍘熷洜鍏跺疄骞朵笉鏄繖浜涙湭琚洖鏀剁殑绫伙紒

銆€銆€娉ㄦ剰锛欼ntrospectorCleanupListener搴旇娉ㄥ唽涓簑eb.xml涓殑绗竴涓狶istener锛屽湪浠讳綍鍏朵粬Listener涔嬪墠娉ㄥ唽锛屾瘮濡傚湪Spring''sContextLoaderListener娉ㄥ唽涔嬪墠锛屾墠鑳界‘淇滻ntrospectorCleanupListener鍦╓eb搴旂敤鐨勭敓鍛藉懆鏈熼€傚綋鏃舵満鐢熸晥銆?


org.springframework.web.util.IntrospectorCleanupListener
献花(0)
+1
(本文系关平藏书首藏)