通过Spring TaskScheduler启动异步任务

通过Spring TaskScheduler启动异步任务,spring,scheduled-tasks,scheduler,Spring,Scheduled Tasks,Scheduler,我需要在早上7点05分执行一项任务,但我遇到了一个错误。 这是我创建的控制器 @Service("myCtr") public class MyController { @Autowired private TaskScheduler scheduler; @Async public void executeTaskT() { scheduler.schedule(new MyWorker(),

我需要在早上7点05分执行一项任务,但我遇到了一个错误。 这是我创建的控制器

@Service("myCtr")
public class MyController {

    @Autowired
    private TaskScheduler scheduler;

    @Async
    public void executeTaskT() {
        scheduler.schedule(new MyWorker(), 
                           new CronTrigger("5 7 * * *"));
        }
}
MyWorker实现Runnable的方式很简单:

    [...]
    @Override
    public void run() {
        doWork();
    }

    private void doWork() { [...]
我的计划程序配置文件由web-application-config.xml导入:

<beans  xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

<bean id="TaskScheduler"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
    <property name="waitForTasksToCompleteOnShutdown" value="true" />
    <property name="poolSize" value="1000" />
</bean>

</beans>

Spring似乎找不到您的
TaskScheduler
bean

通过信息日志记录,您应该能够在初始化期间在日志中找到bean定义。如果没有,请通过进一步测试确保有效读取配置文件

为了满足您的确切需要,您还可以使用以下各项:

@Service
public class MyService {

    @Scheduled(cron = "0 5 7 * * *")
    public void myMethod() { ... }

}
使用此配置:

<task:annotation-driven scheduler="myScheduler"/>
<task:scheduler id="myScheduler" pool-size="1000"/>


假设使用组件扫描将
MyService
正确地视为bean。

Spring似乎找不到您的
TaskScheduler
bean

通过信息日志记录,您应该能够在初始化期间在日志中找到bean定义。如果没有,请通过进一步测试确保有效读取配置文件

为了满足您的确切需要,您还可以使用以下各项:

@Service
public class MyService {

    @Scheduled(cron = "0 5 7 * * *")
    public void myMethod() { ... }

}
使用此配置:

<task:annotation-driven scheduler="myScheduler"/>
<task:scheduler id="myScheduler" pool-size="1000"/>


假设
MyService
被正确地视为一个bean,例如使用组件扫描。

我尝试了你的解决方案,效果很好。但是,我不能使用它,因为cron作业不是固定的。用户可以设置它,因此它必须是一个变量,而不是在注释中。另一方面,我发现问题出在配置文件中:它不是由上下文文件“导入”的。谢谢。我也希望所有用户都能分配这个。你明白了吗?我试过你的解决方案,效果很好。但是,我不能使用它,因为cron作业不是固定的。用户可以设置它,因此它必须是一个变量,而不是在注释中。另一方面,我发现问题出在配置文件中:它不是由上下文文件“导入”的。谢谢。我也希望所有用户都能分配这个。你明白了吗?