有很多示例使用FlatFileItemReader
以及TaskExecutor
。我提供样品下方(包括XML和Java的配置):使用FlatFileItemReader和TaskExecutor(线程安全)
我已经与大的CSV写作与XML配置(GB大小),数据库用它我的自我开箱即用的JpaItemWriter
。即使没有设置save-state = false或进行任何特殊处理,似乎也没有问题。
现在,FlatFileItemReader
记录为为非线程安全的。
我的猜测是JpaItemWriter
通过持续集合来“覆盖”问题,即如果hashCode()
和equals()
覆盖了实体的业务密钥,则集合没有重复。但是,即使如此,仅仅通过非线程安全的读取和处理来防止重复是不够的。
请您澄清一下:在已分配TaskExecutor的Tasklet中使用开箱即用的FlatFileItemReader
是否正确/正确/安全?无论作家如何。如果不是,我们如何在理论上解释当使用JPAItemWriter
时没有错误?
PS:这个例子链接,我上面给,使用FlatFileItemReader
用的TaskExecutor没有在所有可能的线程安全问题提...
我可能是错的,但你问''FlatFileItemReader'不是'JpaItemWriter'是线程安全的吗? – CKing
我的问题更一般。我提供了2个链接,其中一个FlatFileItemReader与TaskExecutor和不同的Writer一起使用,没有任何特殊的线程安全处理。此外,我提供了自己的经验,并试图给出理论上的解释,说明JpaItemWriter在某些情况下如何“隐藏”问题。所以换句话说,我的问题是:我们应该如何正确使用它,如果最终能够按照原样使用TaskExecutor。 – kmandalas
你的意思是'JpaItemReader'或'JpaItemWriter'? –