SSM框架搭建之数据库连接池(三)

SSM框架搭建之数据库连接池(三)

Spring提供了两个这样的数据源(都位于org.springframework.jdbc.datasource程序包里):
DriverManagerDataSource:这个类实现了javax.sql.DataSource接口,但它并没有提供池化连接的机制,每次调用getConnection()获取新连接时,只是简单地创建一个新的连接。因此,这个数据源类比较适合在单元测试 或简单的独立应用中使用,因为它不需要额外的依赖类。
SingleConnectionDataSource:在每个连接请求时都返回同一个连接。虽然它不同严格意义上的池管理数据源,但我们可以把它看作只有一个连接的池。
对两个数据源的配置都类似于配置DBCP的BasicDataSource,区别在于由于DriverManagerDataSource和SingleConnectionDataSource都没有提供连接池,所以在此没有设置池配置属性。
虽然这两个数据源都对于小程序来说是很不错的,而且还在不断发展,但把它们用于生产程序还是需要认真考虑的。SingleConnectionDataSource只使用一个数据库连接,所以不适合用于多线程程序。
而 DriverMangerDataSource虽然能够支持多线程,但它会在每次连接请求时都新建一个连接,这是以性能为代价的。由于这些限制,我们强烈 建议应该使用数据源池。
如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者使用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。

SSM框架之DriverManagerDataSource--spring-mybatis.xml

<!-- Spring提供了的数据源,每个连接请求时都新建一个连接 -->
     <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${datasource.driverClassName}"></property>
        <property name="url" value="${datasource.url}"></property>
        <property name="username" value="${datasource.userName}"></property>
        <property name="password" value="${datasource.userPassword}"></property>
    </bean>
datasource.driverClassName=com.mysql.cj.jdbc.Driver
datasource.userName=root
datasource.userPassword=123456
datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC

SSM框架之dbcp2连接池--spring-mybatis.xml(若是dbcp,个别参数对应不上)

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${dbcp.driverClassName}" />
        <property name="url" value="${dbcp.url}" />
        <property name="username" value="${dbcp.username}" />
        <property name="password" value="${dbcp.password}" />

        <!--initialSize: 初始化连接 -->
        <property name="initialSize" value="${dbcp.initialSize}" />
        <!--maxIdle: 最大空闲连接 -->
        <property name="maxIdle" value="${dbcp.maxIdle}" />
        <!--minIdle: 最小空闲连接 -->
        <property name="minIdle" value="${dbcp.minIdle}" />
        <!--maxActive: 最大连接数量 -->
        <property name="maxTotal" value="${dbcp.maxActive}" />

        <!--removeAbandonedTimeout: 超时时间(以秒数为单位) -->
        <property name="removeAbandonedTimeout" value="${dbcp.removeAbandonedTimeout}" />
        <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
        <property name="maxWaitMillis" value="${dbcp.maxWait}" />
        <!-- 在空闲连接回收器执行周期(毫秒) -->
        <property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" />
        <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
        <property name="numTestsPerEvictionRun" value="${dbcp.numTestsPerEvictionRun}" />
        <!-- 最小空闲时间 -->
        <property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" />
        <!-- 验证链接是否有效的sql语句 -->
        <property name="validationQuery" value="${dbcp.validationQuery}" />
        <!-- 获取链接之前是否测试链接的可用性 -->
        <property name="testOnBorrow" value="${dbcp.testOnBorrow}" />
    </bean>
#src/config/dbcp.properties
dbcp.driverClassName=com.mysql.cj.jdbc.Driver
dbcp.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
dbcp.username=root
dbcp.password=123456

dbcp.initialSize=3
dbcp.minIdle=5
dbcp.maxIdle=10
dbcp.maxActive=15
dbcp.maxWait=60000
dbcp.numTestsPerEvictionRun=10

dbcp.timeBetweenEvictionRunsMillis=60000
dbcp.minEvictableIdleTimeMillis=300000
dbcp.validationQuery=SELECT 1
dbcp.testOnBorrow=false

dbcp.removeAbandoned=true
dbcp.removeAbandonedTimeout=1800

SSM框架之c3p0连接池--spring-mybatis.xml

<!-- c3p0连接池配置 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${c3p0.driverClassName}"/>
        <property name="jdbcUrl" value="${c3p0.jdbcUrl}"/>
        <property name="user" value="${c3p0.user}"/>
        <property name="password" value="${c3p0.password}"/> 

        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/>
        <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <property name="initialPoolSize" value="${c3p0.initialPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>

        <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="${c3p0.maxIdleTime}"/>
         <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <property name="idleConnectionTestPeriod" value="${c3p0.idleConnectionTestPeriod}"/>
        <!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。
        所以设置这个参数需要考虑到多方面的因素。 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <property name="maxStatements" value="${c3p0.maxStatements}"/>
        <!-- c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能 通过 多线程实现多个操作同时被执行。Default: 3 -->
        <property name="numHelperThreads" value="${c3p0.numHelperThreads}"/>
    </bean>
#src/config/c3p0.properties
c3p0.driverClassName=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
c3p0.user=root
c3p0.password=123456

c3p0.acquireIncrement=3
c3p0.initialPoolSize=3
c3p0.idleConnectionTestPeriod=60
c3p0.minPoolSize=5
c3p0.maxPoolSize=100
c3p0.maxStatements=100
c3p0.numHelperThreads=10
c3p0.maxIdleTime=60

SSM框架之Druid连接池--spring-mybatis.xml

<!-- druid连接池配置 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close">
        <!-- 数据库基本信息配置 -->
        <property name="driverClassName" value="${druid.driverClassName}"></property>
        <property name="url" value="${druid.url}"></property>
        <property name="username" value="${druid.userName}"></property>
        <property name="password" value="${druid.userPassword}"></property>

        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${druid.initialSize}" />
        <!-- 最大并发连接数 -->
        <property name="maxActive" value="${druid.maxActive}" />
        <!-- 最小空闲连接数 -->
        <property name="minIdle" value="${druid.minIdle}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${druid.maxWait}" />

        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${druid.timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${druid.minEvictableIdleTimeMillis}" />

        <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
        <property name="poolPreparedStatements" value="${druid.poolPreparedStatements}" />
        <!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true -->
        <property name="maxPoolPreparedStatementPerConnectionSize"
            value="${druid.maxOpenPreparedStatements}" />
        <!-- 用来检测连接是否的sql,要求是一个查询语句。在mysql中通常设置为SELECT ‘X‘ -->
        <property name="validationQuery" value="${druid.validationQuery}" />
        <!-- 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery连接是否有效 -->
        <property name="testWhileIdle" value="${druid.testWhileIdle}" />
        <!-- 申请连接时执行validationQuery检测连接是否有效 这个配置会降低性能 -->
        <property name="testOnBorrow" value="${druid.testOnBorrow}" />
        <!-- 归还连接时执行validationQuery检测连接是否有效 这个配置会降低性能 -->
        <property name="testOnReturn" value="${druid.testOnReturn}" />

        <!-- 超过时间限制是否回收: 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="${druid.removeAbandoned}" />
        <!-- 超时时间:1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="${druid.removeAbandonedTimeout}" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${druid.logAbandoned}" />

        <!-- 监控统计拦截的filters stat是statfilter的别名,log4j是logFilter的别名 -->
        <property name="filters" value="${druid.filters}" />
        <property name="proxyFilters">
            <list>
                <ref bean="stat-filter" />
                <ref bean="log-filter" />
            </list>
        </property>
    </bean>

    <!-- 慢SQL记录 -->
    <bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
        <!-- 开启合并sql -->
        <property name="mergeSql" value="true" />
        <!-- 用来配置SQL慢的标准,执行时间超过slowSqlMillis的就是慢。slowSqlMillis的缺省值为3000,也就是3秒。 -->
        <property name="slowSqlMillis" value="1000" />
        <property name="logSlowSql" value="true" />
    </bean>
    <bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
        <!-- <property name="resultSetLogEnabled" value="false" /> -->
        <!-- <property name="statementExecutableSqlLogEnable" value="true" /> -->
    </bean>
#src/config/druid.properties
druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
druid.userName=root
druid.userPassword=123456

druid.initialSize=0
druid.maxActive=20
druid.minIdle=1
druid.maxIdle=20
druid.maxWait=60000

druid.timeBetweenEvictionRunsMillis=60000
druid.minEvictableIdleTimeMillis=300000

druid.poolPreparedStatements=true
druid.maxOpenPreparedStatements=20
druid.validationQuery=SELECT ‘x‘
druid.testWhileIdle=true
druid.testOnBorrow=false
druid.testOnReturn=false

druid.removeAbandoned=true
druid.removeAbandonedTimeout=1800
druid.logAbandoned=true

druid.filters=stat,log4j

在web.xml添加如下内容

<!-- druid连接池监控过滤器 -->
    <filter>
        <filter-name>DruidWebStatFilter</filter-name>
        <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
        <init-param>
            <param-name>exclusions</param-name> <!-- 经常需要排除一些不必要的url -->
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>DruidWebStatFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 这个StatViewServlet的用途包括:提供监控信息展示的html页面;提供监控信息的JSON API -->
    <servlet>
        <servlet-name>DruidStatView</servlet-name>
        <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        <!-- 白名单 -->
        <!-- <init-param>
            如果是限定指定的子网里的所有ip都可以访问,那就是ip/子网掩码数。例如 192.168.1.120/24 就相当于192.168.1.*
            <param-name>allow</param-name>
            <param-value>127.0.0.1</param-value>
        </init-param> -->
                <!-- 如果不配置用户名密码,就是任何人都可以访问了-->
        <init-param>
            <!-- 用户名 -->
            <param-name>loginUsername</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <!-- 密码 -->
            <param-name>loginPassword</param-name>
            <param-value>root</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DruidStatView</servlet-name>
        <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

输入用户名root、密码root即可登录

原文地址:https://blog.51cto.com/14553187/2440413

时间: 2024-08-04 06:58:42

SSM框架搭建之数据库连接池(三)的相关文章

ssm框架搭建-maven

SpringMVC  Spring  MyBatis,是SSM框架. Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行定制. MyBatis本是apache的一个开源项目iBatis,MyBatis是一个基于Java

SSM框架搭建教程(从零开始,图文结合)

1.准备 IntelliJ IDEA Tomcat JDK Maven mysql spring.springmvc.mybatis 了解 现在假设如上条件你都具备,那么通过我这篇博客 你一定可以整合出 SSM 框架,完成如下效果 整个博客共分为三部分: 建立 基于 Maven 的 WEB 项目,启动 Tomcat ,项目启动 整合 Mybatis+Spring ,进行单元测试 可以完成从数据库查询出数据功能 整合 Mybaits+Spring+SpringMVC,输入Url 完成整个 MVC

SSM框架搭建web服务器实现登录功能(Spring+SpringMVC+Mybatis)

初学java EE,虽然知道使用框架会使开发更加便捷高效,但是对于初学者来说,感到使用框架比较迷惑,尤其是各种jar包的引用.各种框架的配置.注解的使用等等. 最好的学习方法就是实践,于是下载了一个现成的DEMO,通过简单的修改先成功在自己电脑上跑起来,然后再逐个文件进行分析学习,最终才能从总体的高度上掌握框架的运行机制和配置方法,这样才能在实际运用中灵活配置,不会再局限于示例框架中. SSM框架搭建流程 SSM框架Web程序的流程 上面链接总结的流程很好,但是该流程没有加入DAO这一层,经过分

ssm框架搭建整合测试

下载各种jar包 mybatis下载 https://github.com/mybatis/mybatis-3/releases mysql驱动下载 http://mvnrepository.com/artifact/mysql/mysql-connector-java spring下载(spring所用到的所有jar包,包括springmvc) http://repo.spring.io/release/org/springframework/spring/ 配合spring使用的工具类收录(

SpringMVC笔记——SSM框架搭建简单实例

落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发的框架,对于新手来说也是比较容易学习入门的.虽说容易,但在框架搭建过程中仍然遇到了许多问题,因此用实例记录下来吧. 实例 第一步——导包 Spring框架包及其依赖包 MyBatis框架包及其依赖包 MyBatis-EhCache架包 C3P0架包 MySql数据库驱动包 项目架包如下: 项目结构如

实习小结(二)---SSM框架搭建

SSM项目框架搭建 前几天做了一个学生信息管理的项目,使用纯控制台输入,查询数据库,将信息在控制台中打印,功能完善得差不多之后,老师让将这个项目移植到Web中,使用Spring+SpringMVC+MyBatis将项目做成网页,借此机会熟悉一下SSM框架的搭建流程. 项目的目录结构如下: SSM框架搭建流程: 1.项目所需要的jar包 图片中的jar包可能一些多于的包,另外在开发中遇到没有导入的包的时候再去下载 2.配置文件 (1)web.xml <?xml version="1.0&qu

SSM框架搭建(二) 创建MAVEN项目

SSM框架搭建(一) JDK和MAVEN环境搭建 SSM框架搭建(二) 创建MAVEN项目 一:创建Maven 项目 注意选择是webapp的哪一个 我创建的默认JRE是1.5的,所以需要修改一下 选中项目,alt+enter(等于右键Properties) 1:修改java Bulid Path 2:修改java Compiler,改为自己的电脑最高版本jdk 3:修改 Project Facets,改为自己的电脑最高版本jdk 4:Dynamic Web Module,应该改为3.0的但是我

SSM框架搭建(一) JDK和MAVEN环境搭建

SSM框架搭建(一) JDK和MAVEN环境搭建 JDK配置 CLASSPATH .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar JAVA_HOME D:\Java\jdk1.8.0_31 path %JAVA_HOME%\bin %JAVA_HOME%\jre\bin 验证一下,成功 MAVEN 配置 MAVEN_HOME E:\apache-maven-3.3.9 path %MAVEN_HOME%\bin 验证一下,成功

idea ssm框架搭建

1.分享一篇完整的ssm框架搭建连接 大牛博客:https://www.cnblogs.com/toutou/p/ssm_spring.html#_nav_0 原文地址:https://www.cnblogs.com/wuzaipei/p/10577205.html