相关疑难解决方法(0)

tomcat 7忽略了我的context.xml

我希望这是一个愚蠢的事情.但我一直盯着它看太久了.

我在Linux上升级到Tomcat 7(从6开始),它忽略了我的context.xml文件.如果我在server.xml中包含Context(数据源),它可以正常工作.但我想最终从server.xml中获取这些东西.

我使用分离的上下文在Windows/Eclipse中运行Tomcat 7,它运行正常.

我尝试过Host copyXML参数.即使它确实复制了context.xml,它也不会使用它...除非我将它包含在server.xml中的Host中.当它失败时,它抱怨它无法获得我的MySQL连接:"无法获得连接,DataSource无效"

我确定配置的其余部分很好,因为当我将它粘贴到server.xml时它可以工作...

有人可以指出我错过了什么吗?不应该这么困难.谢谢!

顺便说一句:在CentOS 5.9(64)上,它是简单的Tomcat7(不是rpm),JDK-7u11.

位置:

/var/webapps/shop1
    query.jsp
/var/webapps/shop1/META-INF
    context.xml
Run Code Online (Sandbox Code Playgroud)

在server.xml中:

<Host name="dev3.domain.net" appBase="/var/webapps" 
    unpackWARs="true" autoDeploy="true">

    <Context docBase="shop1" path="" reloadable="true" />
</Host>
Run Code Online (Sandbox Code Playgroud)

context.xml中:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
    <Resource name="jdbc/shop1db" auth="Container"
            type="javax.sql.DataSource"
            factory="org.apache.commons.dbcp.BasicDataSourceFactory"
            maxActive="50" maxIdle="25" maxWait="10000"
            username="user" password="pass"
            driverClassName="com.mysql.jdbc.Driver"
            validationQuery="SELECT 1"
            url="jdbc:mysql://localhost/shop1"
            logAbandoned="true" removeAbandoned="true" removeAbandonedTimeout="60"
    />
</Context>
Run Code Online (Sandbox Code Playgroud)

在web.xml中:

<context-param>
    <param-name>javax.servlet.jsp.jstl.sql.dataSource</param-name>
    <param-value>jdbc/shop1db</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

tomcat context.xml server.xml tomcat7

7
推荐指数
1
解决办法
2万
查看次数

Tomcat连接池配置:DataSource类型和"Too many connection"错误

我通过JNDI资源使用tomcat连接池.

context.xml:

<Resource name="jdbc/mydb" auth="Container" type="javax.sql.DataSource"
          username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
          maxActive="1000" maxIdle="100" maxWait="10000"
          url="jdbc:mysql://localhost:3306/mydatabase" 
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" />
Run Code Online (Sandbox Code Playgroud)

web.xml:

<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Run Code Online (Sandbox Code Playgroud)

从我需要数据库连接的java类中,我执行以下查找:

Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/comp/env/jdbc/mydb");
Run Code Online (Sandbox Code Playgroud)

我的第一个疑问是DataSource类型.是否使用相同javax.sql.DataSourceorg.apache.tomcat.jdbc.pool.DataSource

而且,有时我会收到"Too many connections"错误.我已经阅读了很多有关此问题的stackoverflow问题/答案,但我没有成功地理解问题所在.

我已经关注了tomcat文档,并且我正确地关闭了结果集,语句和连接.

编辑

我的tomcat版本是7.0.26.所以应该有一个bug(参见informatik01用户建议的链接)

java mysql tomcat database-connection connection-pooling

7
推荐指数
2
解决办法
2万
查看次数

当我使用Tomcat 7 JDBC连接池取消部署webapp时,为什么连接仍然存在?

我有一个部署到Tomcat 7.0.22的最小Spring Web应用程序 - 它包含几个页面,一个控制器,一个服务和一个DAO,它有一个运行SELECT查询的方法.

webapp配置为使用新的Tomcat JDBC连接池 - 这是webapp的context.xml中的资源配置:

<Resource name="jdbc/myDB"
          auth="Container"
          type="javax.sql.DataSource"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@blah blah"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
          maxActive="15"
          initialSize="5"
          maxWait="40000"
          validationQuery="select 1 from dual"
          removeAbandoned="true"
          removeAbandonedTimeout="300"
          logAbandoned="false"
          username="user"
          password="pass"
          testOnBorrow="true"
          validationInterval="30000"
          timeBetweenEvictionRunsMillis="60000"
          minEvictableIdleTimeMillis="60000" />
Run Code Online (Sandbox Code Playgroud)

当我部署webapp时,我看到出现了5个连接(从SQL Developer查询v $ session).当我取消部署webapp时,连接仍然存在(状态为WAITING).每次重新部署我的webapp时,都会显示5个新连接.

看来游泳池仍在闲逛 - 而Tomcat经理应用程序中的"Find Leaks"按钮告诉我应用程序正在泄漏内存.

取消部署webapp时如何摆脱池?

tomcat connection-pooling jdbc tomcat7

6
推荐指数
1
解决办法
3741
查看次数