Java开发技巧

Java开发技巧

1.分段查询

java 复制代码
//查询商品信息
List<SkuRes> allskuResList = new ArrayList<>();
	Lists.partition(customsGoodsIdList, 1000).forEach(o -> {
     Map<String, Object> itemParams = new HashMap<>();
     itemParams.put("qp-id-in", StringUtils.join(o, ","));
     List<SkuRes> skuResList = skuAdapterService.listNoPage(itemParams);
     if (CollectionUtils.isNotEmpty(skuResList)) {
         allskuResList.addAll(skuResList);
     }
 });
List<SkuRes> skuResList = allskuResList.stream().distinct().collect(Collectors.toList());

2.explain sql执行计划

sql 复制代码
explain (analyze, verbose, costs, buffers, timing)
SELECT * FROM `table`

3.CompletableFuture异步测试

java 复制代码
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        long milliseconds = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        ExecutorService customExecutor = Executors.newFixedThreadPool(10);
        log.info("异步开始时间: " + now);
        List<CompletableFuture<String>> completableFutures = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
                FtpInfoEntity ftpInfoEntity = FtpInfoEntity.builder().ftpHost("121.32.135.90").ftpAccount("yunpan").ftpPwd("tongDan359-4yTkeM").ftpPort(20201).build();
                FtpUtils.connectCheck(ftpInfoEntity.getFtpHost(), ftpInfoEntity.getFtpPort(), ftpInfoEntity.getFtpAccount(), ftpInfoEntity.getFtpPwd());
                return Thread.currentThread().getName() + " 连接成功";

            }, customExecutor).exceptionally(ex -> {
                // 处理异常
                log.info("连接异常: " + ex.getMessage());
                return Thread.currentThread().getName() + " 连接异常";
            });
            completableFutures.add(future);

        }
        // 等待异步方法执行完成
        Supplier<Stream<CompletableFuture<String>>> streamCopier = () -> Optional.ofNullable(completableFutures)
                .map(Collection::stream)
                .orElse(Stream.empty())
                .filter(Objects::nonNull);

        CompletableFuture<List<String>> result = CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture<?>[0]))
                .thenApply(v -> streamCopier.get()
                        .map(CompletableFuture::join)
                        .collect(toList())
                );

        streamCopier.get().forEach(f -> f.whenComplete((t, ex) -> {
            if (ex != null) {
                log.error("CompletableFuture exception", ex);
                result.completeExceptionally(ex);
            }
        }));

        LocalDateTime now1 = LocalDateTime.now();
        long milliseconds1 = now1.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        log.info("异步截至时间: " + now1 + "运行时间: " + (milliseconds1 - milliseconds));
    }
相关推荐
筑梦之路1 分钟前
Jenkins 构建部署多模块Java应用流水线参考——筑梦之路
java·运维·jenkins
秋风不问归客2 分钟前
linux 网络相关命令 及常用场景
linux·服务器·网络
dagouaofei2 分钟前
实测!6款AI自动生成PPT工具体验分享
人工智能·python·powerpoint
Font Tian2 分钟前
Pandas 3.0 全解:从默认字符串类型到 Copy-on-Write 的一场“内存模型重构”
python·重构·数据分析·pandas
shayudiandian5 分钟前
【Java】常用类
java
轻竹办公PPT5 分钟前
写 2026 年工作计划,用 AI 生成 PPT 哪种方式更高效
人工智能·python·powerpoint
雨中飘荡的记忆8 分钟前
MyBatis类型处理模块详解
java·mybatis
金牌归来发现妻女流落街头8 分钟前
【线程池 + Socket 服务器】
java·运维·服务器·多线程
牛奶咖啡138 分钟前
Linux文件快照备份工具rsnapshot的实践教程
linux·服务器·文件备份·文件快照备份·rsnapshot·定时备份本地或远程文件·查看指定命令的完整路径
wanghowie8 分钟前
01.03 Spring核心|事务管理实战
java·后端·spring