java.lang.IllegalStateException: обнаружен недопустимый метод @Scheduled: не удалось разрешить заполнитель @PropertySource ("classpath: dev.yml") - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь загрузить следующее выражение выполнения cron:

---
####################### Cron-Job Every 2mins every day #######################
cron:
  exe:
    expression: 0 0/2 * * * ?

Подвох в том, что вышеприведенное выражение cron находится в Spring-Cloud-Config (скажем, Springboot Project A,работает на порту: 8001) репозиторий github.named: microservice-dev.yml

Проект B (порт: 8002) загружает все конфигурации, предоставленные Проектом A, при запуске, и я доволен этим.Но как мне найти это выражение?

$ {cron.exe.expression}

@Component
//Couldn't get it to work with Spring-Cloud-Config
@PropertySource("classpath:microservice-dev.yml")
public class MergeCachedRecordsToDBImpl {
    private static final Logger LOGGER = LoggerFactory.getLogger(MergeCachedRecordsToDBImpl.class);

    //Couldn't get it to work with Spring-Cloud Config
    @Scheduled(cron = "${cron.exe.expression}")
    public void purgeExpired() {
        LOGGER.info("Cron-Job Notification....");
        LOGGER.info("Cron-Job executed at: {}", new Timestamp(new Date().getTime()));
    }
}

В какой-то момент у меня все заработало, но я не уверен, как?Я пытаюсь отследить свои шаги.

Теперь я получаю это исключение:

Причина: java.lang.IllegalStateException: Обнаружен недопустимый @Scheduled метод 'purgeExpired':Не удалось разрешить заполнитель «cron.exe.expression» в значении «$ {cron.exe.expression}»

Ответы [ 2 ]

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

Хорошо, заставил его снова работать с файлом .yml.Happy Days.

В следующем файле .yml:

src / main / resources / bootstrap.yml

имеет следующее содержимое:

---
spring:
  application:
    name: leaderboard
  profiles:
    active: dev

server:
  port: 8004

---
####################### Cron-Job Every 2mins every day #######################
cron:
  exe:
    expression: 0 0/2 * * * ?

в коде я аннотировал свой класс и метод следующими аннотациями:

@PropertySource("classpath:bootstrap.yml")
public class CronClass{
private static final Logger LOGGER = LoggerFactory.getLogger(CronClass.class);

   @Scheduled(cron = "${cron.exe.expression}")
   private void cornJob(){
        LOGGER.info("Cron-Job Notification....");
        LOGGER.info("Cron-Job executed at: {}", new Timestamp(new Date().getTime()));
   }
}

Результаты:

2018-09-29 11:19:00.007  INFO [leaderboard,66037f3d8052cf6b,66037f3d8052cf6b,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job Notification....
2018-09-29 11:19:00.007  INFO [leaderboard,66037f3d8052cf6b,66037f3d8052cf6b,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job executed at: 2018-09-29 11:19:00.007

2018-09-29 11:20:00.000  INFO [leaderboard,25cab214549b76a6,25cab214549b76a6,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job Notification....
2018-09-29 11:20:00.000  INFO [leaderboard,25cab214549b76a6,25cab214549b76a6,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job executed at: 2018-09-29 11:20:00.0

2018-09-29 11:21:00.000  INFO [leaderboard,c2f241d8a806fd26,c2f241d8a806fd26,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job Notification....
2018-09-29 11:21:00.000  INFO [leaderboard,c2f241d8a806fd26,c2f241d8a806fd26,false] 7937 --- [   scheduling-1] i.s.l.task.CronClass    : Cron-Job executed at: 2018-09-29 11:21:00.0

Evidence of .yml file with @PropertySource

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

В настоящее время загрузочная пружина @PropertySource не поддерживает yaml как файл свойств.

Вот аналогичный вопрос - Spring @ConfigurationProperties не отображает список объектов

...