gpt4 book ai didi

java - 如何使用spring @Async创建独立线程

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:31 25 4
gpt4 key购买 nike

我正在将 spring @Async 与 weblogic workmanager 一起使用,Spring版本为3.2.2

网络.xml :

<resource-ref>
<res-ref-name>ReportWorkmanager</res-ref-name>
<res-type>commonj.work.WorkManager</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

网络逻辑.xml :

<work-manager>
<name>ReportWorkmanager</name>
<fair-share-request-class>
<name>Priority</name>
<fair-share>100</fair-share>
</fair-share-request-class>

<min-threads-constraint>
<name>MinThreadCount</name>
<count>15</count>
</min-threads-constraint>

<max-threads-constraint>
<name>MaxThreadCount</name>
<count>25</count>
</max-threads-constraint>

<work-manager-shutdown-trigger>
<max-stuck-thread-time>120</max-stuck-thread-time>
<stuck-thread-count>25</stuck-thread-count>
</work-manager-shutdown-trigger>
</work-manager>

Spring 配置文件:

 <bean id="reportWorkManagerTaskExecutor"
class="org.springframework.scheduling.commonj.WorkManagerTaskExecutor">
<property name="workManagerName" value="java:comp/env/ReportWorkmanager" />
</bean>

Controller :

@RequestMapping(value = "/publish", method = RequestMethod.POST)
public MarketingScenario publishReport(@RequestBody final PublishReportDTO reportDTO, final HttpServletRequest request) throws Exception {


reportDTO.setReqUserName(DominoWebUtil.getLoggedInUserName(request));
reportEngine.publishReport(reportDTO);
MarketingScenario scenario = scenarioService.findMarketingScenarioById(reportDTO.getScenarioId());
_LOGGER.debug("Job submitted , successfully came out for scenario id {}", reportDTO.getScenarioId());
return scenario;
}

服务:

@Async(value = "reportWorkManagerTaskExecutor")
public void publishReport(final PublishReportDTO reportDTO) {

//Some long run job
}

每当请求来自 fornt end 时, Controller 应该通过调用服务方法来启 Action 业,并且它应该返回响应而不等待服务作业。

当未应用@Async 时,一切都很顺利,但当我应用时,由于我的请求线程已完成,服务线程被终止。

请告诉我,使用@Async 如何创建独立于请求线程的线程。

独立线程可能会运行 2 分钟或 20 分钟,具体取决于输入。

最佳答案

首先,Spring's docs声明使用非默认执行程序的 @Async 应该用 @Async("otherExecutor") 注释而不是 @Async(value="otherExecutor").

另外,我想我不太明白你的意思:

When @Async is not applied everything goes perfectly but when I applied, service thread is getting killed because of my request thread is done.

我假设你的意思是它运行正常但在同一个线程上。在这种情况下,它非常有意义,因为您正在同步运行该方法。

关于java - 如何使用spring @Async创建独立线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com