2015-04-22 23 views
13

Tôi đang sử dụng chú thích spring-boot@Scheduled để thực hiện một số tác vụ.Kích thước bộ lập lịch biểu mặc định trong khởi động mùa xuân là gì?

Làm cách nào để tìm hiểu kích thước nhóm mặc định của tác vụ theo lịch mặc định là gì trong khởi động vào mùa xuân?

Lý do: lớp sau không thực hiện các công việc song song, nhưng sau khi thực hiện công việc khác. Có lẽ chỉ có một trình quản lý luồng đơn được cấu hình theo mặc định?

@Service 
public class ZipFileTesterAsync { 

    @Scheduled(fixedDelay = 60000, initialDelay = 500) 
    public void run() throws Exception { 
     System.out.println("import 1"); 
     TimeUnit.MINUTES.sleep(1); 
     System.out.println("import 1 finished"); 
    } 

    @Scheduled(fixedDelay = 60000, initialDelay = 1000) 
    public void run2() throws Exception { 
     System.out.println("import 2"); 
     TimeUnit.MINUTES.sleep(1); 
    } 
} 

Kết quả: công việc thứ hai được thực hiện sau khi hoàn tất đầu tiên.

+0

Có lẽ đây [tài liệu xuân] (http: //docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-annotation-support) có thể giúp giải quyết vấn đề của bạn. – SubOptimal

Trả lời

25

Có, tất cả các phương pháp @Scheduled chia sẻ một chuỗi duy nhất theo mặc định. Có thể thay đổi hành vi này bằng cách định nghĩa một @Configuration như thế này:

@Configuration 
public class SchedulingConfigurerConfiguration implements SchedulingConfigurer { 

    @Override 
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
     ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); 
     taskScheduler.setPoolSize(100); 
     taskScheduler.initialize(); 
     taskRegistrar.setTaskScheduler(taskScheduler); 
    } 
} 

dụ này đảm bảo rằng tất cả @Scheduled phương pháp chia sẻ một hồ bơi thread kích thước 100.

+2

là điều này có thể có hồ bơi thead khác nhau cho chú thích @Scheduled khác nhau không? –

+0

ThreadPoolTaskScheduler khác nhau có thể được tạo và sử dụng các phương thức threadPoolTaskScheduler.schedule. –

+0

@AshikaUmangaUmagiliya Không, không thể AFAIK. @Scheduled sẽ luôn sử dụng công cụ lập lịch tác vụ mặc định (bạn có thể xem 'ScheduledAnnotationBeanPostProcessor'). Để có thể lên lịch các tác vụ cho các nhóm luồng khác nhau, chỉ cần tạo một nhóm khác với Java 'java.util.concurrent.Executors' được tích hợp sẵn. –

Các vấn đề liên quan