add batch size as parameter

This commit is contained in:
etreschenkov 2025-11-13 13:37:24 +03:00
parent 945694e50d
commit 8ce1948b07
5 changed files with 22 additions and 7 deletions

View file

@ -70,3 +70,8 @@ ct.update-flags-interval=${UPDATE_FLAGS_INTERVAL:1}
ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30} ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30}
ct.encoding=windows-1251 ct.encoding=windows-1251
#Batch size and global pipeline timeout
ct.batchSize=1000
#in minute
ct.timeout=30

View file

@ -33,4 +33,7 @@ public class CreditTrackerSettings {
private Long daysToUpdateFlags; private Long daysToUpdateFlags;
private String encoding; private String encoding;
private Integer batchSize;
private Integer timeout;
} }

View file

@ -20,8 +20,8 @@ import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
@Configuration @Configuration
public class PipelineStarterConfig { public class PipelineStarterConfig {
@Bean @Bean
public BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory(StaxXmlProcessor xml) { public BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory(StaxXmlProcessor xml, CreditTrackerSettings creditTrackerSettings) {
return (packageId, packageName) -> new KickPipeLineImpl(xml, packageId, packageName); return (packageId, packageName) -> new KickPipeLineImpl(xml, packageId, packageName, creditTrackerSettings);
} }
@Bean @Bean

View file

@ -9,6 +9,7 @@ import java.util.function.Supplier;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.config.task.StageQueueFactory; import ru.nbch.credit_tracker.config.task.StageQueueFactory;
import ru.nbch.credit_tracker.model.impl.PartFilePayload; import ru.nbch.credit_tracker.model.impl.PartFilePayload;
import ru.nbch.credit_tracker.model.impl.SignalXmlFilePayload; import ru.nbch.credit_tracker.model.impl.SignalXmlFilePayload;
@ -34,6 +35,7 @@ public class PipelinePackageManager {
private final FidIdEnricher fidIdEnricherHandler; private final FidIdEnricher fidIdEnricherHandler;
private final Supplier<IPipeLineTerminator<PartFilePayload, SignalXmlFilePayload>> pipelineTerminatorFactory; private final Supplier<IPipeLineTerminator<PartFilePayload, SignalXmlFilePayload>> pipelineTerminatorFactory;
private final BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory; private final BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory;
private final CreditTrackerSettings creditTrackerSettings;
private final ExecutorService executorService = Executors.newFixedThreadPool(10, r -> { private final ExecutorService executorService = Executors.newFixedThreadPool(10, r -> {
Thread t = new Thread(r); Thread t = new Thread(r);
t.setName("pipe-starter-%d".formatted(t.threadId())); t.setName("pipe-starter-%d".formatted(t.threadId()));
@ -49,7 +51,8 @@ public class PipelinePackageManager {
SaveSubjectHandler saveSubjectHandler, FidIdEnricher fidIdEnricherHandler, SaveSubjectHandler saveSubjectHandler, FidIdEnricher fidIdEnricherHandler,
Supplier<IPipeLineTerminator<PartFilePayload, SignalXmlFilePayload>> pipelineTerminatorFactory, Supplier<IPipeLineTerminator<PartFilePayload, SignalXmlFilePayload>> pipelineTerminatorFactory,
BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory, BiFunction<Long, String, IPipeLineStarter<SubjectPayload>> pipelineStarterFactory,
FlagsEnricherV2 flagsEnricherV2) { FlagsEnricherV2 flagsEnricherV2,
CreditTrackerSettings creditTrackerSettings) {
this.signalRestService = signalRestService; this.signalRestService = signalRestService;
this.saveSubjectQueueFactory = saveSubjectQueueFactory; this.saveSubjectQueueFactory = saveSubjectQueueFactory;
this.idEnricherQueueFactory = idEnricherQueueFactory; this.idEnricherQueueFactory = idEnricherQueueFactory;
@ -59,6 +62,7 @@ public class PipelinePackageManager {
this.pipelineTerminatorFactory = pipelineTerminatorFactory; this.pipelineTerminatorFactory = pipelineTerminatorFactory;
this.pipelineStarterFactory = pipelineStarterFactory; this.pipelineStarterFactory = pipelineStarterFactory;
this.flagsEnricherV2 = flagsEnricherV2; this.flagsEnricherV2 = flagsEnricherV2;
this.creditTrackerSettings = creditTrackerSettings;
this.semaphore = new Semaphore(MAX_PARALLEL_REQUESTS); this.semaphore = new Semaphore(MAX_PARALLEL_REQUESTS);
} }
@ -86,7 +90,7 @@ public class PipelinePackageManager {
pipeline.getTerminator() pipeline.getTerminator()
.doneFuture() .doneFuture()
.orTimeout(5, TimeUnit.MINUTES) .orTimeout(creditTrackerSettings.getTimeout(), TimeUnit.MINUTES)
.whenComplete((v, e) -> { .whenComplete((v, e) -> {
try { try {
if (e != null) { if (e != null) {

View file

@ -10,6 +10,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest; import ru.nbch.credit_tracker.entities.user_request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.model.SubjectProfile; import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.model.impl.SubjectPayload; import ru.nbch.credit_tracker.model.impl.SubjectPayload;
@ -23,13 +24,15 @@ public class KickPipeLineImpl implements IPipeLineStarter<SubjectPayload> {
private final String pkgPath; private final String pkgPath;
private final StaxXmlProcessor xmlProcessor; private final StaxXmlProcessor xmlProcessor;
private final static int BATCH_SIZE = 10_000; private final int BATCH_SIZE;
public KickPipeLineImpl(StaxXmlProcessor xmlProcessor, Long packageId, String pkgPath) { public KickPipeLineImpl(StaxXmlProcessor xmlProcessor, Long packageId, String pkgPath,
CreditTrackerSettings creditTrackerSettings) {
this.packageId = packageId; this.packageId = packageId;
this.pkgPath = pkgPath; this.pkgPath = pkgPath;
this.xmlProcessor = xmlProcessor; this.xmlProcessor = xmlProcessor;
this.BATCH_SIZE = creditTrackerSettings.getBatchSize();
} }
@Override @Override