我正在尝试使用tomcat设置与mysql databe的连接池。我的简单应用程序称为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
编辑:终于使它工作,似乎我在其中一个文件中有一些左上下文标记,因此在解析他时,他会覆盖其他属性,所以最后都是我的错。
看起来您缺少Context envCtx = (Context) initCtx.lookup("java:comp/env"); JNDI查找,应该这样进行:
Context envCtx = (Context) initCtx.lookup("java:comp/env");
// Obtain our environment naming context Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); // Look up our data source DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); // Allocate and use a connection from the pool Connection conn = ds.getConnection();
来自http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources- howto.html的文档。