쿼츠를 사용해서 일정 주기마다 돌아가도록 만들고 그것을 웹 서버가 시작될 때 자동으로 실행되도록 설정했습니다. 근데 이런 오류가 나네요..
6월 26, 2019 1:03:45 오후 org.apache.catalina.core.StandardWrapperValve invoke
심각: Servlet.service() for servlet [MainController] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1955)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1798)
at org.quartz.impl.StdSchedulerFactory.<init>(StdSchedulerFactory.java:284)
at org.apache.jsp.jsp.automail.QuartzCronTrigger_back.run(QuartzCronTrigger_back.java:47)
at or.kr.kama.Main.MainController.service(MainController.java:43)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at filters.KamaFilter.doFilter(KamaFilter.java:23)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:121)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
자바 어플리케이션으로 돌릴 때는 잘 돌아가는데 웹에서 돌릴려고 하니깐 오류가 나요 ㅠㅠ..
↓이것은 제가 쿼츠를 사용해서 만든 것 입니다.
package org.apache.jsp.jsp.automail;
/** * Quartz+CronTrigger * Created by cjred77@gmail.com on 2014-10-24. */
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletContext;
import static org.quartz.CronScheduleBuilder.*;
public class QuartzCronTrigger_back extends Thread {
public void run() {
try {
// Grab the Scheduler instance from the Factory
System.out.println("mailScheduler ");
System.out.println("StdSchedulerFactory.getDefaultScheduler() " );
/*
* StdSchedulerFactory.getDefaultScheduler(); Scheduler scheduler =
* StdSchedulerFactory.getDefaultScheduler();
*/
// 프로퍼티 파일 위치
String propFile = "C:\\Users\\Administrator\\Desktop\\kama1\\kama\\WEB-INF\\quartz.properties";
// 프로퍼티 객체 생성
Properties props = new Properties();
// 프로퍼티 파일 스트림에 담기
FileInputStream fis = null;
props.load(new FileInputStream(propFile));
System.out.println("props : " + props);
StdSchedulerFactory factory = new StdSchedulerFactory();
factory.initialize(new FileInputStream(propFile));
Scheduler scheduler = factory.getScheduler();
// and start it off
scheduler.start();
// define the job and tie it to our HelloJob class
JobDetail job = newJob(MyJob.class) .withIdentity("job1", "group1") .build();
// Trigger the job to run now, ss mm hh dd MM Week
Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .withSchedule(cronSchedule("0 0 0 * * ?")) .build();
// Tell quartz to schedule the job using out trigger
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException se) {
se.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
↓이것은 제가 서버가 시작될 때 실행되라고 해둔 것입니다.
QuartzCronTrigger_back qct = new QuartzCronTrigger_back();
qct.run();
도대체 왜 ClassNotFoundException 오류가 나는지 모르겠네요..