Salesforce fetchSize = 100으로 설정했지만 쿼리에 대해 100 세트의 요소를 가져 오지 않습니다. 따라서 ConsumerIterator의 단일 결과를 목록으로 수집하여 배치 프로세스에 100 개 세트로 전달할 수 있기를 원합니다. 아래 코드가 있습니다. 이것을 올바른 방법일까요? 올바르게 수행하는 방법에 대한 제안은 감사하겠습니다. 50 개의 배치로 모든 ConsumerIterator 요소를 처리하고 싶습니다. 배치가 50보다 작 으면 해당 배치를 처리하고 싶습니다. 내 시도가 아래스레드 안전 모드에서 컬렉션을 반복하면서 목록에서 요소 수집
ConsumerIterator<HashMap<String,Object>> iter=
(ConsumerIterator<HashMap<String,Object>>)obj;
List<HashMap<String,Object>> l=new CopyOnWriteArrayList<>();
while(iter.hasNext()){
Object payload=iter.next();
if(l.size()<50){
l.add((HashMap<String,Object>)payload);
}else{
write(l);
}
public int [] write(List<HashMap<String,Object> list)
{
synchronized(list)
{
ArrayList newList=copy(list);
save(newList);
}
+
게시 된 코드에서'l'은 다른 스레드에서 볼 수 없으므로'CopyOnWriteArrayList'를 사용하거나'synchronized (list)'를 사용하는 것이 정말로 필요하지 않습니다. 반대로, 코드 스 니펫에서는 'obj'또는 기본 데이터 소스가 스레드간에 공유되는지 여부를 확인할 수 없으므로 반복 방식이 올바른지 여부를 말할 수 없습니다. 그 외에도, 알려진 유형의 항목을'Object'에 할당하고 피할 수없는 체크되지 않은 캐스트를 지정하여 제네릭 유형, 원시 유형 및 유형 정보의 불필요한 삭제를 혼합합니다. 해당 코드를 정리해야합니다 ... – Holger