Java 使用资源尝试失败,但尝试有效
我正在尝试设置一个侦听RabbitMQ服务器的服务,并使用设置了代码,其中包括以下try with resources块 当我使用相同的代码并使用java-cp myJar.jar MyService构建和运行此服务时,它只是立即启动和结束,echo$?返回0 但是,如果我用以下命令替换该块,那么使用相同的命令它就可以正常工作,并且我能够启动RabbitMQ实例的侦听器Java 使用资源尝试失败,但尝试有效,java,rabbitmq,try-catch,java-11,try-with-resources,Java,Rabbitmq,Try Catch,Java 11,Try With Resources,我正在尝试设置一个侦听RabbitMQ服务器的服务,并使用设置了代码,其中包括以下try with resources块 当我使用相同的代码并使用java-cp myJar.jar MyService构建和运行此服务时,它只是立即启动和结束,echo$?返回0 但是,如果我用以下命令替换该块,那么使用相同的命令它就可以正常工作,并且我能够启动RabbitMQ实例的侦听器 try { Connection connection = factory.newConnection();
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(如果有帮助)。try with resources构造在块退出时关闭资源。您的基本try块代码不会关闭任何内容。这就是两者的区别 当您使用try-with-resources时,您需要实际使用该资源 如果您在编写代码时打开的资源需要“长寿命”,那么使用资源不是正确的构造,但一般来说,这意味着您正在编写的类本身应该是自动关闭的。在编程中使用任何概念时,您必须了解您在做什么 try-with-resource的全部要点是,当try块结束时,保证关闭资源 但请注意:仅使用try块是不够的。像数据库连接这样的关键资源需要独特的、有意识的生命周期管理。换句话说:你应该在需要这些资源的时候一直保留它们。您最好确保在不再需要资源时不会错误地忘记关闭它
因此,你不应该轻松地放弃对资源的尝试。而是要确保需要这样一个资源的代码在这样一个try-with-resource块的范围内被调用 很难相信您的代码能与您发布的内容一起工作,因为像try{…}这样的块甚至不能编译。
try {
Connection connection = dataSource.getConnection();
//code here
}