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/lib
在Common类加载器中是不可见的(这是一件好事)。
如果您无法将驱动程序复制到$CATALINA_HOME/lib
,则无法使用Tomcat的连接池。 在这种情况下,您将必须使用独立的连接池(并将其与WEB-INF/lib
驱动程序捆绑在一起)。 而我在这里第二个BalusC ,我会使用C3P0。