Выражение Cron должно состоять из 6 полей (найдено 1 в #{systemEnvironment['db_cron']})

Я пытаюсь установить запланированную аннотацию cron следующим образом:

@Scheduled(cron = "#{systemEnvironment['db_cron']}")
def void schedule() {

}

Затем установите переменную среды как:

export db_cron="0 19 21 * * *"

Однако я получаю ошибку времени выполнения:

Cron expression must consist of 6 fields 
  (found 1 in "#{systemEnvironment['db_cron']}")

Что может пойти не так?


ИЗМЕНИТЬ

Я также пробовал: @Scheduled(cron = "${db_cron}")

Но это возвращает ошибку времени компиляции:

/Users/snowch/repos/sales/Prospects/Snow/Plugwise/etl_service/src/main/groovy/com/ibm/etl/Application.groovy: 52: Expected '$db_cron' to be an inline constant of type java.lang.String in @org.springframework.scheduling.annotation.Scheduled
 @ line 52, column 23.
       @Scheduled(cron = "${db_cron}")
                         ^

/Users/snowch/repos/sales/Prospects/Snow/Plugwise/etl_service/src/main/groovy/com/ibm/etl/Application.groovy: -1: Attribute 'cron' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.scheduling.annotation.Scheduled
 @ line -1, column -1.
2 errors

:compileGroovy FAILED

FAILURE: Build failed with an exception.

Я пробовал @Scheduled(cron = "#{db_cron}")

Но ошибка времени выполнения была следующей:

Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.setSystemPropertiesMode() is applicable for argument types: (java.lang.Integer) values: [2]
Possible solutions: setSystemPropertiesMode(int), setSystemPropertiesModeName(java.lang.String)
    at groovy.lang.MetaClassImpl.invokeStaticMissingMethod(MetaClassImpl.java:1373)
    at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1359)
    at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.call(StaticMetaClassSite.java:50)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.ibm.etl.Application.main(Application.groovy:43)

Обратите внимание, что переменная окружения установлена ​​следующим образом:

snowch$ echo "$db_cron"
0 19 21 * * *

person Chris Snow    schedule 14.06.2015    source источник
comment
Я предполагаю, что ответ в stackoverflow.com/questions/30832972/ ошибся:-\   -  person tim_yates    schedule 15.06.2015
comment
вы не можете использовать GStrings (${}) в аннотации. используйте там '${}' (одинарные кавычки).   -  person cfrick    schedule 15.06.2015
comment
Использование одиночных строк приводит к ошибке: Exception in thread "main" groovy.lang.MissingMethodException: No signature of method: static org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.setSystemPropertiesMode() is applicable for argument types: (java.lang.Integer) values: [2]   -  person Chris Snow    schedule 15.06.2015


Ответы (2)


Вы должны установить переменную env, как вы это делаете:

export db_cron="0 19 21 * * *"

затем перезапустите ide, если вы используете или перезапустите сеанс терминала.

@Scheduled(cron = "${db_cron}")
def void schedule() {
   ...
}

Я попробовал, и вот мой скриншот. Все работает как положено...выражение cron как переменная окружения

person Nikolay Rusev    schedule 14.06.2015
comment
Боюсь, это не сработало: Attribute 'cron' should have type 'java.lang.String'; but found type 'java.lang.Object' in @org.springframework.scheduling.annotation.Scheduled - person Chris Snow; 15.06.2015
comment
@ChrisSnow, я думаю, "#{db_cron}" или '${db_cron}' могли бы это исправить - person Igor Artamonov; 15.06.2015
comment
часть .*rc не имеет значения. важно только, чтобы переменная среды была установлена ​​до запуска приложения и чтобы приложение запускалось в том же сеансе, где установлена ​​переменная (не устанавливайте ее в своей оболочке и не ожидайте, что она будет там в вашем intellij) - person cfrick; 15.06.2015
comment
@cfrick прав. выходить из системы и устанавливать env var в .bashrc или .zshrc бесполезно. - person Nikolay Rusev; 15.06.2015
comment
Я обновил вопрос с результатом попытки "#{db_cron}" и "${db_cron}" - person Chris Snow; 15.06.2015
comment
это очень странно. я не знаком с groovy, но я не могу найти разницу. В java все работает как положено, может быть что-то связано с groovy? - person Nikolay Rusev; 15.06.2015
comment
Проблема была из-за GStrings. Изменение "${db_cron}" на '${db_cron}' устранило проблему. - person Chris Snow; 15.06.2015
comment
У меня есть свойство в файле .yml, и задание cron не рассматривается как строка - person virsha; 07.03.2018

У меня работало с использованием JDK 11 и Spring 2.3.3, добавляя двойные кавычки к обеим переменным:

export db_cron="0 19 21 * * *"

а также:

@Scheduled(cron = "${db_cron}")

Примечание. работает и в файлах application.properties.

person Emerson Vicente    schedule 27.08.2020