我有一个具有以下功能的课程:
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>
如何将参数传递给我想要安排的函数?
答案 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)
任务计划程序帮我解决了
首先创建一个名为ThreadPoolTaskScheduler类的配置类。查找详情Here!
然后创建一个魔法发生的类
@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));
}
}