tomcat下配置jndi数据源c3p0
Tomcat下通过JNDI配置数据源,使用c3p0连接池 首先在打开tomcat找到在conf文件下,找到server.xml 在server.xml文件中找到标签 在下面添加如下配置
<Resource name="jdbc/mysql" auth="Container" factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource" driverClass="com.mysql.jdbc.Driver" idleConnectionTestPeriod="60" acquireRetryAttempts="3" checkoutTimeout="10000" maxPoolSize="50" minPoolSize="2" acquireIncrement="2" user="root" password="zhousong" jdbcUrl="jdbc:mysql://localhost:3306/mysql1"/>
需要注意的是在不同早期版本的tocmat中user,password,factory,driverClass等属性名称发生了改变,需要使用的时候需要注意
然后注意这些属性名称不能写错 我在web-inf目录下创建过context.xml文件 发现和网上很多博文的操作方法一致时 时常抛出错误
最常见的错误是 抛出driverclass is null这样的问题 然后让我找这个错误找了一个晚上
他们都是在web-inf目录下创建context.xml文件 在web.xml中添加属性 最后调用 但是我自己尝试却一直报错 这个问题困扰我几天
最后通过在server.xml中修改数据源 在context.xml中修改添加路径连接 在web.xml文件中添加属性的方式,将这个问题解决了
然后再context.xml中添加如下
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSource"/>
最后在web.xml中添加
<resource-ref> <description>MySQL DB Connection</description> <res-ref-name>jdbc/mysql</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref>
然后最后可以通过一个jsp或者一个servlet进行测试
package C3p0DemoTest; import java.sql.Connection; import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; public class C3p0Demo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ //C3p0在项目中的实现 Context.xml的存储路径在con文件的localhost里面 是对Context的整个配置 //也是实现C3p0连接池的方法 try { //此类是执行命名操作的初始上下文。用于解析该 URL Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysql"); System.out.println(ds.getConnection()); System.out.println("ok"); } catch (Exception e) { e.printStackTrace(); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException{ } }
然后效果如图
这里进行访问 主要Day18_4是我自己自学的项目名称 你需要改为自己的项目名称
C3p0Demo也需要和自己的项目的servlet相对于 具体路径 看你的servlet路径
然后网上的一些资源 自己亲自动手试试就知道好坏 反正我被在meta-inf下配置context.xml搞怕了 别着急 出错了的话
恐惧源于无知,代码改变世界