Spring:安排一个带参数的任务

时间:2015-04-01 10:33:49

标签: java spring scheduled-tasks

我有一个具有以下功能的课程:

public class classA{

... 
...

void function_to_be_scheduled(String param){
    ...
    ...
}
}

我想使用任务名称空间的scheduled-tasks元素来安排该函数。

<task:scheduled-tasks>
    <task:scheduled ref="beanA" method="function_to_be_scheduled" cron="${cron}"/>
</task:scheduled-tasks>

如何将参数传递给我想要安排的函数?

4 个答案:

答案 0 :(得分:8)

根据你不能docs

  

请注意,要调度的方法必须具有void返回值   不要指望任何争论。

答案 1 :(得分:4)

关于scheduling的Spring文档说:

  

请注意,要调度的方法必须具有void返回值,并且不得指望任何参数

由于参数来自Spring配置文件,你可以在spring文件中声明一个bean(es beanB包装beanA),在bean中注入你需要的参数,并安排执行bean的方法知道参数(它可能是beanA的简单包装)

答案 2 :(得分:0)

您可以使用TaskScheduler并在Runnable中用参数封装逻辑:

@Autowired
private TaskScheduler scheduler;

public void scheduleRules() {
    MyTask task = new MyTaskImpl(someParam);
    // new CronTrigger
    scheduler.scheduleAtFixedRate(task, Duration.ofMinutes(1));
}

答案 3 :(得分:-2)

任务计划程序帮我解决了

  1. 首先创建一个名为ThreadPoolTask​​Scheduler类的配置类。查找详情Here

  2. 然后创建一个魔法发生的类

    @Component
    public class ThreadPoolTaskSchedulerExample {
    
    @Autowired
    private ThreadPoolTaskScheduler taskScheduler;
    
    
         class EmailWatch implements Runnable{
    
             private String userEmail;
    
    
             public EmailWatch(String userEmail){
                 this.userEmail = userEmail;
             }
    
    
             @Override
             public void run() {
                  System.out.println("This is the email "+ userEmail);
             }
         }
    
    
         public void watchEmail(String userEmail)  {
    
       //refresh watch every minute
             CronTrigger cronTrigger = new CronTrigger("0 * * ? * *"); 
             taskScheduler.schedule(new EmailWatch(userEmail));
         }
     }