【问题标题】:call another service after sending the success response in spring boot?在spring boot中发送成功响应后调用另一个服务?
【发布时间】:2020-04-16 14:36:21
【问题描述】:

第一个控制器在发送成功响应之后,它会在发送响应后调用另一个方法。

返回响应后我需要调用m1()方法

    @RequestMapping(value = {"/hello"}, method = POST, produces = { "application/json" })
        public Response getAllData(@RequestBody String request){

            return new ResponseEntity<>("Hello World");
        }

    public void m1(){

    }

【问题讨论】:

  • 使用spring aspectJ @AfterReturning 建议
  • 请提供示例代码

标签: java spring spring-boot


【解决方案1】:

简单的技巧是使用 try...finally。

try{
  return new Response();
} finally {
  //do after actions
}

'finally' 总是在 try 块之后执行,不管里面有没有 return 语句。

【讨论】:

  • finally块在return语句之前执行。返回值只存储在finally块执行后返回。
  • m1() 会在返回响应后调用
  • @karthikmuthyam 不,它不会,正如我所说的,返回值只被保存,然后执行 finally 块,然后返回保存的返回值。因此,它似乎是在 return 方法之后执行的,但事实并非如此。
【解决方案2】:

使用 @AfterReturning 建议的 Spring AspectJ 示例

@Aspect
@Component
public class A {

  /*
   * AfterReturning advice
   */
  @AfterReturning("execution(* com.package.ClassName.getAllData(..))")
  public void m1(JoinPoint joinPoint) {


  }
}

【讨论】:

    【解决方案3】:

    你需要在你的配置类或者主类中添加@EnableAsync 然后创建另一个封装 Async 方法 m1 的服务类

    在您的班级中添加以下语句:

    asyncServiceImpl.m1();
    
    @Service 
    public class AsyncServiceImpl {
    
       @Async
       public CompletableFuture<String> m1() {
            // Your logic here
            return CompletableFuture.completedFuture(String.valueOf(Boolean.FALSE));
       }
    }
    

    【讨论】:

      【解决方案4】:

      您可以使用 eventListener 来创建事件。 并使用 EventListener 注释在公共方法中捕获它。 https://www.baeldung.com/spring-events

      【讨论】:

        【解决方案5】:

        最简单可靠的方式——运行线程。 Try-final一点都不好。 但最好的解决方案是 - 扔掉那个 SB 并使用纯 JEE servlet 在客户端请求的线程中调用您需要的所有内容(JSON、JPA、BM 事务),这样您就永远不会被这样卡住。

        【讨论】:

          猜你喜欢
          • 2019-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-11
          • 2014-12-22
          • 2019-12-26
          • 2020-11-22
          • 2017-07-10
          相关资源
          最近更新 更多