亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何防止服務在 Catalina 啟動之前才啟動

如何防止服務在 Catalina 啟動之前才啟動

守著一只汪 2023-08-04 16:35:44
我有一個在 Apache Tomcat 9 上運行的 JAX-WS 客戶端。該客戶端通過進入無限循環來輪詢數據,并設置為在啟動時加載的 servlet。我遇到的問題是 servlet 在 Catalina 完成啟動之前啟動并進入循環。我嘗試使用 sleep() 和 wait() 無濟于事,我嘗試實現 org.apache.catalina.LifecycleListener 但這也不起作用。這是我的 servlet 類:@WebServlet("/MyClient")public class MyServlet extends HttpServlet {    @Override    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    }    @Override    public void init() throws ServletException {        System.out.println("Servlet Started");        MyClient client = new MyClient();        client.startClient();    }}這是我的民意調查課程:public class Polling {    private static final int TWO_MINUTES = 120000;    public void startPoll() throws IOException {        for (;;) {            //Do something            try {                Thread.sleep(TWO_MINUTES);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}我期望在 XXXX 毫秒內看到 org.apache.catalina.startup.Catalina.start 服務器啟動,然后我的程序打印“Servlet Started”,但是它首先啟動 servlet,這使得 tomcat 掛起并阻止訪問其他 Web 應用程序。
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

您不會看到服務器啟動,因為您劫持了初始化線程并開始用它進行輪詢。服務器將在您的 servlet 初始化后啟動,但它永遠不會完成初始化,因為您調用它startPoll()并且init()它永遠不會返回。

不要使用無限循環和手動 2 分鐘睡眠的手工輪詢,而是考慮調度,例如使用Quartz或至少一個ScheduledExecutorService,這是一個基于 Tomcat 的示例。


查看完整回答
反對 回復 2023-08-04
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號