首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jboss连接池

jboss连接池
EN

Stack Overflow用户
提问于 2009-07-17 22:15:54
回答 2查看 7.7K关注 0票数 0

我有一个与准备好的Steatement池相关的问题(跨所有连接)。这是配置文件

代码语言:javascript
复制
<datasources>
  <local-tx-datasource>
    <jndi-name>JNDI-NAME</jndi-name>
    <connection-url>jdbc:mysql://<server_name>/<database_name>?useServerPrepStmts=true</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>xxx</user-name>
    <password>xxxxx</password>
    <min-pool-size>10</min-pool-size>
    <max-pool-size>20</max-pool-size>
    <idle-timeout-minutes>20</idle-timeout-minutes>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
    <background-validation>true</background-validation>
    <background-validation-minutes>5</background-validation-minutes>
    <prepared-statement-cache-size>100</prepared-statement-cache-size>
    <share-prepared-statements>true</share-prepared-statements>
    <!-- sql to call when connection is created
    <new-connection-sql>some arbitrary sql</new-connection-sql>
      -->
    <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
    <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
      -->
    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml -->
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

看起来这行字:

代码语言:javascript
复制
<background-validation-minutes>5</background-validation-minutes> 

不会对预准备语句造成任何问题,但是:

代码语言:javascript
复制
<idle-timeout-minutes>20</idle-timeout-minutes>

导致如果在过去20分钟内没有流量,则删除并重新创建所有连接。因此,现有的预准备语句将从缓存的预准备语句池中删除。如何克服这个问题?我必须使用空闲超时分钟,因为MySQL服务器在8小时后关闭连接

EN

回答 2

Stack Overflow用户

发布于 2009-07-17 14:45:11

是否设置空闲timeout=480分钟数?

票数 0
EN

Stack Overflow用户

发布于 2019-05-28 10:05:28

您一定是将PreparedStatement用于错误的目的。PreparedStament主要用于在单个流中使用不同的参数多次执行同一查询。一旦它的需求被完成,它应该被关闭,如下所示。

代码语言:javascript
复制
PreparedStatement pstmt = con.prepareStatement("insert into Emp(name) values(?)");
pstmt.setString(1, "foo");
int i1=stmt.executeUpdate();  // inserted one record
pstmt.setString(1, "bar");
int i2=stmt.executeUpdate(); // inserted 2nd record
pstmt.close(); // close prepared statement 
con.close();

看起来,对于您的需求,CallableStatementPreparedStatement更相关。

探索jdbc here中的CallableStatement

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1143576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档