发表于: 2017-08-09 22:58:19

2 1054


今天完成的事情:了解数据库连接池 尝试使用数据库连接池c3p0

            池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

       要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,Java连接池正是数据库连接池在Java上的应用。——我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。 该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

       目前市场上主流的连接池有hikariCP,druid,tomcat-jdbc,dbcp,c3p0几种连接池

       C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。

       DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。

       Tomcat-Jdbc JDBC 连接池 org.apache.tomcat.jdbc.pool 是Apache-Commons DBCP连接池的一种替换或备选方案。

       Druid在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是一个JDBC组件,它包括三个部分:基于Filter-Chain模式的插件体系。DruidDataSource 高效可管理的数据库连接池。SQLParser


使用c3p0连接数据库 先导入相关依赖 然后数据源配置如下

<?xml version="1.0" encoding="UTF-8"?>
<beans
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- 数据源配置class-->
   <bean id="dataSource" class="com.jnshu.c3p0.ComboPooledDataSource" >
       <property name="driverClass"
                 value="com.mysql.jdbc.Driver"/>
       <property name="jdbcUrl"
                 value="jdbc:mysql://www.rcy9527.top:3306mybatis?characterEncoding=utf8&amp;useSSL=false" />
       <property name="user"
                 value="root" />
       <property name="password" value="`123123" />
       <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
       <property name="initialPoolSize" value="3"/>
       <!--连接池中保留的最小连接数。Default: 2 -->
       <property name="minPoolSize" value="2"/>
       <!--连接池中保留的最大连接数。Default: 15 -->
       <property name="maxPoolSize" value="15"/>
       <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
       <property name="acquireIncrement" value="5"/>

       <!-- 性能配置 -->
       <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
       <property name="maxStatements" value="8"/>
       <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
       <property name="maxStatementsPerConnection" value="5"/>
       <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
       <property name="maxIdleTime" value="1800"/>


   </bean>
   <!-- 二、创建mybatis会话工厂 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="configLocation" value=""/>
       <property name="mapperLocations" value="classpath:StudentMapper.xml" />
   </bean>

   <bean id="studentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
       <property name="mapperInterface" value="com.springmybatis.Mapper.StudentMapper"/>
       <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
   </bean>

继续Spring学习 

编写jdbc.properties 简化数据库设置 

driver=com.mysql.jdbc.Driver  
url=jdbc:mysql://localhost:3360/mybatis
username=root  
password=123123  
#定义初始连接数
initialSize=0  
#定义最大连接数
maxActive=20  
#定义最大空闲
maxIdle=20  
#定义最小空闲
minIdle=1  
#定义最长等待时间
maxWait=60000 

建立spring-mybatis.xml 配置文件


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                       http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context-3.1.xsd
                       http://www.springframework.org/schema/mvc
                       http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
   <!-- 自动扫描 -->
   <context:component-scan base-package="com.jnshu。Dao" />
   <!-- 引入配置文件 -->
   <bean id="propertyConfigurer"
         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="location" value="classpath:jdbc.properties" />
   </bean>

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
         destroy-method="close">
       <property name="driverClassName" value="${driver}" />
       <property name="url" value="${url}" />
       <property name="username" value="${username}" />
       <property name="password" value="${password}" />
       <!-- 初始化连接大小 -->
       <property name="initialSize" value="${initialSize}"></property>
       <!-- 连接池最大数量 -->
       <property name="maxActive" value="${maxActive}"></property>
       <!-- 连接池最大空闲 -->
       <property name="maxIdle" value="${maxIdle}"></property>
       <!-- 连接池最小空闲 -->
       <property name="minIdle" value="${minIdle}"></property>
       <!-- 获取连接最大等待时间 -->
       <property name="maxWait" value="${maxWait}"></property>
   </bean>

   <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       <property name="dataSource" ref="dataSource" />
       <!-- 自动扫描mapping.xml文件 -->
       <property name="mapperLocations" value="classpath:com/cn/hnust/mapping/*.xml"></property>
   </bean>

   <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       <property name="basePackage" value="com.cn.hnust.dao" />
       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
   </bean>

   <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
   <bean id="transactionManager"
         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource" />
   </bean>

</beans>

测试代码还没写好 也不知道配置对了没有

明天计划的事情:编写相关测试代码

                         尝试先写测试方法 在写接口 在写实现类
遇到的问题:今天导入依赖的时候 发现师兄有的依赖是下面这个样子的

<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-core</artifactId>
   <version>${spring.version}</version>
</dependency>

我导入报错 看了看版本里面不知道是神魔东西

查了相关资料 原来是为了统一版本号 把所有的版本都设置成这个参数 然后统一设置

<properties>
   <!-- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> -->
   <!-- spring版本号 -->
   <spring.version>4.1.7.RELEASE</spring.version>
   <!-- mybatis版本号 -->
   <mybatis.version>3.2.8</mybatis.version>
</properties>

像上面这样 统一版本避免出问题

收获:对spring有了更深的了解 他不只是框架 更是一个容器 他可以和很多优秀框架整合在一起

           初步 学习了java三大特性中的多态

               多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。

              对接口有了更多更深的了解 它是一个抽象类 谁调用它 谁要重写他的方法


任务进度 :正常



返回列表 返回列表
评论

    分享到