2015-04-22 27 views
13

Bazı görevleri yürütmek için spring-boot ve @Scheduled ek notlarını kullanıyorum.Yay önyüklemede varsayılan zamanlayıcı havuzu boyutu nedir?

Yaylı önyüklemede varsayılan programlanmış varsayılan havuz boyutunun varsayılan olarak ne olduğunu nasıl öğrenebilirim?

Nedeni: Aşağıdaki sınıf, işleri paralel olarak değil, birbiri ardına yürütür. Belki de varsayılan olarak sadece tek bir iş parçacığı yapılandırılır?

@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); 
    } 
} 

Sonuç: 2. iş, ilk bittikten sonra yürütülür.

+0

Belki bu [Bahar belgelerine] (http: //docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html#scheduling-annotation-support) sorununuzu çözmenize yardımcı olabilir. – SubOptimal

cevap

25

Evet, tüm @Scheduled yöntemleri varsayılan olarak tek bir iş parçacığı paylaşır. tanımlayarak bu davranışı geçersiz kılmak mümkün olduğu bir @Configuration Bu gibi:

Bu örnek, tüm @Scheduled yöntemleri boyutta bir iş parçacığı havuzu paylaşan sağlar
@Configuration 
public class SchedulingConfigurerConfiguration implements SchedulingConfigurer { 

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

100.

+2

, farklı @Scheduled ek açıklama için farklı thead-pool sahip bu mümkün mü? –

+0

farklı ThreadPoolTaskScheduler s oluşturulabilir ve threadPoolTaskScheduler.schedule yöntemleri kullanılabilir. –

+0

@AshikaUmangaUmagiliya Hayır, bu mümkün değil AFAIK. @Scheduled her zaman varsayılan görev zamanlayıcıyı kullanır ('ScheduledAnnotationBeanPostProcessor' 'a bakabilirsiniz). Farklı iş parçacığı havuzlarına görevleri zamanlayabilmek için, yerleşik Java 'java.util.concurrent.Executors' ile başka bir havuz oluşturun. –

İlgili konular