Maven Web项目+Spring配置druid数据源

ci

学习Maven,学习别人的经验,做个备忘录,希望可以帮到您

添加spring依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>

数据库依赖,此处使用mysql测试

 <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>

druid依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.9</version>
        </dependency>

创建 spring-application-context.xml

<!-- 读取数据库配置文件-->
<bean id = "propertyConfigurer" class ="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
    <property name ="locations" >
        <list>
        <value>classpath:spring/jdbc.properties</value>
        </list>
    </property>
</bean>


<!-- 阿里 druid 数据库连接池 -->
<bean id="dataSource"   class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <!-- 数据库驱动 -->
    <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
    <!-- ur地址 -->
    <property name="url"><value>${jdbc.url}</value></property>
    <!-- 用户名 -->
    <property name="username"><value>${jdbc.username}</value></property>
    <!-- 密码 -->
    <property name="password" ><value>${jdbc.password}</value></property>
    <!-- 密码 -->
    <property name="filters" ><value>${jdbc.filters}</value></property>
    <!-- 初始化连接数量 -->
    <property name="initialSize" ><value>${jdbc.initialSize}</value></property>
    <!-- 最大并发连接数 -->
    <property name="maxActive"><value>${jdbc.maxActive}</value> </property>
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait"><value>${jdbc.maxWait}</value> </property>
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis"><value>${jdbc.timeBetweenEvictionRunsMillis}</value> </property>
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis"><value>${jdbc.minEvictableIdleTimeMillis}</value> </property>
    <!--   用来检测连接是否有效的sql,要求是一个查询语句 -->
    <property name="validationQuery"><value>${jdbc.validationQuery}</value> </property>
    <!-- 建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于 timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 -->
    <property name="testWhileIdle"><value>${jdbc.testWhileIdle}</value> </property>
    <!-- 要启用PSCache,必须配置大于0,当大于0时, poolPreparedStatements自动触发修改为true。 在Druid中,不会存在Oracle下PSCache占用内存过多的问题, 可以把这个数值配置大一些,比如说10-->
    <property name="maxOpenPreparedStatements"><value>${jdbc.maxOpenPreparedStatements}</value> </property>
    <!-- 打开 removeAbandoned 功能 -->
    <property name="removeAbandoned"><value>${jdbc.removeAbandoned}</value> </property>
    <!-- 1800 秒,也就是 30 分钟 -->
    <property name="removeAbandonedTimeout"><value>${jdbc.removeAbandonedTimeout}</value> </property>
     <!--关闭 abanded 连接时输出错误日志-->
    <property name="logAbandoned"><value>${jdbc.logAbandoned}</value> </property>
</bean>

<!-- 事物管理器 -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<!-- 事物管理模板 -->
<bean id="transactionTemplate"   class="org.springframework.transaction.support.TransactionTemplate">
    <property name="transactionManager" ref="transactionManager" />
</bean>

<!-- 使用annotation定义事务 -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

<!-- 定义个通知,指定事务管理器 -->
<tx:advice id="readTxAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
        <tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
        <tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
        <tx:method name="*remove*" propagation="REQUIRED"   rollback-for="java.lang.Exception"/>
    </tx:attributes>
</tx:advice>
创建 dbc.properties
#属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
jdbc.filters:stat
#最大连接池数量
jdbc.maxActive = 20
#  初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
jdbc.initialSize = 1
#获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
jdbc.maxWait = 60000
#最小连接池数量
jdbc.minIdle = 10
#  有两个含义:1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
jdbc.timeBetweenEvictionRunsMillis = 60000
#Destory线程中如果检测到当前连接的最后活跃时间和当前时间的差值大于minEvictableIdleTimeMillis,则关闭当前连接。
jdbc.minEvictableIdleTimeMillis = 300000
#用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、 testWhileIdle都不会其作用。在mysql中通常为select 'x',在oracle中通常为select 1 from dual
jdbc.validationQuery = SELECT 'x'
#  建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
jdbc.testWhileIdle = true
#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串
jdbc.testOnBorrow = false
#指明是否在归还到池中前进行检验
jdbc.testOnReturn = false
#  statement池能够同时分配的打开的statements的最大数量, 如果设置为0表示不限制
jdbc.maxOpenPreparedStatements = 20
#标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制.如果设置为true, 连接被认为是被泄露并且可以被删除,如果空闲时间超过removeAbandonedTimeout. 设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接
jdbc.removeAbandoned = true
#泄露的连接可以被删除的超时值, 单位秒
jdbc.removeAbandonedTimeout = 1800
#  标记当Statement或连接被泄露时是否打印程序的stack traces日志。被泄露的Statements和连接的日志添加在每个连接打开或者生成新的Statement,因为需要生成stack trace。
jdbc.logAbandoned = true
#驱动名
jdbc.driverClassName:com.mysql.jdbc.Driver
#\u672c\u5730\uff08\u57df\u540d\uff09
jdbc.url=jdbc\:mysql\://localhost\:3306/frame?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull&allowMultiQueries\=true
 
jdbc.username=root
jdbc.password=123456

如以上配置不能完成运行,请联系我!

如有错误,敬请包含,请帮忙指出,大家一起共勉!不胜感激


猜你喜欢

转载自blog.csdn.net/qq_28538075/article/details/80302252
今日推荐