【框架整合】二、Spring数据源配置及JdbcTemplate配置

来源:互联网 发布:域名购买后是永久的吗 编辑:程序博客网 时间:2024/05/17 04:15

一、导入必需包


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.Driverjdbc.url=jdbc:mysql://localhost:3306/mytestsqljdbc.username=rootjdbc.password=xiazhangjdbc.initialPoolSize=1jdbc.minPoolSize=1jdbc.maxPoolSize=10jdbc.autoCommitOnClose=falsejdbc.breakAfterAcquireFailure=falsejdbc.testConnectionOnCheckout=falsejdbc.testConnectionOnCheckin=falsejdbc.idleConnectionTestPeriod=60jdbc.acquireRetryAttempts=10jdbc.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 {@Autowiredprivate 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





原创粉丝点击