- 浏览: 243376 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
aa499357363:
我知道楼主叫雷志民,别问我怎么知道的,。
如何创建和启动一个线程? -
alvin198761:
很好,但是直接杀死进程会导致很多问题,建议不要使用
如何使用Java执行cmd命令? -
k_kid9157:
在JSP中有哪些注释格式? -
sunney2010:
ifFRAME不行哟
如何在关闭页面时自动清除Session? -
liuyuru:
java 初始化块
手写连接池
What—>
(数据库连接池负责分配、管理和释放数据库连接)
Why—>
数据库连接池技术带来的优势:
(处理大数据量的并发问题)
(多数据库服务器和多用户)
(事务处理) How—>
1. 创建DBConnectionPool类和DBConnectionManage类
2.DBConnectionManage主要有创建连接,释放连接等方法。
3.DBConnectionPool为DBManage的一个类部类,主要有创建连接,释放连接,获取连接等方法
4.获取连接:
1.)如果有空闲连接,就从空闲连接中获取
2.)如果空闲连接中没有,就创建新的连接
结构图如下:
手写连接池 DBConnectionPool(内部类) DBConnectionPool DBConnectionManager 创建连接 获取连接 释放连接 两种途径获取 getConnection() newConnection() freeConnection() 创建连接 释放连接 newConnection() freeConnection() Servlet类 init() Service() destroy() 生成连接池的实例 执行数据库操作 释放系统资源
补充:
配置与维护
系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。
最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。
配置ibatis数据库连接池:
(比手写数据库连接池多了:挂起时间,操作时间,最少连接数,最大连接数)
配置xml的代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<!--
Settings各节点的说明:
cacheModelsEnable :是否启用SqlMapClient上的缓存机制,建议设为true;
enhancementEnabled:是否针对POJO启用字节码增加机制以提升getter/setter的调用效能,避免使用Java reflect所带来的性能开销,
同时也为Lazy Loading带来了极大的性能提升,建议设置为true;
lazyLoadingEnabled:是否启用延迟加载机制,建议设为"true";
errorTracingEnabled:是否启用错误日志,在开发期间建议设为"true" 以方便调试;
maxRequests:最大并发请求数(Statement并发数);
maxSessions:最大Session 数。即当前最大允许的并发SqlMapClient数。maxSessions设定必须介于maxTransactions和maxRequests之间,
即maxTransactions<maxSessions=<maxRequests;
maxTransactions:最大并发事务数;
useStatementNamespaces:是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的namespace属性,如针对users表的映射文件sqlMap节点:
<sqlMap namespace="Users">这里,指定了此sqlMap节点下定义的操作均从属于"Users"命名空间。在useStatementNamespaces="true"的情况
下,Statement调用需追加命名空间,如:sqlMap.update("Users.updateUser",user);否则直接通过Statement名称调用即可,如:
sqlMap.update("updateUser",user);但请注意此时需要保证所有映射文件中,Statement定义无重名。
-->
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
/>
<!--
transactionManager节点定义了iBatis的事务管理器,提供三种方式,(1、JDBC,2、jta:分布式数据库,3、EXTERNAL:itbatis本身不做事务处理由外部进行处理);
dataSource节点:从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性;
type属性:type属性指定了dataSource的实现模式,共三种模式,(1、simple:ibatis提供的较小的连接池 2、dbcp:是apache实现的连接池 3、jndi:tomcate或weblogic提供的服务);
JDBC.Driver:JDBC驱动;
JDBC.ConnectionURL:数据库连接URL,如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多Statement支持;
JDBC.Username:数据库用户名;
JDBC.Password:数据库用户密码;
Pool.MaximumActiveConnections:数据库连接池可维持的最大容量;
Pool.MaximumIdleConnections:数据库连接池中允许的挂起(idle)连接数;
Pool.MaximumCheckoutTime数据库连接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回,(毫秒);
Pool.TimeToWait:当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间,(毫秒);
Pool.PingQuery:数据库连接状态检测语句。某些数据库在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用,
检测语句应该是一个最简化的无逻辑SQL。如“select 1 from user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态;
Pool.PingEnabled:是否允许检测连接状态;
Pool.PingConnectionsOlderThan:对持续连接时间超过设定值(毫秒)的连接进行检测;
Pool.PingConnectionsNotUsedFor:对空闲超过设定值(毫秒)的连接进行检测;
-->
<transactionManager type="JDBC" commitRequired="true">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/company"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="11"/>
<property name="Pool.MaximumActiveConnections" value="10" />
<property name="Pool.MaximumIdleConnections" value="5" />
<property name="Pool.MaximumCheckoutTime" value="120000" />
<property name="Pool.TimeToWait" value="500" />
<property name="Pool.PingQuery" value="select 1 from ACCOUNT" />
<property name="Pool.PingEnabled" value="false" />
<property name="Pool.PingConnectionsOlderThan" value="1" />
<property name="Pool.PingConnectionsNotUsedFor" value="1" />
</dataSource>
</transactionManager>
<sqlMap resource="news.xml"/>
<!-- 自己加的 -->
</sqlMapConfig>
事务
What—>
(原子性,一致性,持久性,隔离性)
通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,
若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。
Why—>
事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问
How—>
1.如果xml配置文件中的commitRequired为true,则默认为自动提交事物
发表评论
-
Hibernate知识点
2010-12-20 08:47 36381 什么是Hibernate Hibern ... -
struts2知识点
2010-12-19 23:28 26651,Struts1和Struts2的区别和对比 1 ... -
struts1 struts2 国际化
2010-12-02 11:21 1775struts1国际化 1,在struts-cofig.xml ... -
struts1知识点
2010-11-26 10:51 2343对一个星期的 Struts1 进行笔记总结: ... -
jsp 七大动作
2010-11-17 20:49 6719jsp动作 1.创建bean对象: <jsp ... -
jsp 自定义标签
2010-11-17 11:56 2270第一版本: 为什么要使用自定义标签呢? 主要是为了取 ... -
监听器
2010-11-16 19:58 1341监听器概述 1.Listener是Servlet的监听 ... -
web应用最终可以以哪种形式进行部署
2010-11-16 08:58 1611EAR(Enterprise Archive) Java ... -
JSP中forward和redirect有什么区别?
2010-11-09 16:30 1660解释一: RequestDispatcher.forwa ... -
java 导出Excel文件
2010-11-09 11:22 1479这是项目其中的一个功能 1前台: ... -
Get 和 Post 之详解
2010-11-08 10:49 11341.HTTP请求格式: &l ... -
最简单的文件上传
2010-11-04 20:32 1254文件上传实例 testFileUpload.jsp代码 ... -
太多的连接
2010-10-18 08:46 942今天开发项目的时候,总是报错,可是就是找不出原因,后来根据抱错 ... -
log4j写日志
2010-10-17 21:17 1237好处:便于维护与管理 ... -
如何实现数据水晶分页显示的功能?
2010-10-10 16:30 952这就是要显示的结果 首先要一个好看点的css样式 p ... -
实现业务系统中的用户权限管理
2010-10-07 20:50 1130最近学那个用户权限管理系统,郁闷的很啊,总是理解地云里云雾 ... -
如何在关闭页面时自动清除Session?
2010-10-06 09:40 41941、在要关闭的页面中的<head>处加入如下的ja ... -
Java中四种XML解析技术
2010-10-05 19:46 1486(一)DOM(JAXP Crimson解析器) DOM是用与平 ... -
java乱码处理集中营
2010-10-05 10:13 1902由于jdk中只规定了必须有一些unicode utf8 等编码 ... -
在Servlet与JSP中取得当前文件所在的相对路径与绝对路径
2010-10-05 10:11 1285System.out.println("根目 ...
相关推荐
在Java开发中,连接池是一种优化数据库访问性能的重要技术,它可以高效地管理和重用数据库连接,从而避免频繁创建和销毁连接带来的性能开销。本文将深入讲解如何在Java环境中,特别是Tomcat服务器中配置和使用连接池...
在实际应用中,开发者通常会在Spring框架中配置数据源,选择合适的连接池实现,如在Spring Boot项目中,可以通过YAML或properties配置文件设置连接池的相关参数: ```yaml spring: datasource: type: ...
本篇文章将深入探讨“C#高效数据库连接池源码”相关的知识点。 1. **数据库连接池原理**: 数据库连接池是一种对象池设计模式的应用,它维护了一组已打开的数据库连接,而不是每次需要时都创建新的连接。应用程序...
数据连接池在IT行业中扮演着至关重要的角色,尤其是在大型企业级应用系统中。它是一种管理数据库连接的技术,通过复用已存在...在遇到DriverConnection异常时,检查并确保相关连接池库已正确导入,能有效解决这类问题。
在使用C3P0时,我们需要在配置文件中设置相关参数,如初始连接数、最大连接数等,并在代码中加载这些配置,创建PoolConfig对象,然后使用ComboPooledDataSource类创建连接池实例。 2. **HikariCP** 是目前性能最优...
文件zc-activemq可能是包含了作者实现的连接池代码、配置示例或其他相关文档。为了更好地利用这个资源,你需要阅读和理解代码实现,确保其符合你的系统需求。同时,测试是验证连接池性能和稳定性的关键步骤,应该在...
然而,了解连接池的内部工作原理对于优化数据库操作和解决相关问题至关重要。 个人实现Java连接池源码可以让你深入理解这一过程。首先,我们需要定义一个连接池类,这个类通常包含以下组件: 1. **连接池初始化**...
Java连接池,也称为JDBC连接池,是Java应用程序中管理数据库连接的一种高效方式。它通过预先创建并维护一定数量的数据库连接,避免了每次应用需要连接数据库时的开销,提高了系统的性能和响应速度。在Java中,有许多...
在Java开发中,数据库连接池是一种重要的资源管理工具,它允许开发者高效地管理和复用数据库连接,从而提高系统的性能和稳定性。数据库连接池的基本原理是预先创建一定数量的数据库连接,当应用程序需要访问数据库时...
配置C3P0连接池通常需要在项目中添加C3P0的依赖,然后在配置文件(如:c3p0.properties或应用的配置XML)中设置相关的参数,如最小连接数、最大连接数、初始化连接数等。 二、DBCP连接池 Apache的DBCP(Database ...
通常,手动配置连接池需要编写大量的XML配置文件,如`context.xml`或`web.xml`,以及相关的Java代码。这个工具的出现,能够自动完成这些繁琐的任务,从而提高开发效率。 连接池是一种资源管理技术,用于在多线程...
3. **配置文件**:在手动实现连接池时,通常会有一个配置文件(如XML或properties文件),包含连接池的相关设置,如最大连接数、最小连接数、超时时间等。这些参数可以根据应用的需求和服务器的资源进行调整。 4. *...
"配置文件在db.properties",这是标准的做法,通常在Java项目中,配置文件(如db.properties)会包含数据库连接的相关信息,如URL、用户名、密码和连接池的参数。开发者可以通过修改这些配置来适应不同的数据库环境...
2. **配置连接池**:创建一个配置文件,如`db.properties`,设置数据库连接的相关参数,包括数据库URL、用户名、密码、驱动类名等。 3. **初始化连接池**:在Java代码中,通过配置文件加载连接池实例,如`c3p0....
使用数据连接池时,开发者需要配置连接池的相关参数,如初始化大小、最大连接数、最小连接数、超时时间等,以适应不同应用的负载需求。同时,为了保证系统的稳定性和可用性,定期对连接池进行监控和调优也至关重要。...
在使用C3P0或DBCP时,我们需要配置相关的属性文件,如c3p0-config.xml或dbcp.properties,这些文件中包含了数据库连接信息以及连接池的配置参数。例如,设置初始连接数、最大连接数、超时时间等。同时,还需要在代码...
为了进一步优化连接池的使用,你还可以设置连接池的相关参数,如上所述。这些参数的调整需要根据具体的应用场景和性能要求来进行。 总之,理解MongoDB连接池的工作原理及其配置参数,对于高效地使用MongoDB至关重要...
在`DBConnManager`类中,首先从配置文件(如`jdbcsql.properties`)中读取数据库连接的相关信息,包括连接池名、驱动程序名、数据库标识(URL)、用户名、密码以及每个连接池的最大连接数。这些信息被存储在多个`...
使用C3P0时,开发者需要配置相关的参数,如初始化连接数、最大连接数、超时时间等,以确保连接池能够根据应用需求动态调整。 其次,Druid是阿里巴巴开源的数据库连接池组件,它不仅提供了基本的连接池功能,还集成...