1. 程式人生 > >Maven Web專案+Spring配置druid資料來源

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

如以上配置不能完成執行,請聯絡我!

如有錯誤,敬請包含,請幫忙指出,大家一起共勉!不勝感激