相关连接池

手写连接池

 

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设定必须介于maxTransactionsmaxRequests之间,

                 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的事务管理器,提供三种方式,(1JDBC,2jta:分布式数据库,3EXTERNAL:itbatis本身不做事务处理由外部进行处理);

        dataSource节点:从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性;

            type属性:type属性指定了dataSource的实现模式,共三种模式,(1simple:ibatis提供的较小的连接池 2dbcp:apache实现的连接池                                                              3jndi:tomcateweblogic提供的服务);

            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配置文件中的commitRequiredtrue,则默认为自动提交事物

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值