닝뇽냥뇽
251
2019-06-26 13:10:56
2
903

자바 파일을 웹 서버가 시작될 때 자동으로 돌아가게 할려고 하는데 오류가 납니다. (java.lang.ClassNotFoundException))


쿼츠를 사용해서 일정 주기마다 돌아가도록 만들고 그것을 웹 서버가 시작될 때 자동으로 실행되도록 설정했습니다. 근데 이런 오류가 나네요..

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 오류가 나는지 모르겠네요..

0
  • 답변 2

  • Frudy
    7k
    2019-06-26 13:20:16

    저도 궁금해서 와드박아봅니다.


    다만 제가 궁금한건,

    java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

    못찾은 클래스는 저거라고 나오는대...


    알려주신 클래스는 QuartzCronTrigger_back 이네요.


    저도 이 버그의 원인이 궁금합니다.

  • lloydkwon
    2k
    2019-06-26 13:37:57

    org.slf4j.LoggerFactory 클래스는 로깅과 관련된 클래스 입니다.

    톰켓에 클래스 패스에 slf4j-api.jar 와 그 구현체가 있어야 해요...


    자바로 돌리실 때 클래스패스에 보면 해당 라이브러리가 있을 겁니다.


    프로젝트 관리는 maven 으로 하시나요? 

    그걸로 하면 war 로 묶을 때에 알아서 묶어줘서 딱히 이런 문제가 발생하지는 않을 겁니다.





  • 로그인을 하시면 답변을 등록할 수 있습니다.