문제

FindItemBypidendDate ()라는 항목 목록과 mngtimpl.java 클래스 내부에있는 항목 목록을 반환하는 메소드가 있습니다. 이제 나는이 방법을 가끔씩 실행하고 싶다. 시간별로 여기서 내가 한 일이있다.

이것은 cronschedule.java입니다

import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.JobDetail;

public class CronSchedule {
  public CronSchedule ()throws Exception {
    SchedulerFactory sf=new StdSchedulerFactory();
    Scheduler sched=sf.getScheduler();
    JobDetail jd=new JobDetail("job1","group1",CronJob.class);
    CronTrigger ct=new CronTrigger("cronTrigger","group2","0 * * * * ?");
    sched.scheduleJob(jd,ct);
    sched.start();
  }
  public static void main(String args[]){
    try{    
        new CronSchedule();          //Class where cron is created
    }catch(Exception e){}
  }                                 
}

이제 이것으로 문제가 있습니다. 이 클래스는 시간 제약 (* 괄호 안에서)을 기준으로 위의 클래스에서 호출되며 mngtimpl 클래스의 메소드를 실행합니다.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.rosa.MngtImpl;

public class CronJob implements Job  {
  public void execute(JobExecutionContext arg0) throws JobExecutionException {
          try {
                  MngtImpl pers = new MngtImpl();
                  pers.findItemByPIdEndDate();
        } catch (Exception e) {

                e.printStackTrace();
        }
  }
}

위의 클래스에서 호출하려는 방법은 다음과 같습니다. 이 방법은 mngtimpl.java라는 클래스 내에서 발견됩니다

 public List<Long> findItemByPIdEndDate() throws Exception {

                List<Long> list = null;

                try{
                        Session session = sessionFactory.getCurrentSession();   
                        Query query = session.getNamedQuery("endDateChecker");
                        list = query.list();

                }catch (HibernateException e){
                        throw new DataAccessException(e.getMessage());
                }

                return list;
        }

이제 내가하고 싶은 일이 있습니다. 어느 정도 (언제든지 지정할 수 있음)에 따라이 위의 방법을 실행해야합니다. 실제로이 스케줄러를 인수 하고이 메소드를 호출하는 Bean Factory XML 파일 내부에서 Bean을 만들어야하며 Cronscheldule.java에서 Cronjob.java를 호출하여 다른 클래스에서 메소드를 호출하고 작동하는지 여부를 만들었습니다.

<bean id="cronSchedule" class="com.mypackage.CronSchedule">
        </bean>

그러나 예상대로 작동하지 않고 꽤 복잡합니다. 코드에 대한 도움을받을 수 있습니까? 고맙습니다

다음과 같은 예외가 발생합니다.

java.lang.NullPointerException 11:10:46,410 ERROR [STDERR]
   at com.packftc.RulesManager.exception(RulesManager.java:25) 11:10:46,410 ERROR [STDERR]
   at org.drools.agent.RuleAgent$2.run(RuleAgent.java:442) 11:10:46,410 ERROR [STDERR]
   at java.util.TimerThread.mainLoop(Unknown Source) 11:10:46,410 ERROR [STDERR]
   at java.util.TimerThread.run(Unknown Source)

이것은 지금까지 Zilion처럼 시도한 것과 같은 잘못된 방법입니다. 여기에 간단한 단어로 내가하려는 일이 있습니다. mngtimpl 클래스에서 finditembypidenddate () 메소드를 실행하고 싶습니다. 메소드가 제대로 작동합니다. 테스트를 작성하고 통과합니다. 그래서 지금 무엇을합니까? 고맙습니다

도움이 되었습니까?

해결책

스택 추적으로 많이 만들 수 없었기 때문에 포인터 일뿐 아니라 문제가 pers.findItemByPIdEndDate(); 최대 절전 모드를 일반 Java 클래스로 교체 할 때 코드가 잘 작동하기 때문에 코드는 제대로 작동하기 때문입니다.

또한 Crontrigger 패턴을 제공했습니다 0/5 * * * * ? 따라서 5 초당 실행합니다. 현재 패턴은 작업을 전혀 해고하지 않습니다.

이것이 도움이되는지 확인하십시오.

다른 팁

작업을 정기적으로 실행하는 것이 여기서 문제가되는 경우 (확실하지 않습니다) JDK 1.5 이상의 일부인 ScheduleDexecutorService를 사용하는 것이 좋습니다.

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SchedulerExample {

private ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

public void activateHourlyDataRetrieval() {

        Runnable dataRetriever = new Runnable() {

           MngtImpl pers = new MngtImpl();

           public void run() {

               pers.findItemByPIdEndDate();

            }
         };

        scheduler.scheduleAtFixedRate(dataRetriever, 0, 1, TimeUnit.HOURS);
}
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top