Выполнение метода из другого класса в Java & # 8230; и больше

StackOverflow https://stackoverflow.com/questions/1605630

  •  05-07-2019
  •  | 
  •  

Вопрос

У меня есть метод, который возвращает список элементов с именем 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;
        }

Теперь вот что я хотел бы сделать. Мне нужно запустить этот метод выше, основанный на некотором количестве времени (которое я мог бы указать в любое время). Мне нужно создать бин внутри XML-файла фабрики бинов, который на самом деле создает экземпляр этого планировщика и вызывает этот метод, и я попытался сделать это, вызвав CronJob.java из CronScheldule.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: вот что я пытаюсь сделать простыми словами, я хочу выполнять метод findItemByPIdEndDate () из класса MngtImpl каждую минуту, скажем так. Метод работает правильно, я написал тест, и он проходит его. Так что мне теперь делать? Спасибо

Это было полезно?

Решение

Просто указатель, так как я не мог многое сделать с помощью трассировки стека, но, похоже, проблема в pers.findItemByPIdEndDate (); , поскольку код работает нормально, когда я заменяю материал Hibernate на простой Java-класс.

Также я предоставил шаблон CronTrigger как 0/5 * * * *? , чтобы запускать его каждые 5 секунд. Ваш текущий шаблон не запускает работу вообще.

Посмотрите, поможет ли это.

Другие советы

Если проблема заключается в периодическом выполнении задачи (я не совсем уверен), я предлагаю использовать ScheduledExecutorService, который является частью JDK 1.5 и более поздних версий:

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