zoukankan      html  css  js  c++  java
  • springjdbc:数据源

    在项目中经常会需要连接数据库,可以使用的数据库有很多,平时我们还用连接池来管理数据库,现在学习了spring,我们知道了,spring的核心功能就是对象创建依赖注入

    而我们在使用连接池时,连接对象也是通过DataSource接口获取的,那么怎样使用spring来注入数据库连接信息呢?

    学习了spring之后,我们可以将数据库连接对象Connection的创建和关闭交给spring来管理

    在spring中默认提供了很多种数据库连接

    1.DriverMangerDataSource  spring自带数据源

    2.DBCP数据源

    3.C3P0数据源

    4.JNDI数据源

    这四种都是spring默认的数据库连接,不过我们平时使用的比较多的还是阿里的druid连接池

    下面依次介绍这几种数据源

    为了方便我们使用.properties文件来配置连接池信息

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql:///test
    jdbc.username=root
    jdbc.password=123456

    1.DriverMangerDataSource

    这是spring自带的数据源,它与之前我们使用jdbc创建连接对象时使用的DriverManger一样,只能创建一个对象,不支持连接池

    2.DBCP数据源

    dbcp数据源依赖两个jar包:

    commons-dbcp.jar,commons-pool.jar
    <!--配置dbcp连接池-->
        <!--BasicDataSource提供了close()方法关闭数据源,所以必须设定destroy-method=”close”属性, 
        以便Spring容器关闭时,数据源能够正常关闭。-->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <!--设置连接池属性-->
            <!--设置初始连接数-->
            <property name="initialSize" value="10"/>
            <!--最大连接数-->
            <property name="maxActive" value="15"/>
            <!--maxActive:最大连接数据库连接数,设置为0时,表示没有限制;-->
            <property name="maxWait" value="60000"/>
            <!--defaultAutoCommit:设置从数据源中返回的连接是否采用自动提交机制,默认值为 true;-->
            <property name="defaultAutoCommit" value="true"/>
            <!--defaultReadOnly:设置数据源是否仅能执行只读操作, 默认值为 false;-->
            <property name="defaultReadOnly" value="false"/>
            <!--maxIdle:最大等待连接中的数量,设置为0时,表示没有限制;-->
            <property name="maxIdle" value="15"/>
            <!--validationQuery:用于验证连接是否成功的查询SQL语句,SQL语句必须至少要返回一行数据,
            如你可以简单地设置为:“select count(*) from emp”;-->
            <property name="validationQuery" value="select count(*) from emp"/>
            <!--removeAbandoned:是否自我中断,默认是 false;-->
            <property name="removeAbandoned" value="false"/>
            <!--removeAbandonedTimeout:几秒后数据连接会自动断开,在removeAbandoned为true,提供该值;-->
            <!--<property name="removeAbandonedTimeout" value=""/>-->
            <!--logAbandoned:是否记录中断事件, 默认为 false;-->
            <property name="logAbandoned" value="false"/>
        </bean>

    3.C3P0数据源

    c3p0是一个开源的jdbc数据源实现项目,依赖于c3p0.jar

      <bean id="dataSource" class="com.mchange.v2.c3p0.jboss.C3P0PooledDataSource" destroy-method="close">
            <!--内部属性与dbcp一样-->
        </bean>

    4.JNDI数据源

    JNDI:Java命名和目录的服务接口

    作用:将一些资源(数据源),以目录的形式提供给程序访问

    如果应用配置在高性能的应用服务器(如WebLogic或Websphere等)上,我们可能更希望使用应用服务器本身提供的数据源。应用服务器的数据源 使用JNDI开放调用者用,Spring为此专门提供引用JNDI资源的JndiObjectFactoryBean类。  

      <bean id="" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName" value="资源路径"/>
        </bean>

    5.Druid连接池

    druid可以做什么?

    1.替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

    2.可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

    3.数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和 DruidDataSource都支持PasswordCallback。

    4.SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

    5.扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。

    druid的基本配置:
    <!-- 阿里 druid 数据库连接池 -->  
      < bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource"destroy-method = "close" >    
           <!-- 数据库基本信息配置 -->  
           < property name = "url" value = "${url}" />    
           < property name = "username" value = "${username}" />    
           < property name = "password" value = "${password}" />    
           < property name = "driverClassName" value = "${driverClassName}" />    
           < property name = "filters" value = "${filters}" />    
            <!-- 最大并发连接数 -->  
           < property name = "maxActive" value = "${maxActive}" />  
           <!-- 初始化连接数量 -->  
           < property name = "initialSize" value = "${initialSize}" />  
           <!-- 配置获取连接等待超时的时间 -->  
           < property name = "maxWait" value = "${maxWait}" />  
           <!-- 最小空闲连接数 -->  
           < property name = "minIdle" value = "${minIdle}" />    
           <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->  
           < property name = "timeBetweenEvictionRunsMillis" value ="${timeBetweenEvictionRunsMillis}" />  
           <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->  
           < property name = "minEvictableIdleTimeMillis" value ="${minEvictableIdleTimeMillis}" />    
           < property name = "validationQuery" value = "${validationQuery}" />    
           < property name = "testWhileIdle" value = "${testWhileIdle}" />    
           < property name = "testOnBorrow" value = "${testOnBorrow}" />    
           < property name = "testOnReturn" value = "${testOnReturn}" />    
           < property name = "maxOpenPreparedStatements" value ="${maxOpenPreparedStatements}" />  
           <!-- 打开 removeAbandoned 功能 -->  
           < property name = "removeAbandoned" value = "${removeAbandoned}" />  
           <!-- 1800 秒,也就是 30 分钟 -->  
           < property name = "removeAbandonedTimeout" value ="${removeAbandonedTimeout}" />  
           <!-- 关闭 abanded 连接时输出错误日志 -->     
           < property name = "logAbandoned" value = "${logAbandoned}" />  
      </ bean >

    平时练习可以只要前四条,用在项目上时建议全写

  • 相关阅读:
    [svc]frp内网穿透
    [svc]caffe安装笔记
    [na]icmp重定向
    [tools]python的mkdocs模块分分钟将md搞成一个网站
    [svc]samba服务搭建
    [ci] jenkins的Timestamper插件-让日志显示时间
    [k8s]subpath解决cm覆盖目录问题
    struts2+jquery+ajax实现上传&&校验实例
    java String.split方法是用注意点(转)
    loadrunner java协议脚本要点
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11294713.html
Copyright © 2011-2022 走看看