Java Spring@Async带注释的方法在调用自身时会阻塞

Java Spring@Async带注释的方法在调用自身时会阻塞,java,spring,asynchronous,Java,Spring,Asynchronous,在我的软件中,我使用@Async在Tomcat启动时,从后台的Bean调用某个方法,这是可以预期的 但是,在某些已定义的情况下,该方法所做的是失败的,并且该方法myUtil.connect()调用自身,然后重试 基本代码如下所示 bean定义: import org.springframework.context.annotation.Bean; import package.MyService; @Bean(initMethod = "init", destroyMethod = "dest

在我的软件中,我使用
@Async
Tomcat
启动时,从后台的
Bean
调用某个方法,这是可以预期的

但是,在某些已定义的情况下,该方法所做的是失败的,并且该方法
myUtil.connect()
调用自身,然后重试

基本代码如下所示

bean定义:

import org.springframework.context.annotation.Bean;
import package.MyService;

@Bean(initMethod = "init", destroyMethod = "destroy")
MyService myService() {
    MyService bean = new MyService();
    return bean;
}
还有MyService bean:

import javax.inject.Inject;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
public class MyService {

    @Inject
    private MyUtil         myUtil;

    @Async
    public void init() {
        myUtil.connect();
    }
}
我也尝试过用
@Async
注释方法
connect()
,因为它调用自己,
@Async
也会使它在后台运行,但没有成功

是否有办法确保后续调用
connect()
“保留”在后台

编辑:


connect()
包装成一个真正起作用的函数是否有效?通过这种方式,
connect()
只需调用一次,如果出现故障,包装的函数将自动调用。

我的需求的工作解决方案如下所示:

首先,我必须将
@EnableAsync
添加到我的根上下文配置类(这是创建
MyService
bean的配置类)

然后我将
@Async
注释从
MyService
移动到
MyUtils

MyService类:

import javax.inject.Inject;
import org.springframework.stereotype.Component;

@Component
public class MyService {

    @Inject
    private MyUtil         myUtil;


    public void init() {
        myUtil.connect();
    }
}
MyUtil类:

@Component
public class MyUtil {

    @Async
    public void connect() {}

}
位于的文档提供了必要的提示:

要异步初始化Springbean,请执行以下操作: 必须使用单独的初始化Springbean来调用 @然后在目标上使用异步带注释的方法


哪个方法调用自己?调用的位置和内容
init()
?请参阅我更新的问题
@ASync
可能正在使用代理,并且内部调用未被代理。
connect()
是否调用自身?你预计会发生什么?到底发生了什么?