当前位置: 首页 > wzjs >正文

成都市城乡建设厅官方网站最新国内新闻重大事件

成都市城乡建设厅官方网站,最新国内新闻重大事件,网站建设内部下单流程,百石网怎么做网站说明&#xff1a;本文介绍如何在Spring Boot项目中&#xff0c;延迟执行某方法&#xff0c;及讨论延迟执行方法的是事务问题。 搭建Demo 首先&#xff0c;创建一个Spring Boot项目&#xff0c;pom.xml如下&#xff1a; <?xml version"1.0" encoding"UTF-…

说明:本文介绍如何在Spring Boot项目中,延迟执行某方法,及讨论延迟执行方法的是事务问题。

搭建Demo

首先,创建一个Spring Boot项目,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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><groupId>com.hezy</groupId><artifactId>delay_thread_demo</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.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency></dependencies>
</project>

写个接口,打印进入方法时的时间

import com.hezy.service.DelayService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.text.SimpleDateFormat;
import java.util.Date;@RestController
@RequestMapping("/demo")
@Log4j2
public class DemoController {@Autowiredprivate DelayService delayService;@GetMappingpublic String demo() {return "Hello World!";}@GetMapping("/delay1/{time}")public String delay1(@PathVariable Integer time) {log.info("enter delay1...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);delayService.delay1(time);return "success";}
}

延迟执行实现

delayService,delay1()实现,如下:

    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);/*** 延迟执行* @param time*/public void delay1(Integer time) {scheduler.schedule(() -> {log.info("run delay1...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);}, time, TimeUnit.SECONDS);}

就是开了一个线程来执行,可设置延迟时间。启动项目,测试,如下:

(发送请求,响应结果即刻返回)

在这里插入图片描述

(控制台可见任务延迟5秒执行)

在这里插入图片描述

事务问题

写个实体类

import lombok.Data;@Data
public class User {private Integer id;private String username;private String password;
}

再写个Mapper,里面写个insert()方法

import com.hezy.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper {@Insert("insert into user (id, username, password) values (#{id}, #{username}, #{password})")void insert(User user);
}

新建个延迟方法,delay2(),方法生加声明式注解,方法内手动制造一个异常

(controller)

    @PostMapping("/delay2/{time}")public String delay2(@RequestBody User user, @PathVariable Integer time) {log.info("enter delay2...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);delayService.delay2(user, time);return "success";}

(service)

    /*** 声明式事务*/@Transactional(rollbackFor = Exception.class)public void delay2(User user, Integer time) {scheduler.schedule(() -> {log.info("run delay2...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);userMapper.insert(user);int i = 1 / 0;user.setId(3);userMapper.insert(user);}, time, TimeUnit.SECONDS);}

启动项目,调用方法

在这里插入图片描述

控制台没有报错

在这里插入图片描述

数据库,插入了一条数据,事务没有控制住

在这里插入图片描述

以上说明,声明式事务无法控制延迟执行的方法,并且异常也被线程内捕获了,没有抛出来。

编程式事务

试下编程式事务,手动实现事务,如下:

(controller)

    @PostMapping("/delay3/{time}")public String delay3(@RequestBody User user, @PathVariable Integer time) {log.info("enter delay3...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);delayService.delay3(user, time);return "success";}

(service)

    @Autowiredprivate PlatformTransactionManager transactionManager;/*** 编程式事务*/public void delay3(User user, Integer time) {scheduler.schedule(() -> {TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());try {log.info("run delay3...date={} time={}",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), time);userMapper.insert(user);// 故意产生异常int i = 1 / 0;user.setId(3);userMapper.insert(user);// 提交事务transactionManager.commit(status);} catch (Exception e) {transactionManager.rollback(status);e.printStackTrace();}}, time, TimeUnit.SECONDS);}

把数据库记录删掉,启动项目,测试

在这里插入图片描述

控制台报错

在这里插入图片描述

数据库没有插入记录,编程式事务控制住了

在这里插入图片描述

总结

本文介绍了在Spring Boot项目中延迟执行方法的实现,以及延迟执行下声明式事务和编程式事务的使用情况。

完整源码:https://github.com/HeZhongYing/delay_thread_demo

http://www.dtcms.com/wzjs/34903.html

相关文章:

  • 2003配置网站与2008的区别如何做企业网页
  • 怎样做网站步骤关系营销案例
  • 石家庄做网站和宣传的推广普通话手抄报句子
  • 网络运营与维护嘉兴百度seo
  • 中信云 做网站律师网络推广
  • 如何做单网页网站怎么做网络销售
  • 做美女网站违法不啊惠州搜索引擎seo
  • thinkphp 显示第三方网站图片软文发布
  • 哪个网站能在家做兼职百度指数数据官网
  • 珠海网站开发软件百度授权代理商
  • 泰州网站建设报价太原竞价托管公司推荐
  • tint-k主题做企业网站广告公司业务推广
  • 太仓网络公司windows优化软件哪个好
  • 乐陵建设网站seo是哪个国家
  • 网页上本地网站搜索怎样做泰安百度推广电话
  • 最超值的锦州网站建设软文文案范文
  • 网站模板兼容手机端seo sem推广
  • 网页访问限制怎么解除系统优化是什么意思
  • 企业网站不备案郑州网络营销公司
  • 网站做淘宝联盟晚上免费b站软件
  • 上海网站制作建设怎么样aso关键词搜索优化
  • 公司网站制作深圳国外推广网站有什么
  • 科技公司网站网页深圳最新疫情
  • 山西两学一做网站登录怎么注册自己公司的网址
  • 新兴县做网站的网络广告营销典型案例
  • 网站建设的基本元素班级优化大师官方免费下载
  • wordpress 伪原创 插件竞价托管优化公司
  • wordpress密码进入网站互联网营销专业
  • 做英文网站挂谷歌广告西安竞价托管
  • wordpress blogroll成品网站seo