在Spring MVC中我們往往想要程序初始化的時候就能啟動某一個線程來做某些工作,具體步驟如下:
1,在Spring MVC中想要啟動某個class下的方法,在web.xml文件中這樣配置,在啟動server時默認地會執行
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.siemens.wos.wp3.dapf.startup.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
2,我們將線程的start()函數寫在InitServlet類中
private ServerStatusWatcherThread serverstatusmonitorThread;
public final void init() throws ServletException {
//Start ServerStatusWatcher Thread
if (serverstatusmonitorThread == null) {
serverstatusmonitorThread = new ServerStatusWatcherThread();
serverstatusmonitorThread.start();
}
}
3,繼承Thread類,重寫run()方法
public class ServerStatusWatcherThread extends Thread {
@Override
public void run(){
//what do you want to do please write here
}
}
4,如果想要在run()方法中調用dao層或者service層,常規的方法應該是這樣
public class ServerStatusWatcherThread extends Thread {
@Resource(name="servermanageDao")
ServerManagementMapper servermanageDao;
@Autowired
ServerManagementService serverservice;
@Override
public void run(){
List<ServerManagementItem> servers =servermanageDao.getAll();
serverservice.QuerySOSServer();
//what do you want to do please write here
}
}
結果會報如下異常:Exception in thread "Thread-3" java.lang.NullPointerException
5,解決方法可以用getBean的方式來解決這個問題,異常解決
public class ServerStatusWatcherThread extends Thread {
//@Resource(name="servermanageDao")
//ServerManagementMapper servermanageDao;
//改成
ServerManagementMapper servermanageDao=(ServerManagementMapper) SpringContextUtil.getBean("servermanageDao");
//@Autowired
//ServerManagementService serverservice;
//改成:
ServerManagementService servemanagementService=(ServerManagementService) SpringContextUtil.getBean("servemanagementService");
@Override
public void run(){
List<ServerManagementItem> servers =servermanageDao.getAll();
serverservice.QuerySOSServer();
//what do you want to do please write here
}
}