spring基础之tx事务

开启事物控制管理器

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

 配置事务通知

1.配置哪些函数委托spring进行事务管理。

2.事务的隔离级别(isolation默认:DEFAULT)

3。传播行为(propagation:REQUIREO)

4.是否是只读或读写事务(read-only:true只读false读写)

5.transaction-manager配置使用哪个事务控制管理器

 <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
<!--            name决定是哪种规则的的方法上添加事务
如果是xxx*表示方法名以xxx开头的方法会被选取-->
            <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="borrow*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="select*"  read-only="true"/>
        </tx:attributes>
    </tx:advice>

配置事务的切入点

 <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.dltt.money.service.*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="txPointcut"/>
    </aop:config>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql2209?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>


    </bean>

 配置jdbcTemplate组件

  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

案例演示:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>spring_08_tx</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.21.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.22.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.5.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.geronimo.bundles</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.8_2</version>
        </dependency>
    </dependencies>

<

app.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:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:component-scan base-package="com.dltt"/>
<!--    1.开启事物控制管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!--    配置事务通知-->
<!--
1.配置哪些函数委托spring进行事务管理
2.事务的隔离级别(isolation默认:DEFAULT),
3.传播行为(propagation:REQUIREO),
4.是否是只读或读写事务(read-only:true只读false读写)
5.transaction-manager配置使用哪个事务控制管理器
name管的是方法的开头
-->
    <tx:advice id="advice" transaction-manager="transactionManager">
        <tx:attributes>
<!--            name决定是哪种规则的的方法上添加事务
如果是xxx*表示方法名以xxx开头的方法会被选取-->
            <tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="borrow*" isolation="DEFAULT" propagation="REQUIRED" read-only="false"/>
            <tx:method name="select*"  read-only="true"/>
        </tx:attributes>
    </tx:advice>
<!--    配置事务的切入点-->
    <aop:config>
        <aop:pointcut id="txPointcut" expression="execution(* com.dltt.money.service.*.*(..))"/>
        <aop:advisor advice-ref="advice" pointcut-ref="txPointcut"/>
    </aop:config>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mysql2209?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>


    </bean>
    <!--    配置jdbcTemplate组件-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

java

package com.dltt.money.dao;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;

@Repository
public class ImplUserDao implements UserDao {
    @Resource
private JdbcTemplate JdbcTemplate;
    @Override
    public void reduceMoney() {
String sql="update user2 set user_money=user_money-? where user_name=?";
Object[] args={500,"小红"};
        JdbcTemplate.update(sql,args);
    }

    @Override
    public void addMoney() {
        String sql="update user2 set user_money=user_money+? where user_name=?";
        Object[] args={500,"小明"};
        JdbcTemplate.update(sql,args);
    }

}
package com.dltt.money.service;

import com.dltt.money.dao.UserDao;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class Uservice {
    @Resource(name="implUserDao")
    private UserDao userDao;
    //借钱业务
    public  void  borrowMoney(){
//        开启事物

//        try {
//            进行事物操作
            userDao.addMoney();
            //        设置异常
//                 int i=10/0;
                 userDao.reduceMoney();
//                 没发现异常,提交
//        } catch (Exception e) {
//            出现异常回滚
//        e.printStackTrace();
//        }


    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring TX事务管理是Spring框架提供的一种管理事务的机制。Spring并不直接管理事务,而是通过提供多种事务管理器,将事务管理的职责委托给底层的持久化机制(如Hibernate或JTA等)来实现。 在Spring进行事务管理时,主要有两种方式:编程式事务管理和声明式事务管理。声明式事务管理是一种常用的方式,它通过使用注解或配置文件的方式来定义事务的边界和行为。 要使用Spring事务管理,首先需要引入相关的库。然后,根据具体的需求,可以使用注解式的方式来管理事务。例如,可以在需要进行事务管理的方法或类上添加@Transactional注解,该注解会自动处理事务的开启、提交或回滚等操作。 下面是一个使用Spring事务管理的示例代码: ```java package org.example; import org.example.service.AccountService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Starter01 { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring01.xml"); AccountService accountService = (AccountService) applicationContext.getBean("accountService"); accountService.transfer(1, 100.0, 2); } } ``` 以上是一个简单的示例,它演示了如何使用注解方式来管理Spring事务。在该示例中,通过获取ApplicationContext来获取AccountService bean,并调用其transfer方法来完成事务操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值