spring04-事务02, 基于注解的声明式事务

SPAD 单光子雪崩二极管 SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。 阅读详情

基于注解配置事务, 只需要三步

<?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"
       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/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">


    <context:component-scan base-package="com.hr"></context:component-scan>

    <context:property-placeholder location="db.properties"></context:property-placeholder>

    <!--配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.Driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

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

    <!--
        spring中基于注解的声明式事务控制配置步骤
        1 配置事务管理器
        2 开启spring对注解事务的支持
        3 在需要事务支持的地方使用@Transactional注解
    -->
    <!--1 配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--2 开启spring对注解事务的支持-->
    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>




</beans>

业务类:

package com.hr.service.impl;

import com.hr.dao.IAccountDao;
import com.hr.domain.Account;
import com.hr.service.IAccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service("accountService")
@Transactional(propagation = Propagation.SUPPORTS,readOnly = true)  //只读型事务的配置
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;



    public Account findAccountById(Integer accountId) {
        Account account = accountDao.findAccountById(accountId);
        return account;
    }

    //需要的是读写型事务的配置
    @Transactional(propagation = Propagation.REQUIRED,readOnly = false)
    public void transfer(String sourceName, String targetName, Float money) {
        //查询转出账户
        Account source = accountDao.findAccountByName(sourceName);
        //查询转入账户
        Account target = accountDao.findAccountByName(targetName);
        //转出账户减钱
        source.setMoney(source.getMoney() - money);
        //转入账户加钱
        target.setMoney(target.getMoney() + money);
        //更新转出账户
        accountDao.updateAccount(source);

        int i = 1 / 0;

        //更新转入账户
        accountDao.updateAccount(target);


    }
}

业务类中配置事务的注解, 可以在类上和方法上分别使用, 区别于只读型事务和读写型事务的配置. 相比于XML配置, 注解在xml配置相对简单, 但是要区分于类和方法上做不同的处理

github: https://github.com/2402zmybie/spring04_06tx_anno

 

基于Spring声明式事务的纯注解实现: 

package conf;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * Spring配置类, 相当于bean.xml
 */
@Configuration
@ComponentScan("com.hr")
@Import({JdbcConfig.class,TransactionManager.class})
@EnableTransactionManagement   //开启Spring对注解的支持
public class SpringConfiguration {
}
package conf;

import com.mchange.v2.c3p0.DriverManagerDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

/**
 * 和连接数据库相关的配置类
 */
@Configuration
@PropertySource("classpath:db.properties")
public class JdbcConfig {

    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean(name = "jdbcTemplate")
    public JdbcTemplate createJdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }

    @Bean(name = "dataSource")
    public DataSource createDataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClass(driver);
        ds.setJdbcUrl(url);
        ds.setUser(username);
        ds.setPassword(password);
        return ds;
    }


}
package conf;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

/**
 * 和事务相关的配置类
 */
public class TransactionManager {
    /**
     * 用于创建事务管理器对象
     * @param dataSource
     * @return
     */
    @Bean(name = "transactionManager")
    public DataSourceTransactionManager createTransactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

github: https://github.com/2402zmybie/spring04_07anno_tx_withoutxml

定制PYNQ的overlay 一、用HLS生成一个定制IP(加速器)(1)首先打开vivado hls,本人的版本是2017.2,点击创建一个新工程。(2)设置工程名和路径,顶层函数设置为add,创建一个新的C++程序,名字叫做adder.cpp,不用在testbench中添加文件。选择板子的时候搜索xc7z020clg400-1,这是PYNQ的板子号,选择完成。             (3)在左侧的菜单栏里选择Sourc... 阅读详情

相关推荐

【大模型】MHA,MQA,GQA及KV Cache详解

在自回归模型中(Autoregressive Models),模型会逐个生成文本的每个token,这个过程可能比较慢,因为模型一次只能生成一个token,而且每次新的预测都依赖于之前的上下文。这意味着,要预测第1000个token,你需要用到前999个token的信息,这通常涉及到对这些token的表示进行一系列矩阵乘法运算。而要预测第1001个token,你不仅需要前999个token的信息,还要加上第1000个token的信息。

酒酿小圆子呀~ 2611

spring基于注解 的声明式事务控制(配置方式)

spring基于注解 的声明式事务控制(配置方式) 第一步:配置事务管理器并注入数据源 <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name...

qq_42804736的博客 300

强化学习入门8—深入理解DDPG

本文是强化学习入门系列的第八篇,前面我们讲Actor-Critic时提到了DDPG。DDPG是google DeepMind团队提出的一种用于输出确定性动作的算法,它解决了Actor-Critic 神经网络每次参数更新前后都存在相关性,导致神经网络只能片面的看待问题这一缺点。同时也解决了DQN不能用于连续性动作的缺点。

小菜羊的博客 4314

spring控制事务:声明式事务(注解)

声明式事务(注解) spring声明事务的方式,使用注解的方式 @Transactional ⚫ 名称:@Transactional ⚫ 类型:方法注解,类注解,接口注解 ⚫ 位置:方法定义上方,类定义上方,接口定义上方 ⚫ 作用:设置当前类/接口中所有方法或具体方法开启事务,并指定相关事务属性 ⚫ 范例: @Transactional( readOnly = false, timeout = -1, isolation = Isolation.DEFAULT, rollbackFor = {Arithme

fushuai优快云的博客 1751

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4825

从TI官方手册里挖细节:TPS5430负压电路那个不起眼却救命的Cd电容

本文深入解析TPS5430负压电路中关键Cd电容的作用与设计要点,揭示其在DC-DC电源设计中的重要性。通过对比TI手册和实战案例,详细阐述Cd电容在高频电流回路、能量缓冲和噪声抑制中的核心功能,并提供选型与布局指南,帮助工程师避免芯片烧毁风险,提升电路稳定性。

weixin_27102543的博客 355

声明式事务(注解与纯注解方式)

介绍了使用注解与纯注解的方式来实现声明式事务

凉茶铺的博客 2823

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1711

【Spring系列-08】声明式事务实现原理

Spring 声明式事务实现原理深度剖析 摘要:本文深入分析了Spring声明式事务的核心实现原理,重点探讨了事务抽象设计思想和传播行为机制。Spring通过PlatformTransactionManager接口实现了事务管理的抽象,支持多种事务管理器实现(如JDBC、JPA、JTA等),并通过TransactionDefinition定义事务属性。文章详细解析了7种事务传播行为在源码中的实现逻辑,包括PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW等,并展示了转

专注后端技术架构,AI技术分享 2124

【花雕学编程】Arduino FOC 之AS5048A磁编码器模块

您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。在Arduino平台上实现FOC可以提供平滑的运行和高度的扭矩、速度和位置控制,它通过精确控制电机的电流和电压来实现高效率、高精度和低噪声的操作。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。1、高性能电机控制:FOC是一种高级的电机控制算法,可以精准控制PMSM(永磁同步电机)和BLDC(无刷直流)电机,实现平滑的转速和扭矩输出。

雕爷学编程 1496

基于HTML5的酒店在线预订系统设计与实现

1.背景介绍 酒店预订系统,作为现代酒店业务中的重要一环,其便捷性、智能化程度直接影响着酒店的服务质量和经营效果。近年来,随着互联网技术和移动设备的快速发展,以及消费者行为的日益电子化,酒店预订系统也正在经历一场深刻的变革。传统的酒店预订系统往往依赖于复杂的软件安装和硬件设备,而新一代的酒店预订系统则更加强调在线、移动和云端的特性。HTML5作为一种前

AI天才研究院 1909

day04 spring 声明式事务

spring 声明式事务

Libra_97的博客 627

YOLOv8/v9 遥感图像目标检测实战指南:建筑物检测与变化监测

遥感图像在城市规划、灾害评估、农业监管等领域应用广泛,但传统目标检测方法存在效率低、精度不足、难以适配遥感图像大尺寸、多尺度目标等问题。本文以“建筑物检测与变化监测”为核心,基于DOTA、NWPU VHR-10等公开数据集,系统讲解YOLOv8/v9在遥感图像中的实战流程。从数据获取、格式转换、模型训练优化,到大图切片推理、建筑物变化监测,全程提供可复现的代码与参数配置。通过针对性优化(旋转增强、切片推理等),模型在NWPU VHR-10数据集上mAP50达0.85以上,可适配卫星影像、无人机航拍等多场景

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 519

Spring 基于注解的自动化事务

Spring基于注解的自动化事务管理摘要 Spring通过@EnableTransactionManagement启用声明式事务管理,使用@Transactional注解标记需要事务的方法。该注解支持多种属性配置,包括事务管理器指定、隔离级别、传播行为等。默认情况下,事务在运行时异常时回滚,编译时异常不回滚。 事务管理器(PlatformTransactionManager/ReactiveTransactionManager)负责控制事务的获取、提交和回滚,底层通过TransactionIntercept

南部余额的博客 1393

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring04JdbcTemplate基本使用、声明式事务控制、基于注解的声明式事务控制

Spring02配置据源、注解开发、整合JunitJdbcTemplate基本使用01-JdbcTemplate基本使用-概述(了解)02-JdbcTemplate基本使用-开发步骤(理解)03-JdbcTemplate基本使用-快速入门代码实现(应用)04-JdbcTemplate基本使用-spring产生模板对象分析(理解)05-JdbcTemplate基本使用-spring产生模板对象代码实现(应用)06-JdbcTemplate基本使用-spring产生模板对象代码实现(抽取jdbc.propert

狗提莫的博客 193

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Spring 事务控制 -- 基于注解的声明式事务控制

01:Spring 事务控制 – 编程式事务控制相关对象 02:Spring 事务控制 – 基于XML的声明式事务控制:环境搭建 03:Spring 事务控制 – 基于XML的声明式事务控制:详细配置 1. 基于注解的声明式事务控制 在此之前,你应该先把环境搭建好。 02:Spring 事务控制 – 基于XML的声明式事务控制:环境搭建 1.1 修改applicationContext.xml配置文件 一般来说,自己写的类通过注解的方式交给Spring IoC管理。非自定义的类通过配置文件的方式进行配置

天行健 君子以自强不息,地势坤 君子以厚德载物。 569

04【Spring声明式事、传播行为、AOP事务控制】

如果一个业务操作中多次访问了数据库,必须保证每条SQL语句都执行成功。如果其中有一条执行失败,所有已经执行过的代码必须回滚。回到没有执行前的状态。称为事务。要么所有的SQL语句全部执行成功,要么全部失败。什么是编程式事务?编程式事务简单的来说就是采用编程的方式来管理事务,编程式事务需要将事务管理的代码写入到业务方法中,相对于核心业务而言,事务管理的代码显然属于非核心业务,对核心业务代码的侵入性太大;而且如果多个模块都使用同样模式的代码进行事务管理,显然会造成较大程度的代码冗余。

緑水長流*z 759

【Spring笔记】04、使用注解实现声明式事务

1.使用注解实现事务(声明式事务) 目标:通过事务 使以下方法 要么全成功、要么全失败 public void addStudent() { //增加班级 //增加学生 //crdu } a. jar包 spring-tx-4.3.9.RELEASE ojdbc.jar commons-dbcp.jar 连接池使用到数据源 commons-pool.jar 连接池 ...

瓦刀 252

Spring之事务

出现了数学运算异常(ArithmeticException),但是我们设置的回滚策略是,当出现ArithmeticException不发生回滚,因此购买图书的操作。【有事务的话,就在这个事务里再嵌套一个完全独立的事务,嵌套的事务可以独立的提交和回滚。【不管有没有,直接开启一个新事务,开启的新事务和之前的事务不存在嵌套关系,之前事务被挂起】在service类中有a()方法和b()方法,a()方法上有事务,b()方法上也有事务。当a()方法执行过程中调用了b()方法,事务是如何传递的?【没有就新建,有就加入】

从基础到源码解析的学习记录 822

[Spring] Spring事务与事务的传播

🏵️热门专栏:🧊 Java基本语法(97平均质量分)🍕 Collection与数据结构 (92平均质量分)🧀线程与网络(96平均质量分)🍭MySql数据库(93平均质量分)🍬算法(97平均质量分)🍃 Spring(97平均质量分)

无需多言 2288

【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)

声明式事务管理 文章目录声明式事务管理基于XML方式的声明式事务基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis) 和 Spring 3.0就这么简单 -Spring的事务管理 声明式事务管理 数据访问的技术很多,如JDBC、JPA、Hibernate、分布式事务等。面对众多的数据访问技术,Spr...

渐若窥宏大的博客 5029

spring基于注解的声明式事务控制

spring基于注解的声明式事务控制 1.打开IDEA的界面如图所示:点击Create New Project. 2.选择Maven工程和JDK的版本,并点击Next。如图所示: 3.填写项目名称和保存的地址,如图所示。点击Finish。 4.导入相应依赖jar包的代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi

weixin_40055163的博客 185

spring基于纯注解的声明式事务控制

spring基于纯注解的声明式事务控制 1.打开IDEA的界面如图所示:点击Create New Project. 2.选择Maven工程和JDK的版本,并点击Next。如图所示: 3.填写项目名称和保存的地址,如图所示。点击Finish。 4.导入相应的依赖jar包的代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x

weixin_40055163的博客 232

Spring 事务和事务传播机制

事务是⼀组操作的集合。是⼀个不可分割的操作。事务会把所有的操作作为⼀个整体,一起向数据库提交或者是撤销操作请求,所以这组操作要么同时成功,要么同时失败。事务的应用场景是非常多的,例如我们的支付系统,A向B转账,这个过程B只有收到A的转账才会结束,若B没有收到转账,则会发生回滚。

冷瞳的博客 2288

Spring事务管理:程序化 vs 声明式

Spring框架为事务管理提供了两种主要方式:程序化事务管理和声明式事务管理。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 6108

Spring中基于注解的声明式事务控制

spring中基于注解的声明式事务控制配置步骤: 配置事务管理器。 开启spring对注解事务的支持。 在需要事务支持的地方使用@Transactional注解 示例: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ...

... 198

JAVAEE细细看 框架04 - Spring 声明式事务

Spring声明式事务 1. 概述 所谓的声明式事务,就是通过配置的方式,来实现事务管理. Spring中的声明式事务, 底层是通过AOP来实现的 2. 使用步骤 a. 导入相关jar包 <!-- spring的事务管理 --> <dependency> <groupId>org.springframework</groupId> ...

ZMW_IOS的博客 248
上一篇: spring04-事务01, 基于XML的声明式事务
下一篇: oracle笔记一
zmybiealex
博客等级 码龄10年 48粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值