quartz工程容器啟動與 Service注入

2021-10-10 05:42:36 字數 2190 閱讀 8482

容器啟動

或者,怎麼在 spring啟動完成的時候做一些事情?

建立乙個類,實現 commandlinerunner介面,實現 run方法。

從表中查出狀態是 1的任務,然後構建。

service類注入到 job中

spring bean如何注入到實現了job介面的類中?

例如在 testtask3中,需要注入 isysjobservice,查詢資料庫傳送郵件。

如果沒有任何配置,注入會報空指標異常。

原因:因為定時任務 job物件的例項化過程是在 quartz中進行的,而 service bean是由spring容器管理的,quartz察覺不到 

service bean的存在,所以無法將 service bean裝配到 job物件中。

分析:quartz整合到 spring中,用到 schedule***ctorybean,其實現了 initializingbean方法,在唯一的方法 

afterpropertiesset()在 bean的屬性初始化後呼叫。

排程器用 adaptablejobfactory對 job物件進行例項化。所以,如果我們可以把這個 jobfactory指定為我們自定義的工廠的話,就可以在 

job例項化完成之後,把 job納入到 spring容器中管理。

解決這個問題的步驟:

1、定義乙個 adaptablejobfactory,實現 jobfactory介面,實現介面定義的newjob方法,在這裡面返回 job例項

2、定義乙個 myjobfactory,繼承 adaptablejobfactory。使用 spring的 autowirecapablebeanfactory,把 job例項注入到容器中。 

/**

* * 將spring的物件注入到quartz job 2

*/@component

public class myjobfactory extends adaptablejobfactory

}

指定 scheduler的 jobfactory為自定義的 jobfactory。

/**

* 這個類用於啟動springboot時,載入作業。run方法會自動執行。

* **/@component

public class initstartschedule implements commandlinerunner

// 通過schedule***ctory獲取乙個排程器例項

schedule***ctory sf = new stdschedule***ctory();

scheduler scheduler = sf.getscheduler();

// 如果不設定jobfactory,service注入到job會報空指標

scheduler.setjobfactory(myjobfactory);

// 啟動排程器

scheduler.start();

for (sysjob sysjob:joblist)

}//表示式排程構建器(即任務執行的時間)

cronschedulebuilder schedulebuilder = cronschedulebuilder.cronschedule(sysjob.getjobcron());

//按新的cronexpression表示式構建乙個新的trigger

crontrigger trigger = triggerbuilder.newtrigger().withidentity(jobclassname, jobgroupname)

.withschedule(schedulebuilder).startnow().build();

// 任務不存在的時候才新增

if( !scheduler.checkexists(jobdetail.getkey()) ) catch (schedulerexception e)

}} }

public static basejob getclass(string classname) throws exception

}

scheduler.setjobfactory(myjobfactory);

考慮這麼一種情況:

正在執行的 quartz節點掛了,而所有人完全不知情……

Docker 啟動與停止容器

啟動已執行過的容器 docker start 容器名稱 容器id如 docker start mycentos 啟動所有執行過的容器 注意 反單引號 docker ps a q 是查詢所有執行過的容器id 停止正在執行的容器 正常停止 docker stop 容器名稱 容器id如 docker st...

docker容器的啟動與停止

第一種 通過映象啟動乙個新的容器 1 首先執行 sudo docker ps a 檢視本地docker容器的情況 可以看到此時本地是沒有容器的!2 然後使用本地的映象啟動乙個新的容器 先執行 sudo docker images 檢視本地的映象 再根據映象啟動乙個容器 sudo docker run...

docker啟動 關閉命令 容器啟動與關閉命令

docker啟動命令,docker重啟命令,docker關閉命令 啟動 systemctl start docker 守護程序重啟 sudo systemctl daemon reload 重啟docker服務 systemctl restart docker 重啟docker服務 sudo ser...