3

プレーンな.javaクラスが1つあります。そのクラスではTimer、タスクをスケジュールするために、クラススケジュールメソッドを使用しています。

問題は、Java EEアプリケーションを使用していることであり、このクラスをインスタンス化する場所がわかりません。サーブレットまたはそのようなものから?アプリケーションが起動したときに、そのクラスを1回だけインスタンス化したいと思います。

4

3 に答える 3

4

おそらくServletContextListenerとそのメソッドが必要contextInitialized(..)です。アプリケーションが初期化されるときに一度呼び出されます。

リスナーをweb.xmlのいずれか@WebListenerまたはでマップします<listener><listener-class>..</...>

于 2012-04-23T20:24:08.510 に答える
1
 public class YourServlet extends HttpServlet {
 private YourClass instance;

 public void init() throws ServletException {
      instance = new YourClass();
 }
 //code
 }

initメソッドでクラスをインスタンス化することにより、クラスが1回だけインスタンス化されるようになります。これは、Java EEアプリケーションでは、サーブレットがサーバーメモリに1回だけロードされるためです。

于 2012-04-23T20:32:31.167 に答える
0

Quartz(一般的なスケジューラー)では、load-on-startup属性をtrueに設定してサーブレットのinitメソッドでジョブを構成するのが一般的な方法です。

この記事から、web.xmlで次のことを行う必要があります。

<servlet>
    <servlet-name>QuartzInitializer</servlet-name>
    <display-name>Quartz Initializer Servlet</display-name>
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

次に、サーブレットでジョブを構成します。

public class QuartzServlet extends GenericServlet {
    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    // And continue with your configuration

PS:クォーツを使用することを強くお勧めします

于 2012-04-23T20:56:06.793 に答える