<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用HttpServletResponse實現curl接口時控制臺輸出(續)

      上一篇文章的問題

      在上一篇文章 Spring Boot RestController接口如何輸出到終端 中討論了如何使用 HttpSerlvetResponse 寫入輸出流,使應急接口通過 curl 調用時可以在控制臺輸出信息,使運維人員知道命令執行情況。

      但是上一篇文章的問題是,HttpServletResponse 是 Controller 的參數,這就使得如果要在其調用的 Service 方法中也要實現控制臺輸出,就必須讓所有涉及到的 Service 方法都帶上 HttpServletResponse 參數,這對業務的侵入實在太大,對于實際業務可能包含多個 Service、Component 之間的相互引用,改造成本是不可容忍的。

      本文的解決思路

      那么筆者就在想,如何構造一個全局的 HttpServletResponse 對象,使它能夠在各個 Controller、Service、Component 之前傳遞呢?經過查閱資料發現,HttpServletResponse 對象本身是可以被 @Autowired@Resource 注解注入的!那么我們就可以構造一個帶有自動注入的 HttpServletResponse 對象的 Component,然后在其他所有需要使用的地方去自動注入這個 Component 即可。

      代碼

      代碼實現如下:

      @Component
      public class WebUtil {
          @Resource
          private HttpServletResponse httpServletResponse;
      
          public void output(String message) {
              if (httpServletResponse == null) {
                  return;
              }
              try {
                  httpServletResponse.setContentType("text/plain;charset=utf-8");
                  httpServletResponse.setCharacterEncoding("UTF-8");
                  PrintWriter writer = httpServletResponse.getWriter();
                  writer.println(message);
                  writer.flush();
              } catch (Exception e) {
                  return;
              }
          }
      }
      

      由于我們的目的只是為了實現控制臺輸出,所以如果該方法拋出異常(主要是 IOExceptionIllegalStatesException),那么直接返回即可。這個問題主要出在定時任務中,因為定時任務是不含 HttpServletResponse 對象的,如果在定時任務中調用該方法的時候會拋出 IllegalStatesException

      在要使用該方法的類中使用自動注入,注入 WebUtil 類,然后使用它的對象(而不是這個類本身)的output方法即可。

      @Service
      @Slf4j
      public class TestServiceImpl implements TestService {
          @Resource
          private WebUtil webUtil;
      
          @Override
          public boolean emergencyOperation() throws IOException {
              log.info("開始執行應急操作任務");
              webUtil.output( "開始執行應急操作任務");
              for (int i = 0; i < 20; i++) {
                  webUtil.output( "完成第" + (i+1) + "批次");
                  log.info("完成第 {} 批次", i+1);
                  try {
                      Thread.sleep(500L);
                  } catch (InterruptedException e) {
                      log.warn("應急操作任務失敗");
                      webUtil.output( "應急操作任務失敗");
                      return false;
                  }
              }
              log.info("完成應急操作任務");
              webUtil.output( "應急操作任務完成");
              return true;
          }
      }
      

      經過測試發現,curl調用接口可以實現控制臺輸出,定時任務也執行正常,沒有預期外的異常產生。

      posted @ 2023-09-26 23:17  飛鳥_Asuka  閱讀(120)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 粗大挺进朋友人妻淑娟| 男女猛烈激情xx00免费视频| 国产免费一区二区不卡| 99久久机热/这里只有精品| 国产无遮挡真人免费视频| 国产精品免费中文字幕| 天美麻花果冻视频大全英文版| 亚洲精品国偷自产在线| 熟女丰满老熟女熟妇| 精品国产伦理国产无遮挡| 免费人妻无码不卡中文字幕18禁| 蜜臀视频一区二区在线播放| 亚洲夂夂婷婷色拍ww47| 亚洲综合一区二区三区不卡 | 久久视频这里只精品| 亚洲欧美成人久久综合中文网| 奇米影视7777久久精品| 人妻精品动漫h无码| 2019亚洲午夜无码天堂| 中文字幕久久人妻熟人妻| 人妻日韩人妻中文字幕| 久久精品国产亚洲av麻豆长发| 精品人妻中文字幕在线| 四虎在线成人免费观看| 日本一区不卡高清更新二区 | 久久人人97超碰爱香蕉| 日韩av毛片福利国产福利| 国产亚洲精品成人aa片新蒲金| 国内自拍第一区二区三区| 亚洲精品www久久久久久| 国产麻豆精品手机在线观看| 五月花成人网| 亚洲国产综合性亚洲综合性| 平和县| 天堂在线最新版av观看| 久久精品国产亚洲av麻豆长发| 开心一区二区三区激情| 亚洲爆乳成av人在线视菜奈实 | 国产一区二区三区无遮挡| 色伦专区97中文字幕| 91老肥熟女九色老女人|