반응형
Spring @Scheduler 병렬 실행
저는 다음 3개의 수업이 있습니다.
성분a
package mytest.spring.test.spring;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ComponentA {
Logger log = Logger.getLogger(ComponentB.class);
@Scheduled(fixedRate=2000)
public void sayHello() {
for(int i=1 ; i<=5 ; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("Hello from ComponentA " + i);
}
}
}
구성요소 B
package mytest.spring.test.spring;
import org.apache.log4j.Logger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ComponentB {
Logger log = Logger.getLogger(ComponentB.class);
@Scheduled(fixedRate=2000)
public void sayHello() {
for(int i=1 ; i<=3 ; i++) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
log.info("Hello from ComponentB " + i);
}
}
}
내 응용 프로그램
package mytest.spring.test.spring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
이를 실행하면 다음과 같은 출력이 표시됩니다.
Hello from ComponentA 1
Hello from ComponentA 2
Hello from ComponentA 3
Hello from ComponentA 4
Hello from ComponentA 5
Hello from ComponentB 1
Hello from ComponentB 2
Hello from ComponentB 3
Hello from ComponentA 1
Hello from ComponentA 2
Hello from ComponentA 3
Hello from ComponentA 4
Hello from ComponentA 5
Hello from ComponentB 1
Hello from ComponentB 2
Hello from ComponentB 3
...
나는 병렬로 실행하기 위해 2개의 예약된 메소드가 필요한데, 이것은 내가 받고 있는 출력에 따르면 분명히 cae가 아닙니다.@Schedule 주석을 사용자 지정 TaskExecutor와 함께 제공할 수 있어야 하며, 이를 통해 원하는 스레드 수를 정의할 수 있어야 합니다...
맞나요? 이 정보를 제공하는 방법을 찾을 수 없습니다.
기본적으로 에서는 연관된 스케줄러 정의를 검색합니다. 즉, 고유한 스케줄러 정의입니다.
TaskScheduler
맥락에 있는 존재, 또는TaskScheduler
그렇지 않으면 "taskScheduler"로 명명됩니다. 동일한 룩업도 수행됩니다.ScheduledExecutorService
둘 다 해결할 수 없는 경우 로컬 단일 스레드 기본 스케줄러가 생성되어 레지스트라 내에서 사용됩니다.더 많은 제어가 필요한 경우 @Configuration 클래스에서 SchedulingConfigurer를 구현할 수 있습니다.이렇게 하면 기본 예약된 작업 등록자 인스턴스에 액세스할 수 있습니다.예를 들어, 다음 예제에서는 예약된 태스크를 실행하는 데 사용되는 Executor를 사용자 정의하는 방법을 보여 줍니다.
@Configuration @EnableScheduling public class AppConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean(destroyMethod="shutdown") public Executor taskExecutor() { return Executors.newScheduledThreadPool(100); } }
언급URL : https://stackoverflow.com/questions/37344801/spring-scheduler-parallel-running
반응형
'programing' 카테고리의 다른 글
exec()가 프로그램 이미지를 변경한 후 mallocated 메모리는 어떻게 됩니까? (0) | 2023.06.19 |
---|---|
전체 폴더를 리포지토리에 재귀적으로 추가 (0) | 2023.06.19 |
쓰는 법SqlServer 및 Oracle(현재는 시스템) 모두에서 작동하는 Net 애플리케이션입니다.Data.OracleClient는 더 이상 사용되지 않습니다.) (0) | 2023.06.19 |
ggplot2에서 추가 범례 제거 (0) | 2023.06.19 |
Node.js를 사용하여 현재 스크립트의 경로를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.19 |