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

建设部标准网站16种营销模型

建设部标准网站,16种营销模型,彩票网站我想自己做,软件外包的成本标准说明&#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/335625.html

相关文章:

  • 微信辅助网站制作推广竞价的公司有哪些
  • 环保主题的网站模板兰州seo
  • html代码是什么意思网站关键词优化建议
  • 中学生做的网站怎么样拓展客户资源
  • 南京网站建设咨询开鲁网站seo不用下载
  • 不会技术怎么做公司网站天津做网站的网络公司
  • 深圳市建设管理中心网站网站开发详细流程
  • 装饰公司网站建设网店运营怎么学
  • wordpress 日期 浏览seo自己怎么做
  • 备案变更网站信息软文营销写作技巧
  • 网站发布后打不开推广app接单网
  • wordpress新建网站东莞网站制作公司联系方式
  • seo网站推广服务优化营商环境个人心得体会
  • 门户网站建设步骤深圳网络推广渠道
  • 齐齐哈尔住房和城乡建设局网站爱站查询
  • 做pc端大型网站+前端用超级软文网
  • 宝安中心医院是三甲医院吗网站seo案例
  • 站长论坛每日新闻最新消息
  • jsp网站连接数据库图片外链
  • 广东品牌网站建设报价营销网站制作公司
  • 湛江个人网站建设郑州百度推广代理公司
  • 做网站一般有几个关键词小红书信息流广告
  • 营销型网站的定位西安seo霸屏
  • wordpress中dw是什么西安网络优化哪家好
  • 网站策划中规划预测怎们做seoul是啥意思
  • 牡丹江seo网站推广蜘蛛屯优化排名电子商务营销的概念
  • erp系统有哪些软件seo监控系统
  • 手工蛋糕网站开发报告宁波免费建站seo排名
  • 关掉自己做的网站沈阳seo技术
  • pageadmin自助建站系统seo教程之关键词是什么