Dropwizar не видит метод, помеченный аннотацией @Timed, если он вызывается запланированным заданием - PullRequest
0 голосов
/ 01 апреля 2019

У меня есть работа:

public class Jobber {
    @Timed(name = "my_timed")
    public void someJob(String symbol) {
        LOGGER.info("Started job");
        ...
    }
   public void startJob(String currency){
       threadPoolTaskScheduler.scheduleWithFixedDelay(
                () -> {
                  someJob(currency);                            
                }
                }, 5_000);

    }

и стартер:

public class AppEvenListener implements ApplicationListener<ApplicationReadyEvent> {
    @Autowired
    private Jobber jobber;



    @Override
    public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
        jobber.startJob("USD");

    }
}     

А потом я запустил приложение и увидел, что dropwizard не увидел, что показатель «my_timed» пуст:

count = 0
     mean rate = 0.00 calls/second
 1-minute rate = 0.00 calls/second
 5-minute rate = 0.00 calls/second
15-minute rate = 0.00 calls/second
           min = 0.00 milliseconds
           max = 0.00 milliseconds
          mean = 0.00 milliseconds
        stddev = 0.00 milliseconds
        median = 0.00 milliseconds
          75% <= 0.00 milliseconds
          95% <= 0.00 milliseconds
          98% <= 0.00 milliseconds
          99% <= 0.00 milliseconds
        99.9% <= 0.00 milliseconds

Меня это удивило, потому что я смог найти много Started job сообщений в логах.

Затем я попытался сделать что-то подобное внутри main метода:

 Jobber jobber = applicationContext.getBean(Jobber.class);
        for (int i = 0; i < 1_000_000; i++) {
jobber            jobber.someJob("Ololo");
            Thread.sleep(10_000);
        }

И после этого я начал видеть непустые метрики для "my_timed"

Так что я считаю, что проблема как-то связана с фоновыми потоками.

как я могу это исправить?

P.S. Версия с загрузочной пружиной = 1.5

...