Spring 在xml配置里配置事务详解编程语言

事先准备:
配置数据源对象
用<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.Driver 
jdbcUrl=jdbc:mysql://localhost:3306/mydb 
user=root 
password= 
minPoolSize=5 
maxPoolSize=20 
initialPoolSize=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错误,数据回滚,数据库并没有删除。说明配置的事务生效了。

Spring 在xml配置里配置事务详解编程语言

Spring 在xml配置里配置事务详解编程语言

Spring 在xml配置里配置事务详解编程语言

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/16988.html

(0)
上一篇 2021年7月19日 19:47
下一篇 2021年7月19日 19:47

相关推荐

发表回复

登录后才能评论