如何通过<context:component-scan base-package="" />
扫描jar文件中的Class。我收到了自动上课时的以下错误。
SEVERE [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: org.quartz.Scheduler com.path.controller.MyController.scheduler; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.quartz.Scheduler] 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)}
代码:
package com.path.controller;
import org.quartz.Scheduler;
@Controller
public class MyController{
@Autowired
Scheduler scheduler;
}
此调度程序位于jar文件quartz-oracle-2.1.6.jar
内,位于WEB-INF\lib
下。此lib
位于部署包的classes
文件夹之外。在applicationcontext.xml
我有以下条目,
<context:component-scan base-package="com.path" />
答案 0 :(得分:1)
在eclipse中使用导出实用程序导出jar文件时,会出现一个名为Add directory entries的选项。选中此选项并导出jar文件,这将解决问题
答案 1 :(得分:1)
我猜你没有定义你的调度程序bean。您需要先定义bean才能注入控制器。
在applicationcontext.xml
首先定义一个类型为Scheduler
的bean。
您可能需要以下内容。请务必查看quartz文档以检查您需要哪个调度程序以及如何实例化它。
<bean id="schedulerFactory"
class="org.quartz.StdSchedulerFactory" />
<bean id="scheduler" class="org.quartz.Scheduler" factory-bean="schedulerFactory" factory-method="getDefaultScheduler" />
答案 2 :(得分:1)
由于异常抱怨“没有[org.quartz.Scheduler]类型的限定bean”,我们将不得不定义类型为org.quartz.Scheduler的bean,但如果没有任何具体的实现,这是不可能的,因此,我们必须从Factory类org.quartz.impl.StdSchedulerFactory获取具体实现,它是非静态方法getScheduler()。
因此,您必须在上下文xml文件中添加以下两行并且它将起作用,我已使用您使用的相同版本的spring验证了相同的内容:
<bean id="schedulerFactory" class="org.quartz.impl.StdSchedulerFactory" />
<bean id="scheduler" class="org.quartz.Scheduler" factory-bean="schedulerFactory" factory-method="getScheduler" />
打印初始化bean后的控制台输出提供:
scheduler=org.quartz.impl.StdScheduler@536aaa8d