0

午前7時5分にタスクを実行する必要がありますが、エラーが発生します。これは私が作成したコントローラーです。

@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>

エラー:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'MyCtr': Injection 
of autowired dependencies failed; nested exception is   
org.springframework.beans.factory.BeanCreationException: Could not autowire field: private  
org.springframework.scheduling.TaskScheduler [...].MyController.scheduler; nested 
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type 
[org.springframework.scheduling.TaskScheduler] found for dependency: expected at least 1 bean which 
qualifies as autowire candidate for this dependency. Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
[...]
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private   
org.springframework.scheduling.TaskScheduler [...].MyController.scheduler; nested 
exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type 
[org.springframework.scheduling.TaskScheduler] found for dependency: expected at least 1 bean which 
qualifies as autowire candidate for this dependency. Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
[...]
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type 
[org.springframework.scheduling.TaskScheduler] found for dependency: expected at least 1 bean which 
qualifies as autowire candidate for this dependency. Dependency annotations: 
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
4

1 に答える 1

3

TaskSchedulerSpringがあなたのBeanを見つけられないようです。

INFOロギングを使用すると、初期化中にログで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として適切に認識されると仮定します。

于 2013-03-05T10:45:27.853 に答える