#java #spring #spring-mvc #cron #spring-el
#java #spring #spring-mvc #cron #spring-el
Вопрос:
У меня есть несколько задач cron, которые выполняются с разными интервалами, и у всех из них есть некоторые общие задачи, которые я хотел выполнить в суперклассе (абстрактном) и предоставил пару абстрактных методов, которые должны быть реализованы дочерними классами. Из этих методов, getCronExpr
, является одним методом, который должен быть реализован дочерним классом и возвращать соответствующее выражение cron. Это то, что я делаю для достижения этой цели:
public abstract class AbstractTask{
@Scheduled(cron="#{@this.getCronExpr()}")
public void run(){
System.out.println("cron execution started");
}
public abstract String getCronExpr();
}
@Component
@EnableScheduling
@EnableAsync
public MyTask1 extends AbstractTask{
@Override
public String getCronExpr() {
logger.info("inside getCronExpr method");
return "0 0/2 * * * ?";
}
}
@Component
@EnableScheduling
@EnableAsync
public MyTask2 extends AbstractTask{
@Override
public String getCronExpr() {
logger.info("inside getCronExpr method");
return "0 0/60 * * * ?";
}
}
Но это, @Scheduled(cron="#{@this.getCronExpr()}")
, выдает мне ошибку ниже
org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1058E: A problem occurred when trying to resolve bean 'this':'Could not resolve bean reference against BeanFactory'
Вместо использования this
, если я ссылаюсь на точный идентификатор компонента, он работает нормально, например:
@Scheduled(cron="#{@myTask1.getCronExpr()}")
Но я не могу этого сделать, потому что существует несколько дочерних классов, и это выражение cron должно оцениваться в соответствии с дочерним экземпляром. Со вчерашнего дня я искал по всему Интернету и перепробовал все возможные способы, но ни один из них не работает.
Для вашей информации я использую приведенные ниже spring jars:
spring-core-4.3.10.RELEASE.jar
spring-osgi-core-1.2.1.jar
spring-expression-4.3.10.RELEASE.jar
spring-beans-4.3.10.RELEASE.jar
spring-context-4.3.10.RELEASE.jar
spring-aop-4.3.10.RELEASE.jar
spring-data-mongodb-1.9.7.RELEASE.jar
spring-data-commons-1.12.6.RELEASE.jar
spring-tx-4.3.10.RELEASE.jar
spring-web-4.3.10.RELEASE.jar