From e8d2424af56494e1c298efdddce978e5eb1f4f9c Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Wed, 15 Apr 2026 11:31:54 +0300 Subject: [PATCH] add new module csv-importer --- clearing-parent/csv-importer/pom.xml | 116 ++++++++++++++++++ .../csv/importer/CsvImporterApplication.java | 18 +++ .../csv/importer/config/AppConfig.java | 47 +++++++ .../config/settings/CsvImporterSettings.java | 41 +++++++ .../src/main/resources/application.properties | 19 +++ .../src/main/resources/application.properties | 2 +- clearing-parent/pom.xml | 1 + pom.xml | 1 + z-distr/pom.xml | 23 ++++ .../main/resources/distr/sh/csv-importer.sh | 9 ++ .../src/main/resources/distr/sh/kill_all.sh | 3 +- .../src/main/resources/distr/sh/launch_all.sh | 1 + 12 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 clearing-parent/csv-importer/pom.xml create mode 100644 clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/CsvImporterApplication.java create mode 100644 clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/AppConfig.java create mode 100644 clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/settings/CsvImporterSettings.java create mode 100644 clearing-parent/csv-importer/src/main/resources/application.properties create mode 100644 z-distr/src/main/resources/distr/sh/csv-importer.sh diff --git a/clearing-parent/csv-importer/pom.xml b/clearing-parent/csv-importer/pom.xml new file mode 100644 index 000000000..61067a70b --- /dev/null +++ b/clearing-parent/csv-importer/pom.xml @@ -0,0 +1,116 @@ + + + 4.0.0 + + ru.spcex.clearing + clearing-parent + SPCEX-3.23.295 + + + csv-importer + + + 17 + 17 + UTF-8 + + + + + ru.spcex.platform + platform-messaging + + + ru.spcex.platform + platform-imdg-api-hazelcast-impl + + + ru.spcex.clearing + security-util + + + ru.spcex.clearing + classes + + + ru.spcex.platform + platform-enum + + + ru.spcex.clearing + clearing-validation + + + org.springframework.boot + spring-boot-starter + + + com.fasterxml.jackson.core + jackson-databind + + + + net.logstash.logback + logstash-logback-encoder + 7.0.1 + + + org.springframework.boot + spring-boot-starter-test + test + + + ru.spcex.clearing + test-clearing + test + + + + + + + src/main/resources + + application.properties + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.21.0 + + + org.junit.platform + junit-platform-surefire-provider + 1.2.0-M1 + + + org.junit.jupiter + junit-jupiter-engine + 5.2.0-M1 + + + + + + + \ No newline at end of file diff --git a/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/CsvImporterApplication.java b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/CsvImporterApplication.java new file mode 100644 index 000000000..01bff0733 --- /dev/null +++ b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/CsvImporterApplication.java @@ -0,0 +1,18 @@ +package ru.spcex.clearing.csv.importer; + +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; + +@SpringBootApplication +public class CsvImporterApplication { + public static void main(String[] args) { + try { + SpringApplicationBuilder builder = new SpringApplicationBuilder(CsvImporterApplication.class); + builder.run(args); + } catch (Exception e) { + LoggerFactory.getLogger(CsvImporterApplication.class).error("csv-importer start failed: {} -> {}", e.getClass().getSimpleName(), e.getMessage()); + System.exit(-1); + } + } +} diff --git a/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/AppConfig.java b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/AppConfig.java new file mode 100644 index 000000000..1e8722633 --- /dev/null +++ b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/AppConfig.java @@ -0,0 +1,47 @@ +package ru.spcex.clearing.csv.importer.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import ru.spcex.clearing.csv.importer.config.settings.CsvImporterSettings; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; + +@Configuration +public class AppConfig { + + private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) { + ThreadPoolTaskExecutor pool = new ThreadPoolTaskExecutor(); + if (maxPoolSz > 2) { + pool.setKeepAliveSeconds(60); + pool.setAllowCoreThreadTimeOut(true); + } + pool.setCorePoolSize(maxPoolSz); + pool.setWaitForTasksToCompleteOnShutdown(waitForCompletion); + return pool; + } + + @Bean(name = "taskExecutorHazelcastClientInitializer") + public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() { + return createThreadPoolTaskExecutor(1, true); + } + + @Bean(name = "taskExecutorIdGeneratorAwaiter") + public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() { + return createThreadPoolTaskExecutor(1, false); + } + + @Autowired + @Bean + public ImdgProvider imdgProvider( + @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, + @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, + CsvImporterSettings settings + ) { + return new HazelcastService(taskExecutorHazelcastClientInitializer, + taskExecutorIdGeneratorAwaiter, + settings.getHazelcast()); + } +} diff --git a/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/settings/CsvImporterSettings.java b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/settings/CsvImporterSettings.java new file mode 100644 index 000000000..d36f1ce8a --- /dev/null +++ b/clearing-parent/csv-importer/src/main/java/ru/spcex/clearing/csv/importer/config/settings/CsvImporterSettings.java @@ -0,0 +1,41 @@ +package ru.spcex.clearing.csv.importer.config.settings; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; +import ru.spcex.clearing.platform.messaging.config.element.KafkaConsumerSettings; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; + +@Component +@PropertySource("file:${spring.config.location}/application.properties") +@ConfigurationProperties("csv-importer") +public class CsvImporterSettings { + private HazelcastClientParams hazelcast; + private KafkaConsumerSettings kafkaConsumer; + private KafkaProducerSettings kafkaProducer; + + public HazelcastClientParams getHazelcast() { + return hazelcast; + } + + public void setHazelcast(HazelcastClientParams hazelcast) { + this.hazelcast = hazelcast; + } + + public KafkaConsumerSettings getKafkaConsumer() { + return kafkaConsumer; + } + + public void setKafkaConsumer(KafkaConsumerSettings kafkaConsumer) { + this.kafkaConsumer = kafkaConsumer; + } + + public KafkaProducerSettings getKafkaProducer() { + return kafkaProducer; + } + + public void setKafkaProducer(KafkaProducerSettings kafkaProducer) { + this.kafkaProducer = kafkaProducer; + } +} diff --git a/clearing-parent/csv-importer/src/main/resources/application.properties b/clearing-parent/csv-importer/src/main/resources/application.properties new file mode 100644 index 000000000..0e658e601 --- /dev/null +++ b/clearing-parent/csv-importer/src/main/resources/application.properties @@ -0,0 +1,19 @@ +spring.main.web-application-type=none +csv-importer.hazelcast.cluster-members=127.0.0.1:5701 +csv-importer.hazelcast.login=dev +csv-importer.hazelcast.password=dev-pass + +csv-importer.kafka-consumer.bootstrap-servers=localhost:9092 +csv-importer.kafka-consumer.group-id=dev-group-csv-importer +csv-importer.kafka-consumer.enable-auto-commit=true +csv-importer.kafka-consumer.session-timeout-ms=30000 +csv-importer.kafka-consumer.auto-offset-reset=latest +csv-importer.kafka-consumer.linger-ms=1 +csv-importer.kafka-consumer.buffer-memory=33554432 + +csv-importer.kafka-producer.bootstrap-servers=localhost:9092 +csv-importer.kafka-producer.acks=all +csv-importer.kafka-producer.retries=0 +csv-importer.kafka-producer.batch-size=16384 +csv-importer.kafka-producer.linger-ms=1 +csv-importer.kafka-producer.buffer-memory=33554432 \ No newline at end of file diff --git a/clearing-parent/default-management/src/main/resources/application.properties b/clearing-parent/default-management/src/main/resources/application.properties index c5e939da0..e306c571e 100644 --- a/clearing-parent/default-management/src/main/resources/application.properties +++ b/clearing-parent/default-management/src/main/resources/application.properties @@ -4,7 +4,7 @@ default-management.hazelcast.login=dev default-management.hazelcast.password=dev-pass default-management.kafka-consumer.bootstrap-servers=localhost:9092 -default-management.kafka-consumer.group-id=dev-group-company-service +default-management.kafka-consumer.group-id=dev-group-default-management default-management.kafka-consumer.enable-auto-commit=true default-management.kafka-consumer.session-timeout-ms=30000 default-management.kafka-consumer.auto-offset-reset=latest diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml index 01494a87a..fe8c3d3da 100644 --- a/clearing-parent/pom.xml +++ b/clearing-parent/pom.xml @@ -47,6 +47,7 @@ xml-importer xml-exporter default-management + csv-importer diff --git a/pom.xml b/pom.xml index eec66af06..47fae713d 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,7 @@ ${folder_root_clearing}/clearing-parent/xml-exporter ${folder_root_clearing}/clearing-parent/xml-importer ${folder_root_clearing}/clearing-parent/default-management + ${folder_root_clearing}/clearing-parent/csv-importer 3.12.4 1.7.33 diff --git a/z-distr/pom.xml b/z-distr/pom.xml index 5d7740dad..694bfc4c9 100644 --- a/z-distr/pom.xml +++ b/z-distr/pom.xml @@ -664,6 +664,29 @@ + + copy-csv-importer-bin + prepare-package + + copy + + + + + ${folder_root_csv-importer}/target/csv-importer.jar + ${folder.clearing.distr.bin}/csv-importer.jar + + + ${folder_root_csv-importer}/target/csv-importer.jar + ${folder.clearing.distr.services}/csv-importer/csv-importer.jar + + + ${folder_root_csv-importer}/src/main/resources/application.properties + ${folder.clearing.distr.settings}/csv-importer/application.properties + + + + diff --git a/z-distr/src/main/resources/distr/sh/csv-importer.sh b/z-distr/src/main/resources/distr/sh/csv-importer.sh new file mode 100644 index 000000000..2a78edf16 --- /dev/null +++ b/z-distr/src/main/resources/distr/sh/csv-importer.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +CLEARING_HOME=/opt/mfd/clearing/ +cd $CLEARING_HOME/bin + +CMD="java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6033 -jar csv-importer.jar --spring.config.location=$CLEARING_HOME/settings/csv-importer/" + +$CMD >/dev/null 2>&1 & + diff --git a/z-distr/src/main/resources/distr/sh/kill_all.sh b/z-distr/src/main/resources/distr/sh/kill_all.sh index e8137e457..b841bd5f0 100644 --- a/z-distr/src/main/resources/distr/sh/kill_all.sh +++ b/z-distr/src/main/resources/distr/sh/kill_all.sh @@ -23,4 +23,5 @@ kill -9 $(ps -ef | grep java | grep gateway-api.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep xml-exporter.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep xml-importer.jar | awk '{print $2}') kill -9 $(ps -ef | grep java | grep fix-service.jar | awk '{print $2}') -kill -9 $(ps -ef | grep java | grep default-management.jar | awk '{print $2}') \ No newline at end of file +kill -9 $(ps -ef | grep java | grep default-management.jar | awk '{print $2}') +kill -9 $(ps -ef | grep java | grep csv-importer.jar | awk '{print $2}') \ No newline at end of file diff --git a/z-distr/src/main/resources/distr/sh/launch_all.sh b/z-distr/src/main/resources/distr/sh/launch_all.sh index 89152ed3d..5ca60640d 100644 --- a/z-distr/src/main/resources/distr/sh/launch_all.sh +++ b/z-distr/src/main/resources/distr/sh/launch_all.sh @@ -24,3 +24,4 @@ cd /opt/mfd/clearing/bin /opt/mfd/clearing/bin/xml-importer.sh /opt/mfd/clearing/bin/fix-service.sh /opt/mfd/clearing/bin/default-management.sh +/opt/mfd/clearing/bin/csv-importer.sh