Кварцевый метод execute, не обращающийся к другому классу или компонентам - PullRequest
0 голосов
/ 19 сентября 2018

Извините, если при написании сообщения об ошибке я создал приложение весенней загрузки с кварцевым планировщиком. Моя проблема в том, что метод execute кварца не обращается к внешнему классу или бинам, он всегда возвращает ноль, и задание прекращается.

@Component
public class Sample1 implements ApplicationContextAware,ServletContextListener{
         private static ApplicationContext CONTEXT;
         private static StdSchedulerFactory factory = null;
         private static Scheduler sch;

     public void setApplicationContext(ApplicationContext context) throws BeansException {

          CONTEXT = context;
       }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        factory = new StdSchedulerFactory();
       try {
          sch=factory.getScheduler();
          sch.start();
        } catch (SchedulerException e) {
        // TODO Auto-generated catch block 
        }
   }

   @Override
   public void contextDestroyed(ServletContextEvent sce) {
     // TODO Auto-generated method stub
     contextDestroyed();
   }
}

Это простой код для запуска кварцевого планировщика, и он запускается, и задание также запускается и начинает выполняться не в методе execute

@PersistJobDataAfterExecution
public class TempExecutionJob implements Job,InterruptableJob{
  @Override
     public void execute(JobExecutionContext context) throws 
                                                     JobExecutionException {
     String ss=OtherClass.val1;
     System.out.println(ss);

    }
  }

Здесь OtherClass - это простой Java-класс, который имеет одну статическую переменную val1, значение которойустанавливается при запуске сервера, но при выполнении задания он всегда печатает ноль, а в режиме отладки при наведении указывается значение, но при выполнении оно принимает значение ноль, я не понимаю, почему это происходит, пожалуйста, если кто-то может помочь

1 Ответ

0 голосов
/ 21 сентября 2018

Я настоятельно рекомендую следовать советам Бориса в чате.Переместив свойство в application.yaml, вы сможете получить к нему доступ после инициализации весеннего контекста в вашей работе, используя SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...