我需要在服務器啓動後立即運行一些代碼。我使用ServletContextListener,它運行良好,但是...它在服務器啓動之前運行代碼。因爲我得到了服務器上的超時異常,因爲它無法啓動,因爲我的方法仍在運行。增加超時時間毫無意義,因爲此方法需要大約1小時。我該怎麼辦?春季4 - 服務器啓動後的運行方法
2
A
回答
2
您可以使用ApplicationListener
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
public void onApplicationEvent(final ContextRefreshedEvent event) {
ApplicationContext ctx = event.getApplicationContext();
(new Thread() {
public void run() {
// do stuff
}
}).start();
}
}
只需註冊,作爲一個Spring bean。正如評論中所建議的那樣,您可以在另一個線程上執行代碼。
3
爲了更清晰起見,您可以這樣做@PostConstruct。把下面的代碼放在你配置spring中定義的singleton bean的任何一箇中。有關更多細節,請閱讀Postconstruct的工作原理和方式。這應該可以幫助您在服務器啓動後加載異步。
public class singletonBeanConfig{
SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor();
private class SampleConfigurator implements Runnable {
@Override
public void run() {
// run you process here.
}
}
@PostConstruct
public final void initData() {
// this will be executed when the config singleton is initialized completely.
this.simpleAsyncTaskExecutor.execute(new SampleConfigurator());
}
}
相關問題
- 1. 春季服務器啓動事件
- 2. 春季安全春季啓動4.x
- 3. 春季啓動註冊服務器(尤里卡服務器)
- 4. 錯誤,同時啓動春季啓動尤里卡服務器
- 5. 春季啓動內置tomcat服務器不啓動
- 6. 春季啓動+春季LDAP +服務帳戶+錯誤憑證
- 7. 服務索引頁與春季啓動
- 8. 春季啓動失敗與REST服務
- 9. REST API和Web服務春季啓動
- 10. 春季啓動SOAP Web服務與MVC
- 11. 不能在春季啓動服務
- 12. 測試不後的IntelliJ自動啓動春季服務
- 13. 春季啓動/春雲 - 尤里卡服務器
- 14. 春季工具套件vs intellij運行春季啓動項目
- 15. 候補MVN春季啓動:運行
- 16. 春季啓動Maven插件 - 春季啓動:運行和正常關機
- 17. 春季啓動啓動器安全郵政方法不工作
- 18. 春季啓動應用程序將無法在Tomcat服務器上啓動
- 19. 不支持請求方法'POST'。 500內部服務器錯誤春季啓動
- 20. 春季啓動如何調用方法
- 21. 部署Maven的春季啓動項目的服務器離線
- 22. 在春季啓動器
- 23. 春季啓動Activiti執行
- 24. 在春季4
- 25. @Repository春季4
- 26. 春季啓動 - 啓動
- 27. 春季啓動服務器不斷打Postgres連接限制
- 28. 春季啓動1.4.2.RELEASE與尤里卡服務器 - 例外:org.springframework.beans.factory.NoSuchBeanDefinitionException
- 29. 春季啓動尤里卡服務器儀表板錯誤
- 30. 春季啓動,如何訪問碼頭服務器實例?
如果問題是該方法需要1小時才能執行,請在不同的線程中異步運行它。 – 2015-02-09 17:49:29
這不是問題。問題是如何告訴Spring在服務器啓動時執行此代碼。 – user2455862 2015-02-09 17:58:40
你可以在@PostConstruct註釋的方法中運行它嗎?您可以通過從註釋方法調用runnable來異步運行它。 – minion 2015-02-09 18:21:35