java - Tomcat 和 JDBC 连接池

标签 java mysql tomcat servlets jdbc

我正在尝试使用 tomcat 设置与 mysql 数据库的连接池。我的简单应用程序称为 Projekt,在我的 Apache/conf/Catalina/localhost 的 Projekt.xml 中,我有

<Context docBase="Projekt.war" path="/Projekt">
  <Resource name="jdbc/mysqldb"
      auth="Container"
  factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
      type="javax.sql.DataSource"
      driverClassName="com.mysql.jdbc.Driver"
      url="jdbc:mysql://localhost:3306/Music"
      username="andrzej"
      password="qazxsw"
      maxActive="20"
      maxIdle="30"
      maxWait="5"
  />
</Context> 

我的应用的 web.xml

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>org.jtp.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/Hai</url-pattern>
</servlet-mapping>

<resource-ref>     
        <description>DB Connection</description>     
       <res-ref-name>jdbc/mysqldb</res-ref-name>     
       <res-type>javax.sql.DataSource</res-type>     
       <res-auth>Container</res-auth>     
 </resource-ref>

在我的 Apache/lib 文件夹中,我有

mysql-connector-java-5.1.18-bin.jar

但是当我执行这段代码时:

Context initContext  = new InitialContext();
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb");
System.out.println(dataSource.getConnection().createStatement().
            execute("select * from Users"));

我得到异常

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

我现在很困惑,在某些地方我读到它可能是由于没有将驱动程序放在 tomcat/lib 中造成的,但我有它并且它可以工作,因为当我使用手动连接测试驱动程序时它工作了。

对于我的设置,我试图遵循 http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

编辑: 终于让它工作了,似乎我在其中一个文件中有一些左上下文标签,所以在解析时他覆盖了其他属性,所以最后都是我的错。

最佳答案

要使用 Tomcat 实现 JDBC 连接池,有一个替代 XML 配置文件的方法。我一直无法使那些 Contextresource-ref 标签起作用。此外,如果您真的不需要 JNDI,那么这些标签就太过分了。特点。

另一种方法是使用Java 代码来配置 Tomcat 的JDBC 连接池。请参阅 Tomcat 7 文档页面的 Plain Ol' Java 部分中的示例代码,The Tomcat JDBC Connection Pool .

基本上,你:

  1. 实例化一个PoolProperties对象来存储您的设置(数据库的 URL、数据库用户名、数据库密码等)。
  2. 实例化 Tomcat DataSource对象,同时传递上面步骤 # 1 中的 PoolProperties 对象。

简单易行。像这样……

PoolProperties p = new PoolProperties();
p.setUrl( jdbc:postgresql://localhost:5432/" + "my_database_name" );
p.setDriverClassName( "org.postgresql.Driver" );
p.setUsername( "someUserName" );
p.setPassword( "somePassword" );
…
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource( p );
datasource.setPoolProperties(p);

要使用数据源...

Connection conn = null;
try {
    conn = datasource.getConnection();
    …

DataSource实例可以存储:

关于java - Tomcat 和 JDBC 连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9212806/

相关文章:

java - 你能直接从 eclipse 发布 .war 到 web 服务器吗

java - 如何防止列表中字符参数重复?

java - 如何使用 stanford nlp 删除停用词

JAVA GUI - 从 MYSQL 获取并显示数据

php - php 中出现 MySQL 错误,但 phpmyadmin 中没有错误

java - 从 Java 代码启动和停止 Tomcat

jsf - 通过jsf显示来自外部位置的图像

java - 加载properties文件获取键值对

mysql - 创建触发器将 UNIX_TIMESTAMP() 插入日志表

java - 如何知道 resourceBoundle 加载的属性的绝对路径