Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 Blob的输入流_Java_Performance_Streaming_Weblogic_Mtom - Fatal编程技术网

Java Blob的输入流

Java Blob的输入流,java,performance,streaming,weblogic,mtom,Java,Performance,Streaming,Weblogic,Mtom,我有一个场景,需要将文件内容从DB直接流式传输到客户端浏览器 所以我使用普通的jdbcrs.getBlob()然后blob.getBinaryStream()稍后写入http输出流 我注意到(一件非常好的事情)一旦我通过blob获得inputstream,db连接就会被重新调谐到数据源池。(网络逻辑) 现在我问你,我的观察是正确的吗?因为我担心,对于需要很长时间的下载,db连接将保留到请求,以便能够流式传输文件 显然,一旦流媒体启动,数据库连接就不再使用了 将在这里模拟一些代码以便更好地理解 @

我有一个场景,需要将文件内容从DB直接流式传输到客户端浏览器

所以我使用普通的jdbc
rs.getBlob()
然后
blob.getBinaryStream()稍后写入http输出流

我注意到(一件非常好的事情)一旦我通过blob获得inputstream,db连接就会被重新调谐到数据源池。(网络逻辑)

现在我问你,我的观察是正确的吗?因为我担心,对于需要很长时间的下载,db连接将保留到请求,以便能够流式传输文件

显然,一旦流媒体启动,数据库连接就不再使用了

将在这里模拟一些代码以便更好地理解

@Trasactional
public void InputStream getIsFromBlob(....){

 ....
is = blob.getBinaryStream();
...

return is;

}
稍后,在servlet中使用该方法,比如说,并在http outputstream中写入is的内容


谢谢

如果不看一下代码,我认为你的想法是不对的。必须专门关闭连接才能关闭(通常在finally块中),或者指定连接在数据库上的活动时间。
From:数据库服务器将超时并回收它。有关默认值以及如何更改默认值,请参阅特定于DB服务器的管理手册。以MySQL为例,它的等待超时设置默认为28800秒(8小时)。

您所说的是正确的,容器可以自动关闭连接。当对连接的所有引用都消失时,该连接将在垃圾收集期间返回到连接池。然而,这通常被认为是糟糕的编程实践,因为它通常是连接泄漏的主要原因。我建议在您不需要通过finally块时关闭连接

对于你最初的问题,我认为你的观察是正确的。首先,通过二进制inputstream从blob读取内容。此流需要DB连接。但是在从inputstream读取之后,您就不再需要DB连接了。在您的情况下,该方法存在,垃圾收集开始并将连接返回到池。稍后,您可以通过HttpOutputStream将二进制内容流写入浏览器。此流与数据库无关


同样,我强烈建议不要依赖垃圾收集将连接返回到连接池。

当容器(jee app)存在该方法时,连接会自动关闭,并作为结果传递InputStream。可能我不够清楚…我不需要提交事务,关闭连接等。这是由Spring(在jee容器中使用)处理的。这一切都是由框架透明完成的。我注意到,用于获取blob的连接返回到池中(通过监控管理控制台),流式传输blob的内容不需要此连接当对连接的所有引用都消失时,该连接将在垃圾收集期间返回到连接池“这完全是错误的……垃圾连接与将连接返回池无关。在WRP连接上调用close将返回到池的连接。每个容器可能有一种机制将泄漏的连接返回到池…即;It’不同的请看一看。至少在Weblogic中,垃圾收集与根据WLS文档返回到池的连接有关。当您说“流式传输blob的内容”时,您是指将流写入浏览器还是从blob读取流?根据我对你们步骤的理解,有两个步骤。同样的问题