【框架整合】二、Spring資料來源配置及JdbcTemplate配置
阿新 • • 發佈:2019-01-04
一、匯入必需包
c3p0-0.9.1.2.jar
commons-dbcp-1.4.jar
commons-pool-1.6.jar
mysql-connector-java-5.1.24.jar
二、 建立jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mytestsql jdbc.username=root jdbc.password=xiazhang jdbc.initialPoolSize=1 jdbc.minPoolSize=1 jdbc.maxPoolSize=10 jdbc.autoCommitOnClose=false jdbc.breakAfterAcquireFailure=false jdbc.testConnectionOnCheckout=false jdbc.testConnectionOnCheckin=false jdbc.idleConnectionTestPeriod=60 jdbc.acquireRetryAttempts=10 jdbc.acquireRetryDelay=1000
後面會詳解每個配置引數的意義
三、 配置datasource
這裡我們使用springContext-datasouce.xml 專門用於資料來源配置檔案
只需在applicationContext.xml匯入此檔案就行
<!-- 資料來源配置檔案 --> <import resource="classpath:applicationContext-datasource.xml"/> <!-- 引入本地配置檔案 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean>
這裡還要引入dbc.properties檔案,當然這個檔案在springContext-datasouce.xml檔案中引入也可以
不過習慣統一放在applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd" default-lazy-init="true"> <!-- ========================= RESOURCE DEFINITIONS ========================= --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}" /> <!-- 基本屬性 url、user、password --> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialPoolSize" value="${jdbc.initialPoolSize}" /> <property name="minPoolSize" value="${jdbc.minPoolSize}" /> <property name="maxPoolSize" value="${jdbc.maxPoolSize}" /> <!-- 連線池在回收資料庫連線時是否自動提交事務。如果為false,則會回滾未提交的事務,如果為true,則會自動提交事務。default : false --> <property name="autoCommitOnClose" value="${jdbc.autoCommitOnClose}" /> <!-- 如果為true,則當連接獲取失敗時自動關閉資料來源,除非重新啟動應用程式。所以一般不用。default : false --> <property name="breakAfterAcquireFailure" value="${jdbc.breakAfterAcquireFailure}" /> <!-- testConnectionOnCheckout如果設定為true,每次從池中取一個連線,將做一下測試,使用automaticTestTable --> <!-- 或者 preferredTestQuery,做一條查詢語句.看看連線好不好用,不好用,就關閉它,重新從池中拿一個 --> <property name="testConnectionOnCheckout" value="${jdbc.testConnectionOnCheckout}" /> <property name="testConnectionOnCheckin" value="${jdbc.testConnectionOnCheckin}" /> <!-- 設定在池中的沒有被使用的連線,是否定時做測試,看看這個連線還可以用嗎 --> <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" /> <!-- 連線池在無空閒連線可用時一次性建立的新資料庫連線數,default : 3 --> <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" /> <!-- 兩次連線中間隔時間,單位毫秒,連線池在獲得新連線時的間隔時間。default : 1000 單位ms --> <property name="acquireRetryDelay" value="${jdbc.acquireRetryDelay}" /> </bean> <!-- nativeJdbcExtractor,defaultLobHandler 用來處理對clob、 blob資料型進行操作問題 --> <!-- nativeJdbcExtractor 和 defaultLobHandler Bean 都設定為 lazy-init="true", nativeJdbcExtractor 需要通過執行期的反射機制獲取底層的 JDBC 物件, 所以需要避免在 Spring 容器啟動時就例項化這兩個Bean。 --> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" lazy-init="true" /> <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" /> <!-- JdbcTemplate 配置開始 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" autowire="byName"> <constructor-arg><ref bean="dataSource"/></constructor-arg> </bean> <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate" autowire="byName"> <constructor-arg><ref bean="dataSource"/></constructor-arg> </bean> <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate" autowire="byName"> <constructor-arg><ref bean="dataSource"/></constructor-arg> </bean> <!-- JdbcTemplate 配置結束 --> <!-- 事物配置 開始--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 事務管理 宣告式事務--> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- Spring使用 <tx:advice>和 <aop:config> 用來配置事務 --> <!-- 通知 --> <!-- <tx:advice id="txAdvice" transaction-manager="transactionManager"> --> <!-- <tx:attributes> --> <!-- 傳播行為 --> <!-- <tx:method name="save*" propagation="REQUIRED"/> --> <!-- <tx:method name="insert*" propagation="REQUIRED"/> --> <!-- <tx:method name="update*" propagation="REQUIRED"/> --> <!-- <tx:method name="delete*" propagation="REQUIRED"/> --> <!-- <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> --> <!-- <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> --> <!-- </tx:attributes> --> <!-- </tx:advice> --> <!-- 配置aop --> <!-- <aop:config> --> <!-- <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.wxisme.ssm.service.impl.*.*(..))"/> --> <!-- </aop:config> --> <!-- 事物配置 結束--> </beans>
注意這裡 <!-- 事務管理 宣告式事務--><tx:annotation-driven transaction-manager="transactionManager" /> 需要引入包 aopalliance-1.0.jar 否則:Caused by: Java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor 這裡使用aop強化事物的配置是註釋掉的, 如果要使用 Spring使用 <tx:advice>和 <aop:config> 用來配置事務 除了aopalliance-1.0.jar 還需要額外引入包 aspectjrt.jar,aspectjweaver.jar ,
四、測試一下
現在為了方便還是使用上一篇的Controller
修改如下
package com.mvc.first; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * 測試jdbcTemplate * * @author xiazhang * @date 2017-6-11 */ @Controller @RequestMapping(value="/hello") public class FirstController { @Autowired private JdbcTemplate jdbcTemplate; private static Log logger = LogFactory.getLog(FirstController.class); @RequestMapping(value="/world",method=RequestMethod.GET) public String hello(Model model,HttpServletRequest request,HttpServletResponse response){ response.setCharacterEncoding("UTF-8"); model.addAttribute("msg", "你好spring mvc"); List<Map<String, Object>> list = jdbcTemplate.queryForList("select id,classes,dress from my_info"); if(list != null){ for (Map<String, Object> map : list) { logger.info("jdbcTemplate:"+map.get("id")+","+map.get("classes")+","+map.get("dress")); } }else{ logger.info("查詢結果為空!!!!!!!!!"); } return "index"; } }
執行專案、傳送請求
結果
success