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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 整理自文章: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         }
复制代码


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
53 8
|
4月前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
42 7
|
20小时前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
2月前
|
SQL Java 数据库
Springboot+spring-boot-starter-data-jdbc实现数据库的操作
本文介绍了如何使用Spring Boot的spring-boot-starter-data-jdbc依赖来操作数据库,包括添加依赖、配置数据库信息和编写基于JdbcTemplate的数据访问代码。
225 2
|
2月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
84 0
|
2月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
67 0
|
4月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
4月前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
37 9
|
4月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
44 7
|
4月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
65 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)