@schedule 주석은 springboot에서 일반적으로 사용되는 예약 작업 주석으로, 사용이 간단하고 편리합니다. 그러나 예약된 작업이 많거나 시간이 많이 걸리는 작업의 경우 다른 예약된 작업의 실행에 영향을 미치게 됩니다. 일정은 기본적으로 단일 스레드이기 때문에 작업이 실행되는 동안에는 다른 작업을 실행할 수 없습니다. 해결 방법은 일정을 재구성하고 이를 다중 스레드 실행으로 변경하는 것입니다.
import org.springframework.boot.autoconfigure.batch.BatchProperties; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import java.lang.reflect.Method; import java.util.concurrent.Executors; @Configuration public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { Method[] methods = BatchProperties.Job.class.getMethods(); int defaultPoolSize = 3; int corePoolSize = 0; if (methods != null && methods.length > 0) { for (Method method : methods) { Scheduled annotation = method.getAnnotation(Scheduled.class); if (annotation != null) { corePoolSize++; } } if (defaultPoolSize > corePoolSize) corePoolSize = defaultPoolSize; } taskRegistrar.setScheduler(Executors.newScheduledThreadPool(corePoolSize)); } }
위 내용은 springboot에서 예약된 작업이 일정대로 실행되지 않는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!