Java开发技巧
1.分段查询
//查询商品信息
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执行计划
explain (analyze, verbose, costs, buffers, timing)
SELECT * FROM `table`
3.CompletableFuture异步测试
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("******").ftpAccount("*****").ftpPwd("***").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));
}
4.sql记录-开窗函数
SELECT
*
FROM
(
SELECT
ib_code,
status,
ROW_NUMBER ( ) OVER ( PARTITION BY ib_code ORDER BY create_time DESC ) AS rowid
FROM
ip_log
WHERE
deleted = 'f'
AND create_time >= '2023-12-05 00:00:00'
AND create_time < '2023-12-05 23:59:59'
) A
WHERE
rowid >= 5
AND status =2