Tomcat サーバー用に Quartz スケジューラーをセットアップし、サーバーを数回再始動しました。
スケジューラーは次のようなエラーを出し始めました (非常に頻繁に - 30 秒ごと):
DEBUG org.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers
log4j:ERROR Error occured while converting date.
java.lang.NullPointerException
at java.lang.System.arraycopy(Native Method)
at java.lang.AbstractStringBuilder.getChars(AbstractStringBuilder.java:328)
at java.lang.StringBuffer.getChars(StringBuffer.java:201)
at org.apache.log4j.helpers.ISO8601DateFormat.format(ISO8601DateFormat.java:130)
at java.text.DateFormat.format(DateFormat.java:316)
at org.apache.log4j.helpers.PatternParser$DatePatternConverter.convert(PatternParser.java:444)
at org.apache.log4j.helpers.PatternConverter.format(PatternConverter.java:65)
at org.apache.log4j.PatternLayout.format(PatternLayout.java:502)
at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:302)
at org.apache.log4j.WriterAppender.append(WriterAppender.java:160)
at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
at org.apache.log4j.Category.callAppenders(Category.java:206)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.log(Category.java:856)
at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:209)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:268)
問題は解決したと思いますが、別の問題に直面しています。Tomcat を再起動した最初の数回は、Quartz スケジューラをシャットダウンしていませんでした。ここで、次のコードをスケジューラに追加しました。
public class QuartzListener implements ServletContextListener {
private Scheduler scheduler;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
if (scheduler != null) {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
...
}
これにより、新しい Quartz インスタンスが停止しているように見えますが、古いものは同じ古いエラーを記録し続けます。だから私の質問は次のとおりです: 誤って正常に停止するのを忘れたクォーツインスタンスを停止するにはどうすればよいshutdown()
ですか?
Linux で実行していますが、実行時にクォーツ プロセス/デーモンが表示されませんでしたps aux
。