问题描述
我正在处理一个问题,其中我从文件夹中提取文件名列表并将其存储到数据库表中,此过程将每小时运行一次,因此如果有重复的文件名被读取,我将需要什么从文件夹中然后我不需要表中的任何重复记录,它只会更新旧记录,但是如果有任何新记录,它将插入记录。 我正在使用Spring Data Jpa,我知道可以通过使用saveAll方法自动完成它,但是我需要的是,如果文件重复,它将更新表中的另一列“说明”,该记录说明此记录已更新,但是当它正在插入一条新记录,并说一条新记录。
我想知道在不使用任何循环的情况下最有效的方法是什么。
解决方法
很容易就有一个异步作业,并且此异步作业存在于1个或多个应用程序实例的上下文中。您需要照顾几个问题:
-
正在读取文件的作业仅需要在应用程序的一侧运行。为此,您应该使用@Schedlock google它。
-
读取文件名后,需要针对数据库验证它们。此过程存在几种变体:
A)测试每个文件将导致每个文件1次选择查询,这可能是不希望的。
B)您可以从数据库中选择所有现有文件,然后您的工作就是将传入文件分为两组-存在的文件和不存在的文件。另一个选择是选择所有现有文件。
C)如果文件数量太大,以至于您无法立即有效地读取它。您可以创建第二个表“传入文件”,然后将所有传入文件保留在那里,然后使用“ SAVED_FILES”执行JOIN,以找出已经保存的文件。