首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@调度的spring注释(找不到类[org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]) )时出现的异常

使用@调度的spring注释(找不到类[org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor]) )时出现的异常
EN

Stack Overflow用户
提问于 2015-05-12 07:52:15
回答 1查看 1.8K关注 0票数 1

我使用@Scheduled注释创建了一个计划作业。看起来是这样的:

代码语言:javascript
复制
package example.tools.rr; 

public class RequestProcessorJob {
    private RequestService requestService;
    ...
    @Scheduled(fixedRate = 10000)
    public void process() {
         ...
    }

    public RequestService getRequestService() { return requestService; }

    public void setRequestService(RequestService requestService) { this.requestService = requestService; }

}

我把它放在了一个包A中,所以我可以在其他包中使用这个类。我将它导入包B中,B的blueprint.xml如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:cm="http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium"
  xmlns:ctx="http://www.springframework.org/schema/context" xmlns:beans="http://www.springframework.org/schema/beans"
  xmlns:task="http://www.springframework.org/schema/task"
  xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
              http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium http://www.eclipse.org/gemini/blueprint/schema/blueprint-compendium/gemini-blueprint-compendium.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
              http://www.springframework.org/schema/task
              http://www.springframework.org/schema/task/spring-task-3.1.xsd
              ">
  ... 

  <bean id="handsetService" class="example.handset.impl.HandsetServiceImpl">
    ...
  </bean>

  <task:scheduler id="taskScheduler" />
  <task:executor id="taskExecutor" pool-size="1" />
  <task:annotation-driven executor="taskExecutor"
                          scheduler="taskScheduler" />

  <bean class="example.tools.rr.RequestProcessorJob">
    <cm:managed-properties persistent-id="example.handset.processing"
                           autowire-on-update="true" />
    <property name="requestService" ref="handsetService" />
  </bean>

</blueprint>

当我安装包(在Apache中)时,会引发以下异常:

代码语言:javascript
复制
Unable to create application context for [example.handset], unsatisfied dependencies:
none
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor] for bean with name 'org.springframework.context.annotation.internalAsyncAnnotationProcessor' defined in null; nested
exception is java.lang.ClassNotFoundException: org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor not found from bundle [example.handset]
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1262) ~[na:na]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576) ~[na:na]
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1331) ~[na:na]
        at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:897) ~[na:na]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:566) ~[na:na]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) ~[na:na]
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:60) ~[na:na]
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:325) ~[na:na]
        at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85) ~[na:na]
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:290) ~[na:na]
        at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:137) ~[na:na]
        at java.lang.Thread.run(Unknown Source) [na:1.7.0_67]
Caused by: java.lang.ClassNotFoundException: org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor not found from bundle [example.handset]
        at org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:101) ~[na:na]
        at org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:155) ~[na:na]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_67]
        at org.springframework.util.ClassUtils.forName(ClassUtils.java:257) ~[na:na]
        at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:417) ~[na:na]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1283) ~[na:na]
        at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1254) ~[na:na]
        ... 11 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.scheduling.annotation.AsyncAnnotationBeanPostProcessor not found by example.handset [443]
        at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1499) ~[felix.jar:na]
        at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
~[felix.jar:na]
        at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1882) ~[felix.jar:na]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_67]
        at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1793) ~[felix.jar:na]
        at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:929) ~[felix.jar:na]
        at org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:97) ~[na:na]
        ... 17 common frames omitted

如果我添加了一个空类,该类在包B中只有一个@Scheduled注释,那么一切正常工作,并且正确地调度了这个@Scheduled(没有使用空类,但它使错误不会发生)。

代码语言:javascript
复制
public class MockJob {
    @Scheduled(fixedRate = 10000)
    public void process() { }
}

我尝试将pom.xml中的B模块A作为<scope>provided</scope><scope>compile</scope>,结果是一样的。

要让它正常工作,有一个reduntant类听起来并不像一个解决方案。你对此有什么想法吗?这是个窃听器,还是不知怎的,它的工作原理很奇怪?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-14 08:49:35

好的,我只是在pom.xml的章节中缺少了pom.xml。毕竟很明显,但是春天的行为在这里仍然很奇怪。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30184871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档