TaskExecutor
과 함께 FlatFileItemReader
을 사용하는 많은 예제가 있습니다. 나는 (두 XML 및 Java 구성으로) 아래 샘플을 제공 : 나는 데이터베이스에 XML의 큰 CSV를위한 구성 (GB 크기) 쓰기와 함께 내 자신을 사용했다TaskExecutor와 함께 FlatFileItemReader 사용 (스레드 안전성)
즉시 사용 가능한 상자 JpaItemWriter
. save-state = false를 설정하거나 특별한 처리를하지 않아도 아무런 문제가없는 것 같습니다.
이제 FlatFileItemReader
은 thread-safe이 아니므로 으로 기록됩니다.
내 생각 엔 JpaItemWriter
가 엔터티의 비즈니스 키를 커버했다 hashCode()
및 equals()
경우 중복 불가능으로 설정 즉 컬렉션을 지속하여 문제를 "포함하는"것을이었다. 그러나이 방법조차도 스레드가 안전하지 않은 읽기 및 처리로 인해 중복을 방지하기에는 충분하지 않습니다.
TaskExecutor를 지정한 Tasklet 내에 즉시 사용 가능한 FlatFileItemReader
을 사용하는 것이 올바른지/정확하고 안전합니까? 관계없이 작가. 그렇지 않다면, 우리는 어떻게 JPAItemWriter
이 사용될 때 이론적으로 오류의 부족을 설명 할 수 있습니까?
PS : I 상기 수득 예 링크가 모든 가능한 스레드 안전성 문제에 언급없이 TaskExecutor를 가진 FlatFileItemReader
사용 ...
'FlatFileItemReader'가 아닌 경우'JpaItemWriter'가 스레드로부터 안전하다는 것을 묻는 중입니까? – CKing
제 질문이 좀 더 일반적입니다. FlatFileItemReader가 TaskExecutor 및 다른 Writer와 함께 스레드 안전을위한 특별한 처리없이 사용되는 2 개의 링크를 제공합니다. 또한 나는 내 자신의 경험을 제공하고 JpaItemWriter가 어떤 상황에서 문제를 "숨길"수있는 방법에 대한 이론적 설명을하려고했습니다. 즉, 우리가 올바르게 사용하는 방법과 마침내 TaskExecutor를 그대로 사용할 수 있는지에 관한 질문입니다. – kmandalas
'JpaItemReader' 또는'JpaItemWriter'를 의미합니까? –