2017-10-05 60 views
0

我们使用websphere作为应用程序服务器和spring-data来访问oracle数据库。 如果我们在我们的应用程序中调用起始页面,将从数据库中并行加载三个不同框架的不同数据和来自的大量标签。 现在,如果我们在打开起始页的同时监视数据库,则打开和关闭不同的数据库会话。但是,三个会话(获取标签)保持打开,但不活动。 我认为三个会话,因为我有三个帧,他们都并行地加载了很多标签。长时间打开数据库会话

在websphere,spring-data或oracle中是否有一种功能可以识别何时经常执行sql语句并保持会话打开?

或者你知道为什么会议保持开放吗?

回答

0

WebSphere Application Server数据源支持汇集连接并缓存预准备语句。这是默认启用的。只要您的应用程序正在使用WebSphere Application Server数据源(通过资源注入@Resource或JNDI查找获得)并将java.sql.PreparedStatement用于SQL命令,则PreparedStatements将保存在缓存中并根据需要重新使用。从你的问题中不清楚你是否想要这种行为,或者如果你想避免它。如果您希望禁用所有预准备语句的缓存,则可以将数据源的statementCacheSize配置为0.或者,如果只有您希望避免缓存的特定准备语句,则可以通过编程方式在其上设置JDBC可延迟性提示:

preparedStatement.setPoolable(false); 
+0

为什么数据库会话是打开的,如果该值被分割?每次加载不同的标签,并不总是相同的。 – bg89

+0

WebSphere Application Server完成的预备语句缓存只涉及缓存java.sql.PreparedStatement,而不是SQL查询返回的值或参数值。 – njr

+0

我们使用getJdbcTemplate()。call(...)连接到数据库。这是否也使用缓存?我不会禁用此缓存。我只想知道为什么这个会议保持开放。 – bg89