java - 如何在 Spring 中运行 @PostConstruct 非阻塞?

标签 java spring spring-boot spring-async

@PostConstruct
public void performStateChecks() {
   throw new RuntimeException("test");
}
如果我开始一个 spring上面代码的应用程序,它将阻止应用程序启动。
我正在寻找的是在启动后直接执行一个方法,但异步。意思是,它不应该延迟启动,也不应该阻止应用程序即使在失败时也能运行。
如何使初始化异步?

最佳答案

我能看到的最简单的方法是使用 EventListeners 和异步任务执行器。
添加此代码片段将完成以下工作:

    @Component
    public class AsyncStartupRunner {

        @Bean(name = "applicationEventMulticaster")
        public ApplicationEventMulticaster simpleApplicationEventMulticaster() {
            SimpleApplicationEventMulticaster eventMulticaster =
                    new SimpleApplicationEventMulticaster();

            eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor());
            return eventMulticaster;
        }

        @EventListener(ApplicationReadyEvent.class)
        public void executeAfterStartup() {
            throw new RuntimeException("Oops");
        }
    }

关于java - 如何在 Spring 中运行 @PostConstruct 非阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66670891/

相关文章:

java - 实例化 servlet 类登录时出错

java - 使用 JMock 测试具体的第三方类

java - 接口(interface)中的 java 泛型问题

Java Spring 数据 JPA 和 REST API : exclude fields of nested JSON object

java - 将第 3 方 JAR 添加到 Maven 存储库

java - Spring mvc从登录用户获取用户id

java - 使用 spring 在应用服务器中实现业务逻辑

java - @RestController bean 在根上下文中注册,尽管被排除在 exceptFilters 中

spring-boot - 当 `SpringBootApplication` 执行 `WebMvcConfigurer` 时,使用 Spring Boot 配置 Guava Multimap 自动序列化

spring-boot - 使用源过滤获取Spring Data Elasticsearch Query中的所有非完整字段