How do I autowire a Spring TaskExecutor created thread?

后端 未结 3 1124
北海茫月
北海茫月 2021-02-04 08:18

According to Spring\'s documentation the way to use the TaskExecutor is as follows:

import org.springframework.core.task.TaskExecutor;

public class TaskExecutor         


        
3条回答
  •  眼角桃花
    2021-02-04 09:06

    There are two ways I think that you can go about this:

    a. Provide the dependencies to the Task - this way:

    class MessagePrinterTask implements Runnable {
        public MessagePrinterTask(ADependency aDependency){
            this.aDependency = aDependency;
        }
    
    
        private ADependency aDependency;
    
        public void run() {
            aDependency.doNotThrowNullPointerExceptionPlease();
        }
    }
    

    And in your TaskExectorExample which can be the singleton:

    import org.springframework.core.task.TaskExecutor;
    
    public class TaskExecutorExample {
    
      @Autowired  private ADependency aDependency;
    
      @Autowired
      public TaskExecutorExample(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
      }
    
      public void printMessages() {
        for(int i = 0; i < 25; i++) {
          taskExecutor.execute(new MessagePrinterTask(this.aDependency));
        }
      }
    }
    

    b. Using @Configurable annotation on your MesasgePrinterTask, this will inject in dependencies into MessagePrinterTask even though it is instantiated outside of a Spring Container - there are some catches in using @Configurable though(requires AspectJ):

    @Configurable
    class MessagePrinterTask implements Runnable {
    

提交回复
热议问题