SpringBoot Schedule 구성 상세 정보
정시 작업 실현 방식:
package com.autonavi.task.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.autonavi.task.ScheduledTasks;
@Component
public class ScheduledTest {
private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
@Scheduled(cron="0 0/2 * * * ?")
public void executeFileDownLoadTask() {
// 2 ,
Thread current = Thread.currentThread();
System.out.println(" 1:"+current.getId());
logger.info("ScheduledTest.executeFileDownLoadTask 1:"+current.getId()+ ",name:"+current.getName());
}
}
@Scheduled 메모는 이 메서드를 표시하는 데 사용되는 시간을 정하는 방법입니다. 여러 가지 설정이 선택할 수 있습니다.cron은cron 표현식을 지원하며 특정 시간에 작업을 수행하도록 지정합니다.fixedRate는 특정 주파수로 작업을 수행합니다.fixedRateString은 실행 빈도를 string 형식으로 구성합니다.3. 정시 작업 시작
@SpringBootApplication
@EnableScheduling
public class App {
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
SpringApplication.run(App.class, args);
logger.info("start");
}
}
여기서 @EnableScheduling 메모는 @Scheduled 메모의 작업을 발견하고 백그라운드에서 수행하는 역할을 합니다.Springboot 자체의 기본 실행 방식은 직렬 실행입니다. 즉, 몇 개의 task가 있든지 간에 하나의 라인 직렬 실행입니다. 병렬은 수동으로 설정해야 합니다.
4. 병렬 작업
SchedulingConfigurer 클래스를 상속하고 다음 방법을 다시 작성하면 됩니다.
@Configuration
@EnableScheduling
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(100);
}
}
다시 실행하기 전의 그 데모는 이미 병행 실행되었다는 것을 흔쾌히 발견할 것이다! 5. 비동기식 병렬 작업
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
@EnableScheduling
@EnableAsync(
mode = AdviceMode.PROXY, proxyTargetClass = false,
order = Ordered.HIGHEST_PRECEDENCE
)
@ComponentScan(
basePackages = "hello"
)
public class RootContextConfiguration implements
AsyncConfigurer, SchedulingConfigurer {
@Bean
public ThreadPoolTaskScheduler taskScheduler()
{
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(20);
scheduler.setThreadNamePrefix("task-");
scheduler.setAwaitTerminationSeconds(60);
scheduler.setWaitForTasksToCompleteOnShutdown(true);
return scheduler;
}
@Override
public Executor getAsyncExecutor()
{
Executor executor = this.taskScheduler();
return executor;
}
@Override
public void configureTasks(ScheduledTaskRegistrar registrar)
{
TaskScheduler scheduler = this.taskScheduler();
registrar.setTaskScheduler(scheduler);
}
}
시작하는 main 메서드에 추가 구성을 추가합니다.
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext rootContext =
new AnnotationConfigApplicationContext();
rootContext.register(RootContextConfiguration.class);
rootContext.refresh();
}
}
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.