java - Spring CRUD Repository 在计划任务期间不会更新现有记录
问题描述
我正在尝试postgres
在计划任务期间创建/更新记录,但不知何故,更新仅在此任务的第一次运行期间发生。在随后的运行中,没有任何记录得到更新。奇怪的是,与此同时新的记录仍然被创造出来。如果我清除表并重新启动应用程序,所有记录将在第一个任务运行期间创建,但同样没有现有记录将在后续运行中获得任何更新。我所看到的只是我从外部资源中获取了新数据,这些数据设置为问题的内部字段issue.setFields
,但没有任何内容保存到 db.xml 中。这是代码:
@Component
public class IssuesTask {
@Autowired
private IssuesRepository repository; // Spring CRUD repo
@Transactional
@Scheduled(cron = "0 */30 * * * ?")
public void execute() {
ArrayList<Issue> updateList = buildUpdateList();
repository.saveAll(updateList);
}
private ArrayList<Issue> buildUpdateList() {
ArrayList<Issue> updateList = new ArrayList<>();
// get data to update current issues
ArrayList<Map<String, String>> externalIssues = getExternalIssuesData();
for (int i = 0; i < externalIssues.size(); ++i) {
Map<String, String> fields = externalIssues.get(i);
Integer issueId = fields.get("id");
Issue issue = findOrBuildIssue(issueId);
issue.setFields(fields);
updateList.add(issue);
}
return updateList;
}
private Issue findOrBuildIssue(Integer id) {
Optional<Issue> optionalIssue = repository.findById(issueId);
Issue issue = optionalIssue.orElseGet(Issue::new);
return issue;
}
}
所有其他代码都非常标准 - 我有 entity Issue
。为了管理里面的记录,postgres
我创建了 CRUD 存储库。应用程序类如下所示:
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
我对 Spring 还很陌生,并且已经为这个问题苦苦挣扎了一段时间。我认为这可能与会话/缓存未清除有关,但我不明白如何使用 CRUD 存储库来做到这一点。将不胜感激任何帮助,谢谢。
解决方案
推荐阅读
- android - 如何让searchview填满剩余空间?
- android - 房间数据库多对多关系从一对表中得到一个响应
- xcode - 为什么包含相同的静态库时符号不冲突?
- java - 切换数组的两个部分的位置
- security - 虚拟服务器的服务器配置
- java - 从键盘读取数据时出现异常
- javascript - 使用 getElementById 更改字体颜色
- android - React Native - 运行 Android - 找不到 common.jar (android.arch.core:common:1.0.0)
- azure - 为什么 B2C 是奇怪的鸭子并且在单独的 Azure 目录/租户中?
- android - 通过通知启动应用程序后通知停止工作