Ist es sinnvoll, während der Spring-Initialisierung zu blockieren?
PHP中文网
PHP中文网 2017-06-23 09:14:20
0
3
932

Lesen Sie den Code von NettyRPC und stellen Sie fest RpcServer 中实现了 Spring 的 InitializingBean, dass ein Netty-Server in der Methodenimplementierung gestartet und blockiert wurde.

@Override
public void afterPropertiesSet() throws Exception {
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {       
        // 前略...        
        future.channel().closeFuture().sync();
    } finally {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
}

Quellcode-Adresse:
https://github.com/luxiaoxun/...

Was ich fragen möchte, ist, ob sich eine solche Blockierung auf die Initialisierung von Spring auswirkt (ich habe den Spring-Quellcode nicht gelesen, daher kenne ich die Situation nicht. Bitte geben Sie mir einen Rat ...

PHP中文网
PHP中文网

认证高级PHP讲师

Antworte allen(3)
黄舟

感觉自己问了个很笨的问题... Spring容器的初始化过程是单线程的, 在这里阻塞住了自然就表示... 后续工作没法进行了.

在 bean 配置文件的最后面加了个测试的 Bean , 在初始化的时候会打log, 结果并没有打出来.

巴扎黑

这个应该是合理的,因为如果多线程实例化Bean,那么Bean和Bean之间的依赖就很难处理了,代码复杂度陡升。

洪涛

合理,原因楼上已经说了。如果异步初始化bean的需求,重写BeanFactory的逻辑就好了,前提是你要确保这些bean没有相互依赖关系

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage