java - Spring MVC 如何从 Controller 使用 AsyncTaskExecutor

标签 java multithreading spring-mvc asynchronous callable

我需要在不同的线程中执行 Controller 中的一些代码。

我的结构:

@Controller
MyController

    //invoked from frontend
    @RequestMapping
    MyMethod 
       Loop
           future = asyncTaskExecutor.Submit(callable)
       End loop
       Get future results
    End MyMethod

我正在使用 AsyncTaskExecutor,如下例所示:

Any good Spring threading with a TaskExecutor examples?

public SendEmailController() {}

public SendEmailController(AsyncTaskExecutor asyncTaskExecutor) {
super();
this.asyncTaskExecutor = asyncTaskExecutor;
}

applicationContext.xml:

<bean id="sendEmailController" class="com.ts.bpu.email.web.SendEmailController">
    <constructor-arg ref="asyncTaskExecutor" />
</bean>

<bean id="asyncTaskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="queueCapacity" value="25" />
</bean>

但是带参数的构造函数永远不会被使用。但如果我仅使用带参数的构造函数,则异常跟踪为:

 GRAVE: WebModule[/TsSecPricesEngineWeb]StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sendEmailController' defined in file [C:\Sun\AppServer\domains\domain1\applications\j2ee-modules\TsSecPricesEngineWeb\WEB-INF\classes\com\ts\bpu\email\web\SendEmailController.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ts.bpu.email.web.SendEmailController]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.ts.bpu.email.web.SendEmailController.<init>()
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:965)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127)
at javax.servlet.GenericServlet.init(GenericServlet.java:270)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1194)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:848)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

 Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.ts.bpu.email.web.SendEmailController]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.ts.bpu.email.web.SendEmailController.<init>()
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:70)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958)
... 44 more

 Caused by: java.lang.NoSuchMethodException: com.ts.bpu.email.web.SendEmailController.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:65)
... 45 more

有什么建议吗?

谢谢

最佳答案

当 Spring 容器启动时,它将调用您的 SendEmailController 类构造函数。

关于java - Spring MVC 如何从 Controller 使用 AsyncTaskExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13706050/

相关文章:

java - Spring MVC 测试中没有定义 [javax.persistence.EntityManagerFactory] ​​类型的合格 bean 问题

尽管 hashcode 不同,但 Java 对象是相等的

multithreading - 100% 使用某些内核是否会影响在 Linux 中不同内核上运行的进程(C++,多线程)的性能?

java - 如何在 spring boot 中从 application.properties 文件创建可配置的 Retryable maxAttempts 和 backoff

c - 如何使用 swapcontext() 恢复函数的执行(而不是再次启动)?

java - 线程安全并发使用,多个实例?

java - 通过 <a href =""> 传递参数并将其获取到 spring mvc Controller

authentication - RESTful 服务认证

java - frontpage 从 model.addAttribute 获取对象的长类型 id 丢失精度

java - 不可刷新的Jsp页面