Tomcat 与 数据库连接池 的小坑
连接池的优点众所周知。
我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用。
关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可能随版本更新有所变化,在实际应用时一定要注意这个坑,特别注意Tomcat启动输出中是否有警告或者其他错误,以免被简单的问题卡死。
之前参考孤傲苍狼dalao的博客配置Tomcat内置连接池,因为使用了旧版配置属性,最大连接数maxActive,而新版Tomcat已经用maxTotal取代之,导致最大连接数配置无效默认为8,失了智一样困扰了一个晚上,第二天才猛的找回智商在Tomcat启动输出中发现警告:
22-Jan-2018 12:44:57.030 警告 [localhost-startStop-1] org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory.getObjectInstance Name = DBPool Property maxActive isnot used in DBCP2, use maxTotal instead. maxTotal default value is 8. You have set value of "100" for "maxActive" property, which is being ignored.
查了一下才知道新版Tomcat已经不认这个属性了。
教训:参考别人经验一定要注意别人使用的软件版本,注意软件告诉你的信息,及时发现错误,切忌生搬硬套。
孤傲苍狼dalao数据库连接池的博客:https://www.cnblogs.com/xdp-gacl/p/4002804.html
在此进行一些摘要,特别注意dalao似乎用的Tomcat7,此处不做修改,使用时注意版本变化!
2.2、编写数据库连接池
编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:
- Connection getConnection()
- Connection getConnection(String username, String password)
实现DataSource接口,并实现连接池功能的步骤:
- 在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。
- 实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。
- 当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。Collection保证将自己返回到LinkedList中是此处编程的难点。
数据库连接池核心代码
使用动态代理技术构建连接池中的connection
1 proxyConn = (Connection) Proxy.newProxyInstance(this.getClass()
2 .getClassLoader(), conn.getClass().getInterfaces(),
3 new InvocationHandler() {
4 //此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行
5 public Object invoke(Object proxy, Method method,
6 Object[] args) throws Throwable {
7 if (method.getName().equals("close")) {
8 pool.addLast(conn);
9 return null;
10 }
11 return method.invoke(conn, args);
12 }
13 });
数据库连接池编写范例:
1 package me.gacl.demo;
2
3 import java.io.InputStream;
4 import java.io.PrintWriter;
5 import java.lang.reflect.InvocationHandler;
6 import java.lang.reflect.Method;
7 import java.lang.reflect.Proxy;
8 import java.sql.Connection;
9 import java.sql.DriverManager;
10 import java.sql.SQLException;
11 import java.util.LinkedList;
12 import java.util.Properties;
13 import javax.sql.DataSource;
14
15 /**
16 * @ClassName: JdbcPool
17 * @Description:编写数据库连接池
18 * @author: 孤傲苍狼
19 * @date: 2014-9-30 下午11:07:23
20 *
21 */
22 public class JdbcPool implements DataSource{
23
24 /**
25 * @Field: listConnections
26 * 使用LinkedList集合来存放数据库链接,
27 * 由于要频繁读写List集合,所以这里使用LinkedList存储数据库连接比较合适
28 */
29 private static LinkedList<Connection> listConnections = new LinkedList<Connection>();
30
31 static{
32 //在静态代码块中加载db.properties数据库配置文件
33 InputStream in = JdbcPool.class.getClassLoader().getResourceAsStream("db.properties");
34 Properties prop = new Properties();
35 try {
36 prop.load(in);
37 String driver = prop.getProperty("driver");
38 String url = prop.getProperty("url");
39 String username = prop.getProperty("username");
40 String password = prop.getProperty("password");
41 //数据库连接池的初始化连接数大小
42 int jdbcPoolInitSize =Integer.parseInt(prop.getProperty("jdbcPoolInitSize"));
43 //加载数据库驱动
44 Class.forName(driver);
45 for (int i = 0; i < jdbcPoolInitSize; i++) {
46 Connection conn = DriverManager.getConnection(url, username, password);
47 System.out.println("获取到了链接" + conn);
48 //将获取到的数据库连接加入到listConnections集合中,listConnections集合此时就是一个存放了数据库连接的连接池
49 listConnections.add(conn);
50 }
51
52 } catch (Exception e) {
53 throw new ExceptionInInitializerError(e);
54 }
55 }
56
57 @Override
58 public PrintWriter getLogWriter() throws SQLException {
59 // TODO Auto-generated method stub
60 return null;
61 }
62
63 @Override
64 public void setLogWriter(PrintWriter out) throws SQLException {
65 // TODO Auto-generated method stub
66
67 }
68
69 @Override
70 public void setLoginTimeout(int seconds) throws SQLException {
71 // TODO Auto-generated method stub
72
73 }
74
75 @Override
76 public int getLoginTimeout() throws SQLException {
77 // TODO Auto-generated method stub
78 return 0;
79 }
80
81 @Override
82 public <T> T unwrap(Class<T> iface) throws SQLException {
83 // TODO Auto-generated method stub
84 return null;
85 }
86
87 @Override
88 public boolean isWrapperFor(Class<?> iface) throws SQLException {
89 // TODO Auto-generated method stub
90 return false;
91 }
92
93 /* 获取数据库连接
94 * @see javax.sql.DataSource#getConnection()
95 */
96 @Override
97 public Connection getConnection() throws SQLException {
98 //如果数据库连接池中的连接对象的个数大于0
99 if (listConnections.size()>0) {
100 //从listConnections集合中获取一个数据库连接
101 final Connection conn = listConnections.removeFirst();
102 System.out.println("listConnections数据库连接池大小是" + listConnections.size());
103 //返回Connection对象的代理对象
104 return (Connection) Proxy.newProxyInstance(JdbcPool.class.getClassLoader(), conn.getClass().getInterfaces(), new InvocationHandler(){
105 @Override
106 public Object invoke(Object proxy, Method method, Object[] args)
107 throws Throwable {
108 if(!method.getName().equals("close")){
109 return method.invoke(conn, args);
110 }else{
111 //如果调用的是Connection对象的close方法,就把conn还给数据库连接池
112 listConnections.add(conn);
113 System.out.println(conn + "被还给listConnections数据库连接池了!!");
114 System.out.println("listConnections数据库连接池大小为" + listConnections.size());
115 return null;
116 }
117 }
118 });
119 }else {
120 throw new RuntimeException("对不起,数据库忙");
121 }
122 }
123
124 @Override
125 public Connection getConnection(String username, String password)
126 throws SQLException {
127 return null;
128 }
129 }
db.properties配置文件如下:
1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/jdbcStudy
3 username=root
4 password=XDP
5
6 jdbcPoolInitSize=10
写一个JdbcUtil测试数据库连接池
1 package me.gacl.utils;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import me.gacl.demo.JdbcPool;
8
9 public class JdbcUtil {
10
11 /**
12 * @Field: pool
13 * 数据库连接池
14 */
15 private static JdbcPool pool = new JdbcPool();
16
17 /**
18 * @Method: getConnection
19 * @Description: 从数据库连接池中获取数据库连接对象
20 * @Anthor:孤傲苍狼
21 * @return Connection数据库连接对象
22 * @throws SQLException
23 */
24 public static Connection getConnection() throws SQLException{
25 return pool.getConnection();
26 }
27
28 /**
29 * @Method: release
30 * @Description: 释放资源,
31 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
32 * @Anthor:孤傲苍狼
33 *
34 * @param conn
35 * @param st
36 * @param rs
37 */
38 public static void release(Connection conn,Statement st,ResultSet rs){
39 if(rs!=null){
40 try{
41 //关闭存储查询结果的ResultSet对象
42 rs.close();
43 }catch (Exception e) {
44 e.printStackTrace();
45 }
46 rs = null;
47 }
48 if(st!=null){
49 try{
50 //关闭负责执行SQL命令的Statement对象
51 st.close();
52 }catch (Exception e) {
53 e.printStackTrace();
54 }
55 }
56
57 if(conn!=null){
58 try{
59 //关闭Connection数据库连接对象
60 conn.close();
61 }catch (Exception e) {
62 e.printStackTrace();
63 }
64 }
65 }
66 }
三、开源数据库连接池
现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。 也有一些开源组织提供了数据源的独立实现:
- DBCP 数据库连接池
- C3P0 数据库连接池
在使用了数据库连接池之后,在项目的实际开发中就不需要编写连接数据库的代码了,直接从数据源获得数据库的连接。
3.1、DBCP数据源
DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:
- Commons-dbcp.jar:连接池的实现
- Commons-pool.jar:连接池实现的依赖库
Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。
3.2、在应用程序中加入dbcp连接池
1.导入相关jar包 commons-dbcp-1.2.2.jar、commons-pool.jar 2、在类目录下加入dbcp的配置文件:dbcpconfig.properties
dbcpconfig.properties的配置信息如下:
1 #连接设置
2 driverClassName=com.mysql.jdbc.Driver
3 url=jdbc:mysql://localhost:3306/jdbcstudy
4 username=root
5 password=XDP
6
7 #<!-- 初始化连接 -->
8 initialSize=10
9
10 #最大连接数量
11 maxActive=50
12
13 #<!-- 最大空闲连接 -->
14 maxIdle=20
15
16 #<!-- 最小空闲连接 -->
17 minIdle=5
18
19 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
20 maxWait=60000
21
22
23 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
24 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
25 connectionProperties=useUnicode=true;characterEncoding=UTF8
26
27 #指定由连接池所创建的连接的自动提交(auto-commit)状态。
28 defaultAutoCommit=true
29
30 #driver default 指定由连接池所创建的连接的只读(read-only)状态。
31 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
32 defaultReadOnly=
33
34 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
35 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
36 defaultTransactionIsolation=READ_UNCOMMITTED
如下图所示:
aaarticlea/png;base64,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" alt="" />
3、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池
1 package me.gacl.util;
2
3 import java.io.InputStream;
4 import java.sql.Connection;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7 import java.sql.Statement;
8 import java.util.Properties;
9 import javax.sql.DataSource;
10 import org.apache.commons.dbcp.BasicDataSourceFactory;
11
12 /**
13 * @ClassName: JdbcUtils_DBCP
14 * @Description: 数据库连接工具类
15 * @author: 孤傲苍狼
16 * @date: 2014-10-4 下午6:04:36
17 *
18 */
19 public class JdbcUtils_DBCP {
20 /**
21 * 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现
22 * DBCP连接池就是java.sql.DataSource接口的一个具体实现
23 */
24 private static DataSource ds = null;
25 //在静态代码块中创建数据库连接池
26 static{
27 try{
28 //加载dbcpconfig.properties配置文件
29 InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
30 Properties prop = new Properties();
31 prop.load(in);
32 //创建数据源
33 ds = BasicDataSourceFactory.createDataSource(prop);
34 }catch (Exception e) {
35 throw new ExceptionInInitializerError(e);
36 }
37 }
38
39 /**
40 * @Method: getConnection
41 * @Description: 从数据源中获取数据库连接
42 * @Anthor:孤傲苍狼
43 * @return Connection
44 * @throws SQLException
45 */
46 public static Connection getConnection() throws SQLException{
47 //从数据源中获取数据库连接
48 return ds.getConnection();
49 }
50
51 /**
52 * @Method: release
53 * @Description: 释放资源,
54 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
55 * @Anthor:孤傲苍狼
56 *
57 * @param conn
58 * @param st
59 * @param rs
60 */
61 public static void release(Connection conn,Statement st,ResultSet rs){
62 if(rs!=null){
63 try{
64 //关闭存储查询结果的ResultSet对象
65 rs.close();
66 }catch (Exception e) {
67 e.printStackTrace();
68 }
69 rs = null;
70 }
71 if(st!=null){
72 try{
73 //关闭负责执行SQL命令的Statement对象
74 st.close();
75 }catch (Exception e) {
76 e.printStackTrace();
77 }
78 }
79
80 if(conn!=null){
81 try{
82 //将Connection连接对象还给数据库连接池
83 conn.close();
84 }catch (Exception e) {
85 e.printStackTrace();
86 }
87 }
88 }
89 }
测试DBCP数据源
1 package me.gacl.test;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import org.junit.Test;
7 import me.gacl.util.JdbcUtils_DBCP;
8
9 public class DataSourceTest {
10
11 @Test
12 public void dbcpDataSourceTest() {
13 Connection conn = null;
14 PreparedStatement st = null;
15 ResultSet rs = null;
16 try{
17 //获取数据库连接
18 conn = JdbcUtils_DBCP.getConnection();
19 String sql = "insert into test1(name) values(?)";
20 st = conn.prepareStatement(sql);
21 st.setString(1, "gacl");
22 st.executeUpdate();
23 //获取数据库自动生成的主键
24 rs = st.getGeneratedKeys();
25 if(rs.next()){
26 System.out.println(rs.getInt(1));
27 }
28 }catch (Exception e) {
29 e.printStackTrace();
30 }finally{
31 //释放资源
32 JdbcUtils_DBCP.release(conn, st, rs);
33 }
34 }
35 }
3.3、C3P0数据源
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。
- dbcp没有自动回收空闲连接的功能
- c3p0有自动回收空闲连接功能
3.4、在应用程序中加入C3P0连接池
1.导入相关jar包 c3p0-0.9.2-pre1.jar、mchange-commons-0.2.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-0.9.2-pre1.jar 2、在类目录下加入C3P0的配置文件:c3p0-config.xml
c3p0-config.xml的配置信息如下:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 c3p0-config.xml必须位于类路径下面
4 private static ComboPooledDataSource ds;
5 static{
6 try {
7 ds = new ComboPooledDataSource("MySQL");
8 } catch (Exception e) {
9 throw new ExceptionInInitializerError(e);
10 }
11 }
12 -->
13
14 <c3p0-config>
15 <!--
16 C3P0的缺省(默认)配置,
17 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源
18 -->
19 <default-config>
20 <property name="driverClass">com.mysql.jdbc.Driver</property>
21 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
22 <property name="user">root</property>
23 <property name="password">XDP</property>
24
25 <property name="acquireIncrement">5</property>
26 <property name="initialPoolSize">10</property>
27 <property name="minPoolSize">5</property>
28 <property name="maxPoolSize">20</property>
29 </default-config>
30
31 <!--
32 C3P0的命名配置,
33 如果在代码中“ComboPooledDataSource ds = new ComboPooledDataSource("MySQL");”这样写就表示使用的是name是MySQL的配置信息来创建数据源
34 -->
35 <named-config name="MySQL">
36 <property name="driverClass">com.mysql.jdbc.Driver</property>
37 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy</property>
38 <property name="user">root</property>
39 <property name="password">XDP</property>
40
41 <property name="acquireIncrement">5</property>
42 <property name="initialPoolSize">10</property>
43 <property name="minPoolSize">5</property>
44 <property name="maxPoolSize">20</property>
45 </named-config>
46
47 </c3p0-config>
如下图所示:
aaarticlea/png;base64,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" alt="" />
3、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池
1 package me.gacl.util;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import com.mchange.v2.c3p0.ComboPooledDataSource;
8
9 /**
10 * @ClassName: JdbcUtils_C3P0
11 * @Description: 数据库连接工具类
12 * @author: 孤傲苍狼
13 * @date: 2014-10-4 下午6:04:36
14 *
15 */
16 public class JdbcUtils_C3P0 {
17
18 private static ComboPooledDataSource ds = null;
19 //在静态代码块中创建数据库连接池
20 static{
21 try{
22 //通过代码创建C3P0数据库连接池
23 /*ds = new ComboPooledDataSource();
24 ds.setDriverClass("com.mysql.jdbc.Driver");
25 ds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbcstudy");
26 ds.setUser("root");
27 ds.setPassword("XDP");
28 ds.setInitialPoolSize(10);
29 ds.setMinPoolSize(5);
30 ds.setMaxPoolSize(20);*/
31
32 //通过读取C3P0的xml配置文件创建数据源,C3P0的xml配置文件c3p0-config.xml必须放在src目录下
33 //ds = new ComboPooledDataSource();//使用C3P0的默认配置来创建数据源
34 ds = new ComboPooledDataSource("MySQL");//使用C3P0的命名配置来创建数据源
35
36 }catch (Exception e) {
37 throw new ExceptionInInitializerError(e);
38 }
39 }
40
41 /**
42 * @Method: getConnection
43 * @Description: 从数据源中获取数据库连接
44 * @Anthor:孤傲苍狼
45 * @return Connection
46 * @throws SQLException
47 */
48 public static Connection getConnection() throws SQLException{
49 //从数据源中获取数据库连接
50 return ds.getConnection();
51 }
52
53 /**
54 * @Method: release
55 * @Description: 释放资源,
56 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
57 * @Anthor:孤傲苍狼
58 *
59 * @param conn
60 * @param st
61 * @param rs
62 */
63 public static void release(Connection conn,Statement st,ResultSet rs){
64 if(rs!=null){
65 try{
66 //关闭存储查询结果的ResultSet对象
67 rs.close();
68 }catch (Exception e) {
69 e.printStackTrace();
70 }
71 rs = null;
72 }
73 if(st!=null){
74 try{
75 //关闭负责执行SQL命令的Statement对象
76 st.close();
77 }catch (Exception e) {
78 e.printStackTrace();
79 }
80 }
81
82 if(conn!=null){
83 try{
84 //将Connection连接对象还给数据库连接池
85 conn.close();
86 }catch (Exception e) {
87 e.printStackTrace();
88 }
89 }
90 }
91 }
测试C3P0数据源
1 package me.gacl.test;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import org.junit.Test;
7 import me.gacl.util.JdbcUtils_C3P0;
8 import me.gacl.util.JdbcUtils_DBCP;
9
10 public class DataSourceTest {
11
12 @Test
13 public void c3p0DataSourceTest() {
14 Connection conn = null;
15 PreparedStatement st = null;
16 ResultSet rs = null;
17 try{
18 //获取数据库连接
19 conn = JdbcUtils_C3P0.getConnection();
20 String sql = "insert into test1(name) values(?)";
21 st = conn.prepareStatement(sql);
22 st.setString(1, "gacl");
23 st.executeUpdate();
24 //获取数据库自动生成的主键
25 rs = st.getGeneratedKeys();
26 if(rs.next()){
27 System.out.println(rs.getInt(1));
28 }
29 }catch (Exception e) {
30 e.printStackTrace();
31 }finally{
32 //释放资源
33 JdbcUtils_C3P0.release(conn, st, rs);
34 }
35 }
36 }
四、配置Tomcat数据源
在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮我们创建一个数据库连接池,那么我们在应用程序中就不需要手动去创建数据库连接池,直接使用Tomcat服务器创建好的数据库连接池即可。要想让Tomcat服务器在启动的时候帮我们创建一个数据库连接池,那么需要简单配置一下Tomcat服务器。
4.1、JNDI技术简介
JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.naming包, 这 套API的主要作用在于:它可以把Java对象放在一个容器中(JNDI容器),并为容器中的java对象取一个名称,以后程序想获得Java对象,只需 通过名称检索即可。其核心API为Context,它代表JNDI容器,其lookup方法为检索容器中对应名称的对象。
Tomcat服务器创建的数据源是以JNDI资源的形式发布的,所以说在Tomat服务器中配置一个数据源实际上就是在配置一个JNDI资源,通过查看Tomcat文档,我们知道使用如下的方式配置tomcat服务器的数据源:
1 <Context>
2 <Resource name="jdbc/datasource" auth="Container"
3 type="javax.sql.DataSource" username="root" password="XDP"
4 driverClassName="com.mysql.jdbc.Driver"
5 url="jdbc:mysql://localhost:3306/jdbcstudy"
6 maxActive="8" maxIdle="4"/>
7 </Context>
服务器创建好数据源之后,我们的应用程序又该怎么样得到这个数据源呢,Tomcat服务器创建好数据源之后是以JNDI的形式绑定到一个JNDI容器中的,我们可以把JNDI想象成一个大大的容器,我们可以往这个容器中存放一些对象,一些资源,JNDI容器中存放的对象和资源都会有一个独一无二的名称,应用程序想从JNDI容器中获取资源时,只需要告诉JNDI容器要获取的资源的名称,JNDI根据名称去找到对应的资源后返回给应用程序。我们平时做javaEE开发时,服务器会为我们的应用程序创建很多资源,比如request对象,response对象,服务器创建的这些资源有两种方式提供给我们的应用程序使用:第一种是通过方法参数的形式传递进来,比如我们在Servlet中写的doPost和doGet方法中使用到的request对象和response对象就是服务器以参数的形式传递给我们的。第二种就是JNDI的方式,服务器把创建好的资源绑定到JNDI容器中去,应用程序想要使用资源时,就直接从JNDI容器中获取相应的资源即可。
对于上面的name="jdbc/datasource"数据源资源,在应用程序中可以用如下的代码去获取
1 Context initCtx = new InitialContext();
2 Context envCtx = (Context) initCtx.lookup("java:comp/env");
3 dataSource = (DataSource)envCtx.lookup("jdbc/datasource");
此种配置下,数据库的驱动jar文件需放置在tomcat的lib下
aaarticlea/png;base64,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" alt="" />
4.2、配置Tomcat数据源
1、在Web项目的WebRoot目录下的META-INF目录创建一个context.xml文件
如下图所示:
aaarticlea/png;base64,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" alt="" />
2、在context.xml文件配置tomcat服务器的数据源
1 <Context>
2 <Resource
3 name="jdbc/datasource"
4 auth="Container"
5 type="javax.sql.DataSource"
6 username="root"
7 password="XDP"
8 driverClassName="com.mysql.jdbc.Driver"
9 url="jdbc:mysql://localhost:3306/jdbcstudy"
10 maxActive="8"
11 maxIdle="4"/>
12 </Context>
3、将数据库的驱动jar文件需放置在tomcat的lib下
aaarticlea/png;base64,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" alt="" />
4、在获取数据库连接的工具类(如jdbcUtils)的静态代码块中获取JNDI容器中的数据源
1 package me.gacl.util;
2
3 import java.sql.Connection;
4 import java.sql.ResultSet;
5 import java.sql.SQLException;
6 import java.sql.Statement;
7 import javax.naming.Context;
8 import javax.naming.InitialContext;
9 import javax.sql.DataSource;
10
11 /**
12 * @ClassName: JdbcUtils_DBCP
13 * @Description: 数据库连接工具类
14 * @author: 孤傲苍狼
15 * @date: 2014-10-4 下午6:04:36
16 *
17 */
18 public class JdbcUtils_JNDI {
19
20 private static DataSource ds = null;
21 //在静态代码块中创建数据库连接池
22 static{
23 try{
24 //初始化JNDI
25 Context initCtx = new InitialContext();
26 //得到JNDI容器
27 Context envCtx = (Context) initCtx.lookup("java:comp/env");
28 //从JNDI容器中检索name为jdbc/datasource的数据源
29 ds = (DataSource)envCtx.lookup("jdbc/datasource");
30 }catch (Exception e) {
31 throw new ExceptionInInitializerError(e);
32 }
33 }
34
35 /**
36 * @Method: getConnection
37 * @Description: 从数据源中获取数据库连接
38 * @Anthor:孤傲苍狼
39 * @return Connection
40 * @throws SQLException
41 */
42 public static Connection getConnection() throws SQLException{
43 //从数据源中获取数据库连接
44 return ds.getConnection();
45 }
46
47 /**
48 * @Method: release
49 * @Description: 释放资源,
50 * 释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
51 * @Anthor:孤傲苍狼
52 *
53 * @param conn
54 * @param st
55 * @param rs
56 */
57 public static void release(Connection conn,Statement st,ResultSet rs){
58 if(rs!=null){
59 try{
60 //关闭存储查询结果的ResultSet对象
61 rs.close();
62 }catch (Exception e) {
63 e.printStackTrace();
64 }
65 rs = null;
66 }
67 if(st!=null){
68 try{
69 //关闭负责执行SQL命令的Statement对象
70 st.close();
71 }catch (Exception e) {
72 e.printStackTrace();
73 }
74 }
75
76 if(conn!=null){
77 try{
78 //将Connection连接对象还给数据库连接池
79 conn.close();
80 }catch (Exception e) {
81 e.printStackTrace();
82 }
83 }
84 }
85 }
写一个Servlet测试JNDI数据源
1 package me.gacl.test;
2
3 import java.io.IOException;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpServlet;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import me.gacl.util.JdbcUtils_JNDI;
12
13 public class JNDITest extends HttpServlet {
14
15 public void doGet(HttpServletRequest request, HttpServletResponse response)
16 throws ServletException, IOException {
17 Connection conn = null;
18 PreparedStatement st = null;
19 ResultSet rs = null;
20 try{
21 //获取数据库连接
22 conn = JdbcUtils_JNDI.getConnection();
23 String sql = "insert into test1(name) values(?)";
24 st = conn.prepareStatement(sql);
25 st.setString(1, "gacl");
26 st.executeUpdate();
27 //获取数据库自动生成的主键
28 rs = st.getGeneratedKeys();
29 if(rs.next()){
30 System.out.println(rs.getInt(1));
31 }
32 }catch (Exception e) {
33 e.printStackTrace();
34 }finally{
35 //释放资源
36 JdbcUtils_JNDI.release(conn, st, rs);
37 }
38 }
39
40 public void doPost(HttpServletRequest request, HttpServletResponse response)
41 throws ServletException, IOException {
42 doGet(request, response);
43 }
44
45 }
Tomcat 与 数据库连接池 的小坑的更多相关文章
- TOMCAT配置数据库连接池
迁移时间--2017年7月9日15:27:02Author:Marydon TOMCAT配置数据库连接池 说明: a.数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数 ...
- Tomcat 动态数据库连接池
package com.boguan.bte.util; import java.sql.Connection;import java.sql.SQLException;import java.uti ...
- tomcat+mysql数据库连接池的操作
使用tomcat中的context.xml设置连接池 打开文件:Apache Software Foundation\Tomcat 6.0\conf\context.xml <Resource ...
- Tomcat配置多线程和配置数据库连接池
Tomcat配置多线程和配置数据库连接池 1. tomcat配置线程池: [root@RD2_AS yanghuihui]# cd /usr/tomcat/conf/ [root@RD2_AS co ...
- JavaWeb基础—数据库连接池DBCP、C3P0
一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...
- .数据库连接池技术:DBCP和C3P0
数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...
- MySql数据库连接池
1.传统链接(如下为示意图) 注意: (1).传统方式找DriverManager要连接,数目是有限的. (2).传统方式的close(),并没有将Connection重用,只是切断应用程序和数据库的 ...
- 三种数据库连接池的配置及使用(For JDBC)
DBCP 一.导包 Apache官网下载DBCP包,导入两个包路径如下: commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的 ...
- mybatis学习三 数据库连接池技术
1.在内存中开辟一块空间,存放多个数据库连接对象.就是Connection的多个实例2. 连接池技术有很多,c3p0,dbcp,druid,以及JDBC Tomcat Pool, JDBC Tomca ...
随机推荐
- niosii dma实验中的一点感想
1,使用nios给出的驱动函数的顺序一般为1,清中断2,写控制寄存器,3,写参数寄存器4,中断注册,5,开始工作.因为开始工作控制位在控制寄存器中,所以会想到到最后一块写,省事,但是在dma试验中发现 ...
- 洛谷 P3015 [USACO11FEB]最好的括号Best Parenthesis
传送门 题目大意:给出括号的得分标准. ()得分为1,如果A的得分为S(A),那么 (A)的得分为2*S(A). 题解:搜索 #include<iostream> #include< ...
- DispatcherServlet的处理流程
前言 上一篇介绍了SpringMVC的启动过程,DispatcherServlet作为一个前端控制器,分发处理http请求 1.DispatcherServlet流程图 具体流程: 1. 用户发请求- ...
- gatsbyjs 使用
1. 安装 npm install --global gatsby-cli 2. 使用 // 创建项目 gatsby new dalong cd dalong // 启动 gatsby develop ...
- ORA-28595: Extproc 代理: DLL 路径无效解决办法
报错信息: ORA-28595: Extproc 代理: DLL 路径无效 ORA-06512: 在 "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 70 ...
- ubuntu下使用code::blocks编译运行一个简单的gtk+2.0项目
在具体的操作之前,首先需要安装一些必要的软件.ubuntu下默认安装了gcc,不过缺少必要的Header file,可以在命令行中输入下面的指令安装build-essential套件:sudo apt ...
- 在actionbar中加入item的方法
首先在menu文件夹中创建post.xml <?xml version="1.0" encoding="utf-8"?> <menu xmln ...
- 处理mysql主从中断
主从同步中断跳过处理步骤: slave stop;set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;slave start; 在使用set global sql_slave_s ...
- ExcelHandle
using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using Syste ...
- 学习FPGA需要做哪些
有些人比较差,做了一些介绍,有误导成分.有些人水平太高,介绍的很好,但是很多人依旧听不懂,得到的肯定很少.学习FPGA,在不同层次的人明显有不同的答案. 熟悉硬件描述语言语法,不需要什么都会,但是要记 ...