JNDI、数据源、数据库连接池、JDBC 总结篇

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 整理自文章:http://www.cnblogs.com/lijiews/p/3529906.html现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSource的实现,即连接池的实现。

整理自文章:http://www.cnblogs.com/lijiews/p/3529906.html

现在很多WEB服务器(Weblogic, WebSphere, Tomcat)都提供了DataSource的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。 

        也有一些开源组织提供了数据源的独立实现: 

                DBCP 数据库连接池 (Tomcat内置) 

                C3P0 数据库连接池(Spring内置) 

        实际应用时不需要编写连接数据库代码,直接从数据源获得数据库的连接。程序员编程时也应尽量使用这些数据源的实现,以提升程序的数据库访问性能。 

     备注:简单地讲,使用开源数据源,就是为了获取其DataSource对象,然后通过该对象动态的地获取数据库连接。


DBCP数据源: 

    DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件: 

        Commons-dbcp.jar:连接池的实现 

        Commons-pool.jar:连接池实现的依赖库 

    Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。    


 使用DBCP示例代码: 

        static{ 

                 InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"); 

                 Properties prop = new Properties(); 

                 prop.load(in);          

                 BasicDataSourceFactory factory = new BasicDataSourceFactory(); 

                 dataSource = factory.createDataSource(prop); 

        } 

 

Demo样例1:JDBC 数据库连接池 由应用程序独立使用。

复制代码
 1 public class JdbcUtils_DBCP { 
 2           private static DataSource ds = null;
 3           static{
 4                 try{
 5                       InputStream in = JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("2013-06-10 11:26");
 6                       Properties prop = new Properties();
 7                       prop.load(in);  
 8                       BasicDataSourceFactory factory = new BasicDataSourceFactory();
 9                       ds = factory.createDataSource(prop);
10                 }catch (Exception e) {
11                       throw new ExceptionInInitializerError(e);
12                 }
13           }
14           public static Connection getConnection() throws SQLException{
15             return ds.getConnection();
16           } 
17           public static void release(Connection conn,Statement st,ResultSet rs){ 
18                 if(rs!=null){
19                       try{
20                             rs.close();   //throw new 
21                       }catch (Exception e) {
22                             e.printStackTrace();
23                       }
24                       rs = null;
25                 }
26                 if(st!=null){
27                       try{
28                             st.close();
29                       }catch (Exception e) {
30                             e.printStackTrace();
31                       }
32                       st = null;
33                 }
34                 if(conn!=null){
35                       try{
36                             conn.close();
37                       }catch (Exception e) {
38                             e.printStackTrace();
39                       }
40                 } 
41           }
42     } 
复制代码

Demo样例2: dbcpconfig.properties 文件的内容(也可参见附件)

复制代码
 1 #连接设置
 2 driverClassName=com.mysql.jdbc.Driver
 3 url=jdbc:mysql://localhost:3306/day16
 4 username=root
 5 password=root 
 6 
 7 #<!-- 初始化连接 -->
 8 initialSize=10 
 9 #最大连接数量
10 maxActive=50 
11 #<!-- 最大空闲连接 -->
12 maxIdle=20 
13 #<!-- 最小空闲连接 -->
14 minIdle=5 
15 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
16 maxWait=60000 
17 
18 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
19 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
20 connectionProperties=useUnicode=true;characterEncoding=utf8
21 
22 #指定由连接池所创建的连接的自动提交(auto-commit)状态。
23 defaultAutoCommit=true
24 
25 #driver default 指定由连接池所创建的连接的只读(read-only)状态。
26 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
27 defaultReadOnly=
28 
29 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
30 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
31 defaultTransactionIsolation=READ_COMMITTED
复制代码

8、DBCP数据源与应用服务器整合使用——  配置Tomcat数据源 

        查看Tomcat文档(Tomcat-->TomcatDocument-->JNDI Resources-->定位到JDBC Data Sources),示例代码: 

                <Context> 

                     <Resource name="jdbc/datasource" auth="Container"  type="javax.sql.DataSource" 

                             username="root" password="root"  driverClassName="com.mysql.jdbc.Driver" 

                             url="jdbc:mysql://localhost:3306/jdbc"  maxActive="8" maxIdle="4"  /> 

                     <Resource name="jdbc/EmployeeDB " auth="Container"  type="javax.sql.DataSource" 

                             username="root" password="root"  driverClassName="com.mysql.jdbc.Driver" 

                             url="jdbc:mysql://localhost:3306/jdbc"  maxActive="8" maxIdle="4"  /> 

                </Context> 

        放置位置:在MyEclipse中,在目录/META-INF/下创建文件context.xml,将上述内容粘贴其中(注:不要写XML文件的指令头句)。该文件将被发布到Tomcat服务器的conf\Catalina\localhost目录中,并以工程名称 命名该文件。

         下面是调用JNDI,获取存储在JNDI容器中的资源的固定格式代码(有关JNDI的知识,参见下一章节): 

                Context initCtx = new InitialContext(); 

                Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

                dataSource = (DataSource)envCtx.lookup("jdbc/datasource"); 

        特别提醒:此种配置下,驱动jar文件需放置在tomcat的lib下 

        可以创建工具类JDBCUtils,java来封装上面获取连接的代码。 

Demo样例: 封装JNDI调用DataSource 获取连接的代码。

复制代码
 1 public class JdbcUtils_Tomcat {
 2               private static DataSource ds;
 3               static {
 4                     try {
 5                           Context initCtx = new InitialContext();
 6                           Context envCtx = (Context) initCtx.lookup("java:comp/env");
 7                           ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB");
 8                     } catch (Exception e) {
 9                           throw new RuntimeException(e);
10                     }
11               }
12               public static Connection getConnection() throws SQLException{
13                     return ds.getConnection();
14               }
15         }
复制代码


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
数据库 数据安全/隐私保护
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
28 0
winform通过ListView绑定数据库数据源
|
3月前
|
SQL Java 关系型数据库
JDBC数据库的连接
JDBC数据库的连接
34 0
|
3月前
|
Java 数据库 数据安全/隐私保护
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
基于JavaSE+JDBC使用控制台操作的简易购物系统【源码+数据库】
|
3月前
|
SQL druid Java
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)(上)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
64 0
|
15天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
1月前
|
安全 Java 数据库连接
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)
154 0
|
2月前
|
Java 数据库连接 数据库
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
Windows7 64位 连接Access数据库“未发现数据源名称并且未指定默认驱动程序“的解决办法
|
2月前
|
SQL druid Java
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
JDBC技术【分页查询、数据库连接池、应用程序分层、封装通用的BaseDao】(四)-全面详解(学习总结---从入门到深化)
30 0
|
2月前
|
SQL Java 关系型数据库
数据库-----JDBC技术
数据库-----JDBC技术
207 0
|
3月前
|
SQL Java 数据库连接
JDBC增删改查案例讲解
JDBC增删改查案例讲解
19 0

热门文章

最新文章