我目前正在开发一个示例应用程序。我在此应用程序中将用户数据存储在 monogoDB 数据库中。
这是我的User实体:
public class User extends BaseEntity {
@Id
private String id;
@NotBlank
private String name;
....
// getter & setters
}
我目前正在读取 CSV 文件来更新我的用户表。因为我可以有多个记录,所以我创建批次并在线程上处理它们。这是我的代码示例:
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserProcessingRunnable runnable;
List<String> allUsers = readUserCsvFile();
//NOTE: I've already confirmed that I'm getting expected results in allUsers.
List<List<String>> batches = ListUtils.partition(allUsers, Constants.BATCH_SIZE);
// NOTE: For testing purposes, the batch size is set to 10. Additionally, validated batches are being created as expected.
for (List<String> batch : batches) {
// NOTE: I am processing each batch on different thread.
runnable.setBatch(batch)
// Call executor provider (this class implements from ServletContextListener)
GenericExecutorProvider.getInstance().submit(runnable);
}
}
这是我对
Runnable
接口的实现:
@Component
public class UserProcessingRunnable implements Runnable {
private List<String> entities;
UserRepository userRepository;
@Override
public void run() {
for(String name : entities) {
User user = new User(name)
userRepository.save(user)
}
}
现在我面临的问题是我看到批次没有按预期进行处理。
例。假设有 5 个批次,分别命名为 b1、b2、b3、b4、b5,每个批次有 10 个用户的数据。
执行后,查看DB时,发现batch b1,b3没有执行。但是批次 b2、b4 执行了两次,批次 b5 执行了一次(即总共 5 次)。
我已经确认批次的形成是正确的,但我继续经历这种不合理的行为。
执行过程中未发现异常或错误。那么有什么解决办法吗?