2017-04-25 14 views
0

注釈付きのいくつかのメソッドがあります。@Scheduled。各アノテーションまたはそのグループに対して、別のスケジューラを使用したいと思う。たとえば:
グループAは場合、スケジューラX.
グループBは、私がDoes spring @Scheduled annotated methods runs on different threads?に読んだものから、スケジューラY.xmlアノテーションを使用せずに春に@Scheduledアノテーションのスケジューラを追加する

を使用する必要が@Scheduled注釈付き5つのメソッドを持って使用する必要が@Scheduled注釈を持つ3つの方法がありますスケジューラーが指定されていない場合、それらのメソッドの1つだけが一度に実行されます。

xmlベースの注釈を使用してこの接続を行う方法を知っています。しかし、これはJavaベースのアノテーションのみを使用して行うことができる方法はありますか?

答えて

1

これはjava configを使用して行うことができます。しかし、アノテーション属性を使用していません。

いくつかの拡張例については、Spring API docをご覧ください。例えば

@Configuration 
@EnableScheduling 
public class AppConfig implements SchedulingConfigurer { 

    @Override 
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
     taskRegistrar.setScheduler(taskScheduler()); 
    } 

    @Bean(destroyMethod="shutdown") 
    public Executor taskScheduler() { 
     return Executors.newScheduledThreadPool(42); 
    } 

} 

@Scheduledグループがまだサポートされていません。このopen issueを参照してください。

複数のスケジューラを使用する場合は、それらをプログラムで作成および構成する必要があります。例:

@Configuration 
@EnableScheduling 
public class AppConfig implements SchedulingConfigurer { 

    [...] 

    @Bean(destroyMethod="shutdown", name = "taskSchedulerA") 
    public Executor taskSchedulerA() { 
     return Executors.newScheduledThreadPool(42); 
    } 
    @Bean(destroyMethod="shutdown", name = "taskSchedulerB") 
    public Executor taskSchedulerA() { 
     return Executors.newScheduledThreadPool(42); 
    } 
} 


@Service 
public class MyService { 
     @Autowired @Qualifier("taskSchedulerA") 
     private Executor taskSchedulerA; 
     @Autowired @Qualifier("taskSchedulerB") 
     private Executor taskSchedulerB; 

     @PostConstruct 
     public void schedule(){ 
     Executors.newScheduledThreadPool(42).schedule(new Runnable() { 
      @Override 
      public void run() { 
      functionOfGroupA(); 
      } 
    } , ..); 

     } 
} 
+0

私はそれほどフォローしませんでした。では、これを使用して2つの異なるスケジューラをどのように使用できますか? – SHB

+1

プログラムでスケジューラを2つ作成して使用する必要があります –

関連する問題