Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring引导中使端点初始化异步?_Java_Spring_Spring Boot_Rest_Asynchronous - Fatal编程技术网

Java 如何在Spring引导中使端点初始化异步?

Java 如何在Spring引导中使端点初始化异步?,java,spring,spring-boot,rest,asynchronous,Java,Spring,Spring Boot,Rest,Asynchronous,在我的SpringBoot项目中,几个RESTAPI端点需要一个初始化需要几分钟的类。因此,启动RESTAPI需要几分钟的时间 是否可以(使用Spring Boot)使这几个端点异步初始化,即立即初始化所有其他端点,REST API开始工作,并且只要初始化了它们所需的类并且在此之前用户不可用,就初始化这些端点 我试着研究@Async和其他一些方法来在Spring Boot中实现异步,但这并没有帮助。 我真的很感谢你的帮助。谢谢大家! 尝试@Lazy注释。当它应用于spring组件时,它将在第一次

在我的SpringBoot项目中,几个RESTAPI端点需要一个初始化需要几分钟的类。因此,启动RESTAPI需要几分钟的时间

是否可以(使用Spring Boot)使这几个端点异步初始化,即立即初始化所有其他端点,REST API开始工作,并且只要初始化了它们所需的类并且在此之前用户不可用,就初始化这些端点

我试着研究
@Async
和其他一些方法来在Spring Boot中实现异步,但这并没有帮助。
我真的很感谢你的帮助。谢谢大家!

尝试
@Lazy
注释。当它应用于spring组件时,它将在第一次调用时初始化

一些资源:


尝试
@Lazy
注释。当它应用于spring组件时,它将在第一次调用时初始化

一些资源:


Spring中没有任何内置功能可以满足您的需要,但是您可以通过在服务初始化时返回404 Not Found响应,以及在服务可用时返回200 OK来实现它。以下是实现该目标的一种方法:

@RestController
class ExampleController {
    
    private final Future<SlowInitializationService> service;
    
    ExampleController() {
        this.service = ForkJoinPool.commonPool().submit(SlowInitializationService::new);
    }
    
    @GetMapping
    ResponseEntity<Result> example() throws InterruptedException, ExecutionException {
        if (this.service.isDone()) {
            return new ResponseEntity<>(this.service.get().perform(), HttpStatus.OK);
        }
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
    

}
@RestController
类示例控制器{
私人最终未来服务;
示例控制器(){
this.service=ForkJoinPool.commonPool().submit(SlowInitializationService::new);
}
@GetMapping
ResponseEntity example()引发InterruptedException、ExecutionException{
if(this.service.isDone()){
返回新的ResponseEntity(this.service.get().perform(),HttpStatus.OK);
}
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
}

您可能不想使用公共池,而是希望注入一个
执行器
或类似的执行器。这将取决于应用程序的其余部分以及它如何处理线程。

Spring中没有任何内置功能可以满足您的需要,但您可以通过在服务初始化时返回404 Not Found响应和可用时返回200 OK来实现它。以下是实现该目标的一种方法:

@RestController
class ExampleController {
    
    private final Future<SlowInitializationService> service;
    
    ExampleController() {
        this.service = ForkJoinPool.commonPool().submit(SlowInitializationService::new);
    }
    
    @GetMapping
    ResponseEntity<Result> example() throws InterruptedException, ExecutionException {
        if (this.service.isDone()) {
            return new ResponseEntity<>(this.service.get().perform(), HttpStatus.OK);
        }
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
    

}
@RestController
类示例控制器{
私人最终未来服务;
示例控制器(){
this.service=ForkJoinPool.commonPool().submit(SlowInitializationService::new);
}
@GetMapping
ResponseEntity example()引发InterruptedException、ExecutionException{
if(this.service.isDone()){
返回新的ResponseEntity(this.service.get().perform(),HttpStatus.OK);
}
返回新的ResponseEntity(未找到HttpStatus.NOT_);
}
}

您可能不想使用公共池,而是希望注入一个
执行器
或类似的执行器。这将取决于应用程序的其余部分以及它如何处理线程。

是否“初始化需要几分钟的类”是Spring管理的bean?@AndyWilkinson不,它只是一个外部类,但我想它可以包装在bean中。“初始化需要几分钟的类”是Spring管理的bean吗?@AndyWilkinson不,它只是一个外部类,但我想它可以包装在bean中,但是组件不会自动初始化,只会在第一次调用后开始初始化。我正在寻找能够在REST API启动后自动启动组件初始化的东西,当组件初始化时,使用此组件的端点不可用,而所有其他端点都可用并工作。但是,组件不会自动初始化,并且会仅在第一次调用后开始初始化。我正在寻找能够在REST API启动后自动启动组件初始化的东西,当组件初始化时,使用此组件的端点不可用,而所有其他端点都可用且正常工作。下面的线程有助于决定使用哪个HTTP代码在服务初始化时返回:以下线程有助于决定在服务初始化时返回哪个HTTP代码: