spring的注解事务
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于spring的注解事务内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在spring的注解事务相关知识领域提供全面立体的资料补充。同时还包含 safari浏览器、samba、SAMP 的知识内容,欢迎查阅!
spring的注解事务相关知识
-
深入理解 Spring 事务原理一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行:获取连接 Connection con = DriverManager.getConnection()开启事务con.setAutoCommit(true/false);执行CRUD提交事务/回滚事务 con.commit() / con.rollback();关闭连接 conn.close();使用Spring的事务管理功能后,我们可以不再写步骤 2 和 4 的代码,而是由Spirng 自动完成。 那么Spring是如何在我们书写的 CRUD 之前和之后开启事务和关闭事务的呢?解决这个问题,也就可以从整体上理解Spring的事务管理实现原理了。下面简单地介绍下,注解方式为例子配置文件开启注解驱动,在相关的类和方法上通过注解@Transactional标识。spring 在启动的时候会去解析生成相关的bean,这时候会查看拥
-
Spring事务事件监控前面我们讲到了Spring在进行事务逻辑织入的时候,无论是事务开始,提交或者回滚,都会触发相应的事务事件。本文首先会使用实例进行讲解Spring事务事件是如何使用的,然后会讲解这种使用方式的实现原理。1. 示例对于事务事件,Spring提供了一个注解@TransactionEventListener,将这个注解标注在某个方法上,那么就将这个方法声明为了一个事务事件处理器,而具体的事件类型则是由TransactionalEventListener.phase属性进行定义的。如下是TransactionalEventListener的声明:```@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@EventListenerpublic @interface TransactionalEventListener { // 指定当前标
-
spring boot事务与缓存spring boot事务机制 spring支持声明式事务,用@Tracsational注解在方法上表明该方法需要事务支持。被注解的方法在被调用时开启一个新的事务,当方法无异常结束时,spring会提交这个事务。 属性:propagation,定义事务的生命周期;isolation,隔离,决定事务的完整性;timeout,事务过期时间;readonly,只读事务;rollback,指定哪些异常可以引起事务回滚;norollback,哪些异常不可以引起事务回滚。 spring data JPA对所有的默认方法都开启了事务支持。 1.实体类Person 2.repository实体类PersonRepository 3.service: public class DemoServiceImpl implements DemoService{ @Autowired PersonRepository personRepository; @Transactional(rollbackFor=
-
Spring的统一事务模型组内每周都有技术分享,轮着来,人人有份。刚来一个月不到,就轮到我了。看了一个星期的Spring事务,分享之,反响还不错。遂将屁屁踢改成文稿,和诸君共食。难度一般,老少咸宜。Spring事务的知识体系进入主题之前,先来了解一下Spring事务,都有哪些内容:Spring事务包含对分布式事务和单机事务的支持,我们用的比较多的是单机事务,也就是只操作一个数据库的事务。单机事务,按照用法分,又可以分为编程式事务模型(TransactionTemplate)和声明式事务模型(@Transactional注解),后者可以理解为 aop + 编程式事务模型。编程式事务模型里面涉及到很多知识点,比如统一事务模型、事务传播级别、事务隔离级别等。我们今天要讲的是其中一点,统一事务模型。希望这次的分享能够让大家,对Spring事务有一个整体性的认识。不仅仅是TemplateSpring的统一事务模型,解决的一个核心问题,就是不管你用的是什么数据访问方式,Hibernate、MyBatis抑或是JDBC,你的Service层的代码
spring的注解事务相关课程
spring的注解事务相关教程
- 6. 使用注意事项 Spring 事务在一些情况下不能生效,需要特别注意。
- 2.3 通过注解设定定时任务 新建 MySpringTask 任务类,添加 @Component 注解注册 Spring 组件,定时任务方法需要在 Spring 组件类才能生效。注意类中方法添加了 @Scheduled 注解,所以会按照 @Scheduled 注解参数指定的规则定时执行。实例:/** * 任务类 */@Componentpublic class MySpringTask { /** * 每2秒执行1次 */ @Scheduled(fixedRate = 2000) public void fixedRateMethod() throws InterruptedException { System.out.println("fixedRateMethod:" + new Date()); Thread.sleep(1000); }}上面例子执行情况如下,可见是每隔 2 秒执行 1 次。fixedRateMethod:Fri May 15 22:04:52 CST 2020fixedRateMethod:Fri May 15 22:04:54 CST 2020fixedRateMethod:Fri May 15 22:04:56 CST 2020实例:/** * 任务类 */@Componentpublic class MySpringTask { /** * 执行结束2秒后执行下次任务 */ @Scheduled(fixedDelay = 2000) public void fixedDelayMethod() throws InterruptedException { System.out.println("fixedDelayMethod:" + new Date()); Thread.sleep(1000); }}上面的例子执行情况如下,每次打印后先等待 1 秒,然后方法执行结束 2 秒后再次执行任务,所以是每 3 秒打印 1 行内容。fixedDelayMethod:Fri May 15 22:08:26 CST 2020fixedDelayMethod:Fri May 15 22:08:29 CST 2020fixedDelayMethod:Fri May 15 22:08:32 CST 2020
- 2. Spring Task 定时任务 Spring Task 是 Spring Boot 内置的定时任务模块,可以满足大部分的定时任务场景需求。通过为方法添加一个简单的注解,即可按设定的规则定时执行该方法。下面就演示下 Spring Boot 中使用 Spring Task 的具体方法。
- 9.1 事务管理器 transactionManager 在 xml 文件中对应 <transactionManager type="JDBC"/>,其中 type 属性对应了事务管理器的两种类型,分别是JDBC和MANAGED。JDBC :直接使用了 JDBC 的提交和回滚机制。MANAGED:让容器来管理事务的整个生命周期,例如 spring 容器。提示: 如果你使用 spring 作为容器,那么 transactionManager 会被自动配置且可用。
- 3. 神奇的 @SpringBootApplication 注解 我们来看看这个注解到底是何方神圣!在 Eclipse 中选中该注解,按 F3 即可查看其定义。实例:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication {}看起来很复杂,其实就是一个组合注解,包含了多个注解的功能,咱们来分析一下。首先是 @SpringBootConfiguration 注解,它继承自 @Configuration 注解,功能也跟 @Configuration 一样。它会将当前类标注为配置类了,我们在启动类中配置 Bean 就可以生效了。其次是 @ComponentScan 注解,用来指定我们要扫描的包,以便发现 Bean 。注意在默认情况下, SpringBoot 扫描该注解标注类所在包及其子包。当我们的控制器、服务类等 Bean 放到不同的包中时,就需要通过 @ComponentScan 注解指定这些包,以便发现 Bean 。最重要的是 @EnableAutoConfiguration 注解,用来启动自动配置。开启自动配置后, Spring Boot 会扫描项目中所有的配置类,然后根据配置信息启动 Spring 容器。拥有了 @SpringBootConfiguration ,我们就拥有了一个可以拿来即用的 Spring 容器环境了。
- 6.2 一个事务方法调用另一个事务方法时失效 先看下面的实例,我们修改下 OrderService 类,通过一个事务方法调用 createOrder 方法。实例:/** * 订单服务类 */@Service // 注册为服务类public class OrderService { @Autowired private GoodsDao goodsDao; @Autowired private OrderDao orderDao; @Transactional // 开启事务 public int startCreateOrder(Long goodsId, Long count) throws Exception { return this.createOrder(goodsId, count); } /** * 下单 * * @param goodsId 购买商品id * @param count 购买商品数量 * @return 生成订单数 */ @Transactional(rollbackFor = Exception.class) // 抛出异常即回滚 public int createOrder(Long goodsId, Long count) throws Exception { // 锁定商品库存 GoodsDo goods = goodsDao.selectForUpdate(goodsId); // 扣减库存 Long newNum = goods.getNum() - count; goods.setNum(newNum); goodsDao.update(goods); if (count > goods.getNum()) { // 非受检查异常抛出时,会回滚 throw new Exception(); } // 生成订单 OrderDo order = new OrderDo(); order.setGoodsId(goodsId); order.setCount(count); int affectRows = orderDao.insert(order); return affectRows; }}此时我们在测试类中通过 startCreateOrder 方法再去调用 createOrder 方法,代码如下:实例:/** * 订单测试 */@SpringBootTestclass OrderTest { @Autowired private OrderService orderService; /** * 创建订单测试 */ @Test void testCreateOrder() throws Exception { // 购买id为1的商品1份 int affectRows = orderService.startCreateOrder(1L, 100L); assertEquals(1, affectRows); }}startCreateOrder 和 createOrder 方法都是事务方法,且这两个方法事务特性不同 (一个没有 rollbackFor=Exception.class),如果我们调用 startTransaction 方法,则 createOrder 中的事务并不会生效。也就是说,如果在同一个类中,一个事务方法调用另一个事务方法,可能会导致被调用的事务方法的事务失效!这是因为 Spring 的声明式事务使用了代理,具体机制此处不再探讨,但是一定要注意规避这种事务失效的场景。
spring的注解事务相关搜索
-
s line
safari浏览器
samba
SAMP
samplerate
sandbox
sanitize
saper
sas
sass
save
smarty模板
smil
smtp
snapshot
snd
snmptrap
soap
soapclient
soap协议