SpringBoot的异步任务开启

SpringBoot异步任务

创建一个service包

创建一个类AsyncService

先模拟同步等待的情况

@Service
public class AsyncService {

   public void hello(){
       try {
           Thread.sleep(5000);//停止五秒
      } catch (InterruptedException e) {
           e.printStackTrace();
      }
       System.out.println("业务进行中....");
  }
}

编写controller包

编写AsyncController类

我们去写一个Controller测试一下

@RestController
public class AsyncController {

   @Autowired
   AsyncService asyncService;

   @GetMapping("/hello")
   public String hello(){
       asyncService.hello();
       return "hello";
  }

}

访问http://localhost:8080/hello进行测试,3秒后出现hello,这是同步等待的情况。

现在改写为异步----------------------------------------------

给hello方法添加@Async注解;

//告诉Spring这是一个异步方法
@Async
public void hello(){
   try {
       Thread.sleep(3000);
  } catch (InterruptedException e) {
       e.printStackTrace();
  }
   System.out.println("业务进行中....");
}

SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,开启异步注解功能;

@EnableAsync //开启异步注解功能
@SpringBootApplication
public class SpringbootTaskApplication {

   public static void main(String[] args) {
       SpringApplication.run(SpringbootTaskApplication.class, args);
  }

}

7、重启测试,网页瞬间响应,完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中,异步任务的回滚可以通过以下几种方式实现: 1. 使用@Async注解和@Transactional注解:如果在异步任务方法上同时使用了@Async和@Transactional注解,在异步任务出现异常时,Spring会将其回滚到事务的起始点。这种方式要求异步任务必须在同一个类中,不能被其他类调用。 ```java @Service public class AsyncService { @Async @Transactional public void asyncTask() { // 异步任务逻辑 } } ``` 2. 使用TransactionTemplate:通过TransactionTemplate手动管理事务,可以在异步任务方法中捕获异常并回滚事务。 ```java @Service public class AsyncService { private final TransactionTemplate transactionTemplate; public AsyncService(PlatformTransactionManager transactionManager) { this.transactionTemplate = new TransactionTemplate(transactionManager); } @Async public void asyncTask() { transactionTemplate.execute(status -> { try { // 异步任务逻辑 } catch (Exception e) { status.setRollbackOnly(); } return null; }); } } ``` 3. 使用编程式事务:在异步任务方法中手动开启、提交或回滚事务。 ```java @Service public class AsyncService { private final DataSource dataSource; public AsyncService(DataSource dataSource) { this.dataSource = dataSource; } @Async public void asyncTask() { Connection connection = null; try { connection = dataSource.getConnection(); connection.setAutoCommit(false); // 异步任务逻辑 connection.commit(); } catch (SQLException e) { if (connection != null) { try { connection.rollback(); } catch (SQLException ex) { ex.printStackTrace(); } } } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } } ``` 这些方法都可以在异步任务执行过程中捕获异常,并执行相应的事务回滚操作。根据实际情况选择适合的方式即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值