다른 클래스의 스프링 부트 프로젝트에 예약 된 메서드가 몇 가지 있는데 이러한 클래스가 ClassA, ClassB 및 ClassC라고 가정하겠습니다. 이러한 모든 클래스는 동일한 패키지에 있습니다. MainApplication 클래스의 기본 메서드에 대해 @EnableScheduling이 있습니다.
이러한 모든 메소드는 application.properties 파일에서 cron 표현식을 읽습니다. @Scheduled 주석의 부적절한 가져 오기도 확인했습니다. 모든 파일에는 동일한 가져 오기가 있지만 ClassA에서 예약 된 메서드를 실행할 수없는 것이 무엇이든 상관 없습니다.
@Service
public class ClassB{
@Scheduled(cron = "0 15 10 15 * ?")
public void attendanceCalculator(){
//this one runs fine
}
}
또 하나는 이렇게
@Service
public class ClassB{
@Scheduled(cron = "0 0 0 ? * * ")
public void dailyAttSummaryGenerator(){
//this one runs fine too
}
}
하지만 이것들은 내가 무엇을하든 실행되지 않습니다.
@Service
public class ClassA{
@Scheduled(cron = "0 0 0 ? * * ")
public void testOne(){
//this one doesn't run
}
@Scheduled(fixedRate = 1000)
public void testTwo(){
//this one doesn't run either
}
}
그러나 이상하게도 이것은 작동합니다.
@Service
public class ClassB{
@Autowired
public ClassA classA;
@Scheduled(cron = "0 0 0 ? * * ")
public void testOne(){
classA.testOne(); // This runs
}
@Scheduled(fixedRate = 1000)
public void testTwo(){
classA.testTwo(); // This runs too
}
}
ClassC 내부에서 classA를 autowire하는 경우에도 작동합니다.
누군가가 왜 이런 일이 발생하는지 또는 내가 뭘 잘못하고 있는지 설명해 주시겠습니까? 어떤 도움을 주시면 감사하겠습니다.