识别数据库中的一组条目

时间:2015-10-12 15:06:33

标签: spring postgresql jpa spring-batch

我正在使用Spring Batch从数据库中读取条目并相应地处理它们。到目前为止,我编写条目,将所有主键存储在列表中,并将此列表设置为Job的参数之一。这适用于小批量,但如果有100个条目,则列表变大以存储为参数。所以我打算存储一些排序或唯一字段,这些字段对于属于同一作业的所有条目都是通用的,并且只将此密钥作为参数传递,我以前考虑使用作业执行ID,但这是在作业启动后生成的当读者初始化时,它可能为时已晚。所以我有以下几种选择:

  1. 使用日期/时间,提交作业的人的用户名等字段生成哈希值。问题:有没有好的算法可以做到这一点?
  2. 生成可递增的ID。 问题:最好的方法是什么? 问题:在这种情况下可以使用PostgreSQl序列吗? (注意:多个条目将具有相同的密钥,因此我认为不能使用@GeneratedValue注释完成,如果我错了请纠正我)
  3. 你有更好的想法吗?
  4. 我认为如果你解释为什么你可能更喜欢一种解决方案而不是另一种解决方案也是有益的。

1 个答案:

答案 0 :(得分:0)

我通过在我的数据库中添加一个序列解决了这个问题,在我的配置中添加了以下bean:

<bean id="batchSequence" class="org.springframework.jdbc.support.incrementer.PostgreSQLSequenceMaxValueIncrementer">
    <property name="dataSource" ref="dataSource" />
    <property name="incrementerName" value="batch_id" />
</bean>

在必要时自动装配上面的bean,然后使用nextLongValue()方法生成序列的增量并获取新的数字。