Tomcat连接池,为web-app安装jdbc驱动程序

我正在创建一个以Tomcat 6作为容器的Web应用程序,我正在尝试使用连接池。 我使用的jdbc驱动程序是jtds-1.2.2
当驱动程序jar放在${Catalina_Home}/lib下时,池工作正常,但我的托管服务提供商不允许我这样做。

当驱动程序放在WEB-INF/lib时,我得到一个CNF-Exception。

有人可以提供一个我不需要访问tomcat安装的解决方案吗?

如果您无法控制服务器,那么您就丢失了。 只需自己创建连接池,而不是让容器执行它。

我建议使用c3p0 (这比Tomcat的内置DBCP好得多,因为它被锁定到一个线程)。 将c3p0库放在/WEB-INF/lib并根据其文档创建它:

 ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setDriverClass("org.postgresql.Driver"); dataSource.setJdbcUrl("jdbc:postgresql://localhost/testdb"); dataSource.setUser("dbuser"); dataSource.setPassword("dbpassword"); // ... Connection connection = null; // ... try { connection = dataSource.getConnection(); // ... } finally { // ... if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {} // Always close resources in finally! } 

要使用Tomcat的连接池, 必须将JDBC驱动程序的jar复制到$CATALINA_HOME/lib (如文档所示 ),以便通过Common类加载器可以看到驱动程序类,或者DBCP将无法找到它,因此ClassNotFoundException 。 Tomcat的类加载器层次结构如下所示:

      引导
           |
       系统
           |
       共同
        / \
   Webapp1 Webapp2 ... 

来自WEB-INF/libCommon类加载器中是不可见的(这是一件好事)。

如果您无法将驱动程序复制到$CATALINA_HOME/lib ,则无法使用Tomcat的连接池。 在这种情况下,您将必须使用独立的连接池(并将其与WEB-INF/lib驱动程序捆绑在一起)。 而我在这里第二个BalusC ,我会使用C3P0。