java - Tomcat 全局连接池获取错误

标签 java mysql tomcat database-connection connection-pooling

我在 tomcat 网络容器中部署了三个网络应用程序。

我的 server.xml 文件配置是:

<Service name="app1">
   <Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="20000" 
           redirectPort="8443" />
   <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="app1"
        unpackWARs="true" autoDeploy="true">
      </Host>
   </Engine>
</Service>
<Service name="app2">
   <Connector port="8082" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="20000" 
           redirectPort="8443" />
   <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="app2"
        unpackWARs="true" autoDeploy="true">
      </Host>
   </Engine>
</Service>
<Service name="app3">
   <Connector port="8083" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="20000" 
           redirectPort="8443" />
   <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="app3"
        unpackWARs="true" autoDeploy="true">
      </Host>
   </Engine>
</Service>

我在 context.xml 文件中添加了这个连接池设置。

<Resource name="test" auth="Container"
        type="javax.sql.DataSource" username="root" password="root"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/database"
        maxActive="100" maxIdle="30" maxWait="10000"/>

在第一个应用程序“app1”中,数据库连接工作正常,但在第二个应用程序“app2”中,我收到此错误。

javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp].

我的java代码是:

public static Connection getConnection() {
    Context initContext;
    DataSource dataSource;
    Connection con=null;
    try {
        initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        dataSource = (DataSource) envContext.lookup("test");
        con=dataSource.getConnection();
    } catch (NamingException e) {
        LOG.error(e);
    } catch (SQLException e) {
        LOG.error(e);
    }

有什么解决办法吗?

最佳答案

我不确定这是否有效,但我将其用作

InitialContext initCtx = new InitialContext();
return (DataSource)initCtx.lookup("java:comp/env/"+jndiDb);

//jndiDB在我的例子中定义为jndi/TestDB//TestDB是数据库的名字

在 context.xml 中,我有

<Resource  .... url="jdbc:sqlserver://192.168.101.124:1433;  name="jdbc/TestDB" databaseName="TestDB" />

关于java - Tomcat 全局连接池获取错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34457465/

相关文章:

mysql - 如何在没有模式的情况下将 JSON 存储在数据库中

java - 在 Oracle 数据库中调用查询时绑定(bind)后更改参数值

java函数读取文件夹中的文件

java - svn 导致 eclipse 中的构建错误

java - RouteToRecipients Java DSL 无法将多个消息发送到 defaultOutputChannel

php - 使用别名从 View 更新 MySQL 表

mysql - 使用 Ruby/MySQL 构建有效的 MySQL 查询

tomcat - 如何在 Tomcat 上运行 Sonar 4.1

apache - Tomcat 连接池耗尽

JAVACC && JJTree (.jjt) 插入 ||解析两个标记时将符号放入树中