gpt4 book ai didi

java - 尝试资源失败但尝试有效

转载 作者:行者123 更新时间:2023-12-01 07:00:36 25 4
gpt4 key购买 nike

我正在尝试设置一个监听 RabbitMQ 服务器的服务,并且我已经使用 RabbitMQ Sample code from Github 设置了代码,其中包括以下 try-with-resources block

try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// code here
}

当我使用相同的代码并使用 java -cp myJar.jar MyService 构建和运行此服务时,它会立即启动和结束(并且echo $?返回0)

但是,如果我用以下内容替换该 block ,那么它可以使用相同的命令正常工作,并且我可以启动 RabbitMQ 实例的监听器

try {
Connection connection = factory.newConnection();
Channel channel = connection.createChannel());

// code here
}
<小时/>

即使我创建数据库连接也会发生同样的情况

try (Connection connection = dataSource.getConnection()) {
//code here
}

失败但是

try {
Connection connection = dataSource.getConnection();
//code here
}

工作正常,并且允许我使用连接来向数据库中输入条目。

<小时/>

为什么会发生这种情况?我使用的是 OpenJDK 11.0.2 并且此服务是独立的,但代码库的其余部分是 JAX-RS 驱动的 Rest API(如果有帮助的话)。

最佳答案

当 block 退出时,try-with-resources 构造会关闭资源。您的基本 try block 代码不会关闭任何内容。这就是两者的区别。

当您使用 try-with-resources 时,您实际上需要对资源进行一些操作。

如果您正在编写代码,其中您打开的资源需要“长期存在”,那么 try-with-resources 不是正确的构造(尽管,通常,这意味着您正在编写的类本身应该是自动关闭)。

关于java - 尝试资源失败但尝试有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56613669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com