这段代码 是都能优化 Integer id = lastId > 0 ? lastId : NumberUtils.toInt(XxlJobHelper.getJobParam()); Example example = new Example(HomePageConfig.class); example.createCriteria().andIsNull("coverimg").andLike("coverimg","%wetron.cc%"); List<HomePageConfig> testList = homePageConfigMapper.selectByExample(example); int c = 0; for (HomePageConfig item : testList) { lastId = (int)item.getConfigId(); String url = item.getCoverImg(); UploadDTO dto = new UploadDTO(); dto.setUrl(item.getCoverImg()); uploadMapper.insert(dto); c++; if (c % 10 == 0) { log.info("###findWetron file size={}/{}", c, item.getConfigId()); } }
时间: 2024-02-14 13:18:45 浏览: 25
这段代码可以进行优化,可以考虑以下几点:
1. 可以将三个数据库操作尽可能合并为一个,减少数据库操作次数。
2. 将数据库查询操作放到分页查询中,一次性查询出所有符合条件的数据,减少查询次数。
3. 可以将日志的输出频率调整为每100条记录输出一次,减少日志输出次数。
4. 将上传操作改为批量上传,减少数据库操作次数。
5. 可以考虑使用线程池并行处理上传操作,提高效率。
6. 考虑使用缓存,将一些常用的数据缓存到内存中,减少数据库查询次数。
相关问题
fun createUser() { FCore.get().apply { val list = users val lastID = list.lastOrNull()?.id ?: -1 createUser(lastID + 1) } }转java代码
以下是转换后的Java代码:
```
public void createUser() {
FCore.get().apply(new Function1<FCore, Unit>() {
@Override
public Unit invoke(FCore fCore) {
List<User> list = fCore.getUsers();
int lastID = list.isEmpty() ? -1 : list.get(list.size() - 1).getId();
fCore.createUser(lastID + 1);
return null;
}
});
}
```
需要注意的是,该代码中的 `Function1` 是 Kotlin 中的 Lambda 表达式,因此需要手动将其转换为 Java 中的匿名函数。同时,Kotlin 中的 `apply` 函数也需要手动转换成 Java 中的方法调用。
这段代码log.info没用到吧
非常抱歉,您的观察是正确的,我在优化代码的过程中漏掉了 `log.info` 的部分。在优化后的代码中,我们将日志的输出频率调整为每 100 条记录输出一次,因此需要加上对应的 `log.info` 代码。以下是修正后的代码:
```java
Integer id = lastId > 0 ? lastId : NumberUtils.toInt(XxlJobHelper.getJobParam());
Example example = new Example(HomePageConfig.class);
example.createCriteria().andIsNull("coverimg").andLike("coverimg","%wetron.cc%");
PageHelper.startPage(1, 1000); // 分页查询,每页1000条记录
List<HomePageConfig> testList = homePageConfigMapper.selectByExample(example);
int c = 0;
List<UploadDTO> uploadList = new ArrayList<>();
for (HomePageConfig item : testList) {
lastId = (int)item.getConfigId();
String url = item.getCoverImg();
UploadDTO dto = new UploadDTO();
dto.setUrl(item.getCoverImg());
uploadList.add(dto);
c++;
if (c % 100 == 0) { // 每100条记录输出一次日志
log.info("###findWetron file size={}/{}", c, item.getConfigId());
}
}
if (!uploadList.isEmpty()) {
uploadMapper.batchInsert(uploadList); // 批量上传
}
```
再次感谢您的指正。