在JBoss上部署战争时,@ Async注释不起作用

时间:2019-09-12 07:57:46

标签: spring spring-boot jboss

我有一个包含API Rest的应用程序,该应用程序实现为Spring Boot应用程序(1.5.18.RELEASE版本)

此API包含执行异步服务方法的控制器。该方法带有@Async批注

在我的配置类上设置了@EnableAsync注释。

当我像典型的Spring Boot应用程序一样执行该应用程序时,该方法将异步执行。如果我(使用Maven)发动了战争,并且这场战争部署在JBoss(6.4版本)上,则同步执行相同的服务。

有人可以向我解释这种行为吗?我应该添加任何类型的配置吗?

源代码如下:

Spring Boot配置

@SpringBootApplication
@EnableCustomConfiguration
@EnableCaching
@EnableScheduling
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}

我的自定义注释:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Import({CustomServicesConfiguration.class})
@Documented
public @interface EnableCustomConfiguration {
}

我的配置类:

@Configuration
@ComponentScan("com.bs.custom.api")
@EntityScan(basePackages = "com.bs.custom.api.domain", basePackageClasses = Jsr310JpaConverters.class)
@EnableJpaRepositories(basePackages = "com.bs.custom.api.repository")
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@EnableAsync
public class CustomServicesConfiguration {

    static {
        SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
    }
}

1 个答案:

答案 0 :(得分:0)

我已经修改了WebApplication类,以从Spring Boot reference guide(感谢M.Deinum)上定义的SpringBootServletInitializer扩展

最终的WebApplication类源代码如下:

@SpringBootApplication
@EnableCustomConfiguration
@EnableCaching
@EnableScheduling
@EnableAsync
public class WebApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }   

}

现在,异步方法可以在JBoss上正确运行