Spring 在xml配置里配置事务

来源:互联网 发布:网络下载限速怎么设置 编辑:程序博客网 时间:2024/05/21 16:59

事先准备:
配置数据源对象
用<bean>实例化各个业务对象。

1.配置事务管理器。

<bean id="transactionManager" class="org.springframework.jdbc.datasourceManager">  <property name="datasource" ref="datasource"></property></bean>

 

2.配置事务属性

复制代码
<tx:advice id="txAdvice" transaction-manager="transactionManager">    <tx:attributes>        <tx:method name="方法名" propagation="REQUIRES_NEW"/>    <!--新开事务-->        <tx:method name="*"/>                                    <!--使用原有事务-->    </tx:attributes></tx:advice>
复制代码

 

3.配置事务切入点,注入事务属性

<aop:config>    <aop:pointcut expression="execution(.......)" id="txPointCut"/>    <aop:advisor advice-ref="txtAdvice" pointcut-ref="txtPointCut"/></aop:config>

实例:

准备工作:导入c3p0、Spring框架、Mysql、AOP的jar包,并配置好。

db.properties 

复制代码
driverClass=com.mysql.jdbc.DriverjdbcUrl=jdbc:mysql://localhost:3306/mydbuser=rootpassword=minPoolSize=5maxPoolSize=20initialPoolSize=5
复制代码

三个接口

package com.itnba.maya.dao;public interface IInfoDao {    public void delete(String code);}
package com.itnba.maya.dao;public interface IWorkDao {    public void deleteInfocode(String code);}
复制代码
package com.itnba.maya.dao;public interface IInfoService {    public void delete(String code);}
复制代码

接口的实现类

复制代码
package com.itnba.maya.daoimp;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import com.itnba.maya.dao.IInfoDao;public class InfoDao implements IInfoDao {    private JdbcTemplate j;    public JdbcTemplate getJ() {        return j;    }    public void setJ(JdbcTemplate j) {        this.j = j;    }    @Override    public void delete(String code) {        // 故意设置一个错误        if(code.equals("p008")){            int n=1/0;        }                String sql="delete from info where code=?";        j.update(sql,code);    }}
复制代码
复制代码
package com.itnba.maya.daoimp;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import com.itnba.maya.dao.IWorkDao;public class WorkDao implements IWorkDao {        private JdbcTemplate j;    public JdbcTemplate getJ() {        return j;    }    public void setJ(JdbcTemplate j) {        this.j = j;    }    public void deleteInfocode(String code) {            String sql="delete from work where infocode=?";        j.update(sql,code);    }}
复制代码
复制代码
package com.itnba.maya.daoimp;import com.itnba.maya.dao.IInfoDao;import com.itnba.maya.dao.IInfoService;import com.itnba.maya.dao.IWorkDao;public class InfoService implements IInfoService {        private IInfoDao infoDao;     public IInfoDao getInfoDao() {        return infoDao;    }    public void setInfoDao(IInfoDao infoDao) {        this.infoDao = infoDao;    }    public IWorkDao getWorkdao() {        return workdao;    }    public void setWorkdao(IWorkDao workdao) {        this.workdao = workdao;    }    private IWorkDao workdao;    public void delete(String code) {                infoDao.delete(code);        workdao.deleteInfocode(code);            }}
复制代码

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:tx="http://www.springframework.org/schema/tx"    default-autowire="byName"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">                <!-- 引入db.properties文件 -->        <context:property-placeholder location="classpath:db.properties"/>        <!-- 生成连接池 -->        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource">            <property name="driverClass" value="${driverClass}"></property>            <property name="jdbcUrl" value="${jdbcUrl}"></property>            <property name="user" value="${user}"></property>            <property name="password" value="${password}"></property>            <property name="minPoolSize" value="${minPoolSize}"></property>            <property name="maxPoolSize" value="${maxPoolSize}"></property>            <property name="initialPoolSize" value="${initialPoolSize}"></property>        </bean>        <!-- 生成JdbcTemplate -->        <bean class="org.springframework.jdbc.core.JdbcTemplate" id="j">            <property name="dataSource" ref="dataSource"></property>        </bean>        <!-- 配置实体类 -->        <bean class="com.itnba.maya.daoimp.InfoDao" id="infoDao">            <property name="j" ref="j"></property>        </bean>            <bean class="com.itnba.maya.daoimp.WorkDao" id="workDao">            <property name="j" ref="j"></property>        </bean>            <bean class="com.itnba.maya.daoimp.InfoService" id="service">            <property name="infoDao" ref="infoDao"></property>            <property name="workdao" ref="workDao"></property>        </bean>                        <!-- 配置事务管理器 -->        <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">            <property name="dataSource" ref="dataSource"></property>        </bean>        <tx:advice id="advice"     transaction-manager="transactionManager">            <tx:attributes>                <tx:method name="*" propagation="REQUIRED"/><!-- *是对所有方法都加 -->            </tx:attributes>        </tx:advice>        <!-- 用切点把事务切进去 -->        <aop:config>            <aop:pointcut expression="execution(* com.itnba.maya.daoimp..*.*(..))" id="pointcut"/>            <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>        </aop:config>        </beans>
复制代码

mian函数测试事务有没有生效:

复制代码
package com.itnba.maya.daoimp;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.itnba.maya.dao.IInfoService;public class Test {    private static ApplicationContext context=null;    private static IInfoService infoservice=null;            static{        context=new ClassPathXmlApplicationContext("beans.xml");        infoservice=(IInfoService) context.getBean("service");            }        public static void main(String[] args) {                infoservice.delete("p008");    }}
复制代码

结果除0错误,数据回滚,数据库并没有删除。说明配置的事务生效了。


原创粉丝点击