<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 異常編寫小技巧

          共 2219字,需瀏覽 5分鐘

           ·

          2021-11-15 13:42

          點(diǎn)擊上方“猿芯”,選擇“設(shè)為星標(biāo)

          后臺(tái)回復(fù)"1024",有份驚喜送給面試的你

          1 多個(gè)異常塊 catch 寫法

          參考 Nacosnacos-config 子項(xiàng)的 BaseDatabaseOperate 類。

          default?Boolean?update(TransactionTemplate?transactionTemplate,?JdbcTemplate?jdbcTemplate,List?contexts,?BiConsumer?consumer)

          try?{???
          ????return?Boolean.TRUE;
          }?catch?(BadSqlGrammarException?|?DataIntegrityViolationException?e)?{
          ????FATAL_LOG.error("[db-error]?sql?:?{},?args?:?{},?error?:?{}",?errSql[0],?args[0],?e.toString());
          ????return?Boolean.FALSE;
          }

          當(dāng)我們有多個(gè)異常需要相同異常處理時(shí),可以采用 catch(XxxException | XxxExcetion) 方式處理,代碼看起來也非常簡(jiǎn)潔和優(yōu)雅。

          2 資源關(guān)閉 try-with-resource

          Jdk 1.7之后有了 try-with-resource 處理機(jī)制。

          本地代碼參考 Nacos 批量上傳配置文件接口,關(guān)閉資源寫法

          ??try?(DiskUtils.LineIterator?iterator?=?DiskUtils.lineIterator(file))?{
          ????int?batchSize?=?1000;
          ????List?batchUpdate?=?new?ArrayList<>(batchSize);
          ????List>?futures?=?new?ArrayList<>();
          ????List?results?=?new?CopyOnWriteArrayList<>();
          ????while?(iterator.hasNext())?{
          ????????String?sql?=?iterator.next();
          ????????if?(StringUtils.isNotBlank(sql))?{
          ????????????batchUpdate.add(sql);
          ????????}
          ????????if?(batchUpdate.size()?==?batchSize?||?!iterator.hasNext())?{
          ????????????List?sqls?=?batchUpdate.stream().map(s?->?{
          ????????????????ModifyRequest?request?=?new?ModifyRequest();
          ????????????????request.setSql(s);
          ????????????????return?request;
          ????????????}).collect(Collectors.toList());
          ????????????futures.add(CompletableFuture.runAsync(()?->?results.add(doDataImport(jdbcTemplate,?sqls))));
          ????????????batchUpdate.clear();
          ????????}
          ????}
          ????CompletableFuture.allOf(futures.toArray(new?CompletableFuture[0])).join();
          ????return?RestResult.builder()
          ????????????.withCode(BooleanUtils.and(results.toArray(new?Boolean[0]))???200?:?500).withData("").build();
          }?catch?(Throwable?ex)?{
          ????LogUtil.DEFAULT_LOG.error("An?exception?occurred?when?external?data?was?imported?into?Derby?:?{}",?ex);
          ????return?RestResultUtils.failed(ex.getMessage());
          }

          示例代碼 try (DiskUtils.LineIterator iterator = DiskUtils.lineIterator(file)) 包含文件流讀取,所以符合 try-with-resource,不需要開發(fā)者手動(dòng)關(guān)閉文件流資源。


          推薦閱讀:

          Redis為什么變慢,一文講透如何排查Redis性能問題

          7張圖揭曉RocketMQ存儲(chǔ)設(shè)計(jì)的精髓

          騰訊二面:Redis 事務(wù)支持 ACID 么?

          聊聊分布式鎖——Redis和Redisson的方式

          關(guān)號(hào)互聯(lián)網(wǎng)全棧架構(gòu),價(jià)。

          瀏覽 48
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狗爷城中村嫖妓 | 黄色精品视频 | 操逼视频色版 | 天天舔日日操 | 精品熟妇视频一区二区三区 |