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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
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         }
复制代码


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
|
8天前
|
数据库 数据安全/隐私保护
winform通过ListView绑定数据库数据源
winform通过ListView绑定数据库数据源
46 0
winform通过ListView绑定数据库数据源
|
5天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
19 1
|
8天前
|
SQL Java 数据库连接
Java一分钟之-JDBC:Java数据库连接基础
【5月更文挑战第14天】JDBC是Java与关系数据库交互的API,常见问题包括资源管理、SQL注入和性能优化。易错点涉及驱动加载、空指针异常和事务管理。避免这些问题的方法有使用try-with-resources自动关闭资源、预编译PreparedStatement以防止SQL注入,以及正确管理事务。示例代码展示了基本的JDBC连接和查询。在实际开发中,推荐使用ORM框架如Hibernate或JPA来简化数据库操作。
17 1
|
8天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
17 6
|
8天前
|
SQL Java 关系型数据库
零基础轻松入门Java数据库连接(JDBC)
零基础轻松入门Java数据库连接(JDBC)
15 0
|
8天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
14 0
|
8天前
|
关系型数据库 Java 数据库
docker部署postgresql数据库和整合springboot连接数据源
docker部署postgresql数据库和整合springboot连接数据源
24 0
|
8天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
8天前
|
JSON 前端开发 Java
管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)
管理系统总结(前端:Vue-cli, 后端Jdbc连接mysql数据库,项目部署tomcat里)