【问题标题】:Connection pool in tomcat 7tomcat 7中的连接池
【发布时间】:2014-04-18 08:22:13
【问题描述】:

这是我当前的配置

 <Resource
    name="jdbc/data"
    auth="Container"
    type="javax.sql.DataSource"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/TABLE_NAME"
    username="USER_NAME"
    password="PASSWORD" 
    initialSize="10"
    maxActive="50"
    suspectTimeout="120"
    minIdle="10"
    maxIdle="20"
    maxWait="1000"
    testOnBorrow="true"
    timeBetweenEvictionRunsMillis="30000"
    minEvictableIdleTimeMillis="60000"
    validationQuery="SELECT 1 FROM DUAL"
    validationInterval="40"
    removeAbandoned="true"
    removeAbandonedTimeout="100"
/>

这是在全局上下文中,因此多个应用程序可以使用它。 我对参数有点困惑。需要一些细节。 我的理解是

initalSize 池启动时创建的连接数。

maxActive 一次最多可以激活 50 个连接。

minIdle 10 个连接在不使用连接时保持空闲,否则在maxwait 之后关闭

maxIdle 20 个连接可以存储为空闲。

但是当我启动 tomcat 服务器时,我可以看到有 30 个 IDLE 连接永远存在。为什么会发生这种情况?我错过了什么吗?根据我对连接池的理解,应该只创建 10 个连接并且可以保持空闲模式。 mysql my.cnf

【问题讨论】:

    标签: java tomcat tomcat7 connection-pooling


    【解决方案1】:

    当你说...

    这是在全局上下文中,因此多个应用可以使用它。

    你的具体意思是什么?它是在 GlobalNamingResources 块中的 $CATALINA_BASE/conf/server.xml 中还是在 $CATALINA_BASE/conf/context.xml 中?

    $CATALINA_BASE/conf/server.xmlGlobalNamingResources 块中定义一个 Resource 标签将导致只有一个资源被在整个服务器上创建。然后可以通过将 ResourceLink 标记添加到 Context 配置,将其共享给部署在系统上的应用程序。

    $CATALINA_BASE/conf/context.xml 中定义一个资源 将为部署到您的Tomcat 实例的每个应用程序定义一次资源。因此,如果您部署了三个应用程序,您最终将获得三个独立的资源。这是一个猜测,但可能是您看到 30 个与数据库服务器的连接的原因。

    【讨论】:

    • 真实猜测 :-) 我在 $CATALINA_BASE/conf/context.xml 中定义了一个资源
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多