Spring Boot 应用程序中的线程技术和并行性

Spring Framework 通过使用 TaskExecutor 接口提供用于异步执行任务的抽象。 执行程序是线程池概念的 Java SE 名称。 Spring 的 TaskExecutor 接口与 java.util.concurrent.Executor 接口相同。 最初创建 TaskExecutor 是为了在需要时为其他 Spring 组件提供线程池的抽象。 Spring 包含许多预构建的 TaskExecutor 但对于与 CICS® 集成而言, DefaultManagedTaskExecutor 才是最有用的,因为它可以查找应用服务器的 defaultExecutor ,而 CICS Liberty 则旨在提供 CICS 支持的线程。

关于此任务

要使用启用了 CICS 的线程在 Spring Boot 应用程序中运行异步任务,有两个选项。 您可以为整个应用程序设置异步执行程序,也可以选择按方法指定 AsyncExecutor 。 如果您异步衍生的所有任务都需要 CICS 服务,那么为整个应用程序设置异步执行程序是最简单的方法。 否则,您需要指定要用于需要异步功能的每个方法的异步执行程序。 在这里,我们演示了整个应用方法。

过程

  1. 在 Spring Boot 应用程序主类中添加 @EnableAsync 注解,实现 AsyncConfigurer, 接口并覆盖 getAsyncExecutor( ) 和 AsyncUncaughtExceptionHandler 方法。 确保在 getAsyncExecutor( ) 方法中返回 DefaultManagedTaskExecutor 的一个实例,因为它会从 Liberty 的 defaultExecutor, 而后者又配置为返回启用 CICS线程。 有关 AsyncConfigurer, 的更多信息,请参阅 AsyncConfigurer 的更多信息,请参见 Spring Boot 文档。 有关使用示例,请参见 EnableAsync 中的 Spring Boot 文档。
    @SpringBootApplication
    @EnableAsync
    public class MyApplication implements AsyncConfigurer 
    {     
    
        public static void main(String[] args) 
        {
            SpringApplication.run(MyApplication.class, args);
        } 
    
        @Override
        @Bean(name = "CICSEnabledTaskExecutor") 
        public Executor getAsyncExecutor() 
        { 
            return new DefaultManagedTaskExecutor();
        }
    
        @Override 
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() 
        {
            return new CustomAsyncExceptionHandler();
        }
    } 
    
    public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler 
    {
        @Override 
        public void handleUncaughtException(Throwable throwable, Method method, Object... obj) 
        {
            System.out.println("Exception Cause - " + throwable.getMessage());
            System.out.println("Method name - " + method.getName()); 
            for (Object param : obj) 
            {
                System.out.println("Parameter value - " + param);
            } 
        }
    }
  2. 将 @Async 注释添加到应用程序中的类 (如果您希望以异步方式运行该类上的所有方法) 或添加到您希望以异步方式运行的各个方法。 例如,@Async("CICSEnabledTaskExecutor")
  3. 将 concurrent-1.0 功能部件添加到 server.xml