From bf3ba4e6aa23ab01c52f36f3b138dceccd493821 Mon Sep 17 00:00:00 2001 From: akurakin Date: Wed, 27 Sep 2023 18:37:42 +0300 Subject: [PATCH] =?UTF-8?q?issues/31=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=20=D1=82=D0=B5=D1=81=D1=82=D0=BE=D0=B2=D1=8B=D1=85?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=20=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D1=8B=D0=B9=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20(?= =?UTF-8?q?=D1=82.=D0=BA.=20=D0=BE=D0=BF=D0=B0=D1=81=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../imdg/config/element/ImdgSettings.java | 9 - .../AbstractHazelcastLifecycleSupport.java | 72 ------ .../src/main/resources/application.properties | 6 +- clearing-parent/pom.xml | 1 + clearing-parent/test-api-clearing/pom.xml | 135 +++++++++++ .../ru/spcex/clearing/test/ImdgService.java | 99 ++++++++ .../ru/spcex/clearing/test/KafkaService.java | 18 ++ .../test/TestApiClearingApplication.java | 27 +++ .../test/config/DirectImdgConfig.java | 66 ++++++ .../clearing/test/config/KafkaConfig.java | 65 +++++ .../clearing/test/config/SwaggerConfig.java | 39 +++ .../spcex/clearing/test/config/WebConfig.java | 106 +++++++++ .../config/settings}/ControllerSettings.java | 50 ++-- .../config/settings/TestServiceSettings.java | 51 ++++ .../clearing/test/controller/Controller.java | 139 +++++++++++ .../test}/controller/ImdgController.java | 223 +++++++++--------- .../kafka}/AnyKafkaMessageAction.java | 9 +- .../controller/kafka}/KafkaApiController.java | 24 +- .../src/main/resources/application.properties | 31 +++ .../src/main/resources/logback.xml | 38 +++ 20 files changed, 978 insertions(+), 230 deletions(-) create mode 100644 clearing-parent/test-api-clearing/pom.xml create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/ImdgService.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/KafkaService.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/TestApiClearingApplication.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/DirectImdgConfig.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaConfig.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/SwaggerConfig.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/WebConfig.java rename clearing-parent/{imdg/src/main/java/ru/spcex/clearing/imdg/config/element => test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings}/ControllerSettings.java (85%) create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/TestServiceSettings.java create mode 100644 clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/Controller.java rename clearing-parent/{imdg/src/main/java/ru/spcex/clearing/imdg/services => test-api-clearing/src/main/java/ru/spcex/clearing/test}/controller/ImdgController.java (86%) rename clearing-parent/{backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test => test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/kafka}/AnyKafkaMessageAction.java (86%) rename clearing-parent/{backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test => test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/kafka}/KafkaApiController.java (85%) create mode 100644 clearing-parent/test-api-clearing/src/main/resources/application.properties create mode 100644 clearing-parent/test-api-clearing/src/main/resources/logback.xml diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java index 6055c25f3..95eae7658 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java @@ -10,7 +10,6 @@ import org.springframework.stereotype.Component; public class ImdgSettings { private HazelcastServerSettings hazelcast; private DatabaseSettings database; - private ControllerSettings debugServer; public HazelcastServerSettings getHazelcast() { return hazelcast; @@ -27,12 +26,4 @@ public class ImdgSettings { public void setDatabase(DatabaseSettings database) { this.database = database; } - - public ControllerSettings getDebugServer() { - return debugServer; - } - - public void setDebugServer(ControllerSettings debugServer) { - this.debugServer = debugServer; - } } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java index e17080789..b715b032e 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/AbstractHazelcastLifecycleSupport.java @@ -16,7 +16,6 @@ import ru.spcex.clearing.imdg.base.SimpleObjectMapStore; import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.concurrent.*; @@ -122,77 +121,6 @@ public abstract class AbstractHazelcastLifecycleSupport implements InitializingB } - public int reloadMapFromDB() { - log.info("Reload all from DB..."); - long loadTime = System.currentTimeMillis(); - int count = 0; - - try { - List> tasks = new ArrayList<>(); - Collection mapNames = hazelcastServerInstance.getConfig().getMapConfigs().keySet(); - for (String mapName : mapNames) { - tasks.add(() -> { - Long maxKey = null; - MapStoreConfig mapStoreConfig = hazelcastServerInstance.getConfig().getMapConfig(mapName).getMapStoreConfig(); - if (mapStoreConfig != null && mapStoreConfig.isEnabled()) { - long start = System.currentTimeMillis(); - log.debug("evict map {}", mapName); - IMap map = hazelcastServerInstance.getMap(mapName); - map.evictAll(); - log.debug("Load map {}", mapName); - map.loadAll(false); - int size = map.size(); - long time = System.currentTimeMillis() - start; - log.debug("{} {} rows reloaded in {}ms", mapName, size, time); - - Object mapStore = mapStoreConfig.getImplementation(); - if (mapStore instanceof SimpleObjectMapStore) { - String tableName = ((SimpleObjectMapStore) mapStore).getTableName(); - maxKey = map.keySet().stream().max(Long::compareTo).orElse(null); // jdbcTemplate.queryForObject("select max(id) from " + tableName, Long.class); - } else if (mapStore instanceof DictionaryMapStore) { - // для Dictionary не используется общий id генератор -// } else if (mapStore instanceof FrontendUserSessionMapStore) { -// // не используется общий id генератор - } else { - throw new RuntimeException("unknown map store implementation " + mapStore); - } - log.debug("{} max(id)={}", mapName, maxKey); - } - - return maxKey; - }); - } - long maxKey = 0L; - int threadCount = Runtime.getRuntime().availableProcessors();// todo config * Config.get().getRoot().getSettings().getInitHazelcastThreadMultiplier(); - log.info("Initializing threads count = {}", threadCount); - ExecutorService executor = Executors.newWorkStealingPool(threadCount); - try { - List> results = executor.invokeAll(tasks); - for (Future result : results) { - Long maxKeyResult = result.get(); - if (maxKeyResult != null) { - maxKey = Math.max(maxKey, maxKeyResult); - } - count++; - } - } finally { - executor.shutdown(); - } - log.info("IDGenerator can not reinit. Max map ID {}", maxKey); -// plannerAllTodayMaker.makeSchedulerAllTodayMap(); - } catch (InterruptedException | ExecutionException e) { - if (e instanceof InterruptedException) { - Thread.currentThread().interrupt(); - } - throw new RuntimeException("MapStore multithreaded reload not complete.", e); - } - -// HazelcastHelper.imdgSystem_setStorageState(true, hazelcastServerInstance); - loadTime = System.currentTimeMillis() - loadTime; - log.info("All map reload time {} ms", loadTime); - return count; - } - @Override public void destroy() { hazelcastServerInstance.shutdown(); diff --git a/clearing-parent/imdg/src/main/resources/application.properties b/clearing-parent/imdg/src/main/resources/application.properties index fdb9b7b83..44af70f94 100644 --- a/clearing-parent/imdg/src/main/resources/application.properties +++ b/clearing-parent/imdg/src/main/resources/application.properties @@ -5,8 +5,4 @@ imdg.hazelcast.cluster-members[0]=127.0.0.1 imdg.database.login=clearing imdg.database.password=Aa111111 imdg.database.url=jdbc:postgresql://10.200.200.133:5432/clearing?currentSchema=clearing_prod -#imdg.database.url=jdbc:postgresql://10.200.200.133:5432/postgres?currentSchema=clearing_tester - -#debug tester mode: -#imdg.debug-server.port=8701 -#imdg.debug-server.context-path=/imdg/reload \ No newline at end of file +#imdg.database.url=jdbc:postgresql://10.200.200.133:5432/postgres?currentSchema=clearing_tester \ No newline at end of file diff --git a/clearing-parent/pom.xml b/clearing-parent/pom.xml index f67b743ed..b001c2c8c 100644 --- a/clearing-parent/pom.xml +++ b/clearing-parent/pom.xml @@ -35,6 +35,7 @@ clearing-service registry-service test-clearing + test-api-clearing cleaning-builders trade-importer lim-exporter diff --git a/clearing-parent/test-api-clearing/pom.xml b/clearing-parent/test-api-clearing/pom.xml new file mode 100644 index 000000000..8ed2b970f --- /dev/null +++ b/clearing-parent/test-api-clearing/pom.xml @@ -0,0 +1,135 @@ + + 4.0.0 + + ru.spcex.clearing + clearing-parent + SPCEX-1.0.0.0 + + test-api-clearing + Test-api-clearing + SPCEX-1.0.0.0 + Тестовые контроллеры для отладки клиринговой системы. Только для разработчиков. + + + + 17 + 17 + + + + + ru.spcex.platform + platform-messaging + + + ru.spcex.platform + platform-enum + + + ru.spcex.platform + platform-enum + + + ru.spcex.clearing + classes + SPCEX-1.0.0.0 + compile + + + ru.spcex.clearing + dictionary + SPCEX-1.0.0.0 + compile + + + + ru.spcex.platform + platform-imdg-api + + + ru.spcex.platform + platform-imdg-api-hazelcast-impl + + + ru.spcex.clearing + classes + + + org.springframework.boot + spring-boot-starter + + + com.fasterxml.jackson.core + jackson-databind + + + ru.spcex.clearing + test-clearing + test + + + + org.apache.commons + commons-lang3 + 3.7 + + + + + org.springframework.boot + spring-boot-starter-web + + + io.springfox + springfox-swagger2 + + + io.springfox + springfox-swagger-ui + + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + src/main/resources + + application.properties + + false + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + ${project.artifactId} + + + + + + + diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/ImdgService.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/ImdgService.java new file mode 100644 index 000000000..2411b9dcf --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/ImdgService.java @@ -0,0 +1,99 @@ +package ru.spcex.clearing.test; + +import com.hazelcast.config.MapStoreConfig; +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.IMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.clearing.classes.objects.BusinessObject; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.*; + +@Service +public class ImdgService { + protected final Logger log= LoggerFactory.getLogger(getClass()); + int thread=3; + + HazelcastInstance hazelcastServerInstance; + + Collection allMaps() { + return null; + } + + + public int reloadMapFromDB() { + log.info("Reload all from DB..."); + long loadTime = System.currentTimeMillis(); + int count = 0; + + try { + List> tasks = new ArrayList<>(); + Collection mapNames = hazelcastServerInstance.getConfig().getMapConfigs().keySet(); + for (String mapName : mapNames) { + tasks.add(() -> { + Long maxKey = null; + MapStoreConfig mapStoreConfig = hazelcastServerInstance.getConfig().getMapConfig(mapName).getMapStoreConfig(); + if (mapStoreConfig != null && mapStoreConfig.isEnabled()) { + long start = System.currentTimeMillis(); + log.debug("evict map {}", mapName); + IMap map = hazelcastServerInstance.getMap(mapName); +// todo проверить что ничего лишнего не попадет map.evictAll(); +// log.debug("Load map {}", mapName); +// map.loadAll(false); + int size = map.size(); + long time = System.currentTimeMillis() - start; + log.debug("{} {} rows reloaded in {}ms", mapName, size, time); + + Object mapStore = mapStoreConfig.getImplementation(); + //todo проверить реализацию. +// if (mapStore instanceof SimpleObjectMapStore) { +// String tableName = ((SimpleObjectMapStore) mapStore).getTableName(); +// maxKey = map.keySet().stream().max(Long::compareTo).orElse(null); // jdbcTemplate.queryForObject("select max(id) from " + tableName, Long.class); +// } else if (mapStore instanceof DictionaryMapStore) { +// // для Dictionary не используется общий id генератор +//// } else if (mapStore instanceof FrontendUserSessionMapStore) { +//// // не используется общий id генератор +// } else { +// throw new RuntimeException("unknown map store implementation " + mapStore); +// } + log.debug("{} max(id)={}", mapName, maxKey); + } + + return maxKey; + }); + } + long maxKey = 0L; + int threadCount = Runtime.getRuntime().availableProcessors();// todo config * Config.get().getRoot().getSettings().getInitHazelcastThreadMultiplier(); + log.info("Initializing threads count = {}", threadCount); + ExecutorService executor = Executors.newWorkStealingPool(threadCount); + try { + List> results = executor.invokeAll(tasks); + for (Future result : results) { + Long maxKeyResult = result.get(); + if (maxKeyResult != null) { + maxKey = Math.max(maxKey, maxKeyResult); + } + count++; + } + } finally { + executor.shutdown(); + } + log.info("IDGenerator can not reinit. Max map ID {}", maxKey); +// plannerAllTodayMaker.makeSchedulerAllTodayMap(); + } catch (InterruptedException | ExecutionException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + throw new RuntimeException("MapStore multithreaded reload not complete.", e); + } + +// HazelcastHelper.imdgSystem_setStorageState(true, hazelcastServerInstance); + loadTime = System.currentTimeMillis() - loadTime; + log.info("All map reload time {} ms", loadTime); + return count; + } +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/KafkaService.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/KafkaService.java new file mode 100644 index 000000000..60bec05aa --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/KafkaService.java @@ -0,0 +1,18 @@ +package ru.spcex.clearing.test; + +import org.springframework.stereotype.Service; + +import java.util.Collection; + +@Service +public class KafkaService { + + Collection allTopics() { + return null; + } + + int putMessage(String topic, String json) { + //todo + return 0; + } +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/TestApiClearingApplication.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/TestApiClearingApplication.java new file mode 100644 index 000000000..130b48087 --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/TestApiClearingApplication.java @@ -0,0 +1,27 @@ +package ru.spcex.clearing.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +@SpringBootApplication +public class TestApiClearingApplication { + public static void main(String[] args) { + +// ConfigurableApplicationContext context = new AnnotationConfigApplicationContext(SpringEnableComponentScanConfig.class); +// StartupInfo startupInfo = context.getBean(StartupInfo.class); +// startupInfo.logStart(); +// try { +// ProcessorService processorService = context.getBean(ProcessorService.class); +// processorService.process(); +// } finally { +// startupInfo.logEnd(); +// context.close(); +// } + + //todo not spring boot, please + SpringApplication springApplication = new SpringApplication(TestApiClearingApplication.class); + springApplication.run(args); + } +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/DirectImdgConfig.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/DirectImdgConfig.java new file mode 100644 index 000000000..df0ae9045 --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/DirectImdgConfig.java @@ -0,0 +1,66 @@ +package ru.spcex.clearing.test.config; + +import com.hazelcast.client.HazelcastClient; +import com.hazelcast.client.config.ClientConfig; +import com.hazelcast.core.HazelcastInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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 ru.spcex.clearing.test.config.settings.TestServiceSettings; +import ru.spcex.platform.imdg.api.ImdgProvider; +import ru.spcex.platform.imdg.iml.hazelcast.config.HazelcastClientParams; +import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; +import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper; + + +@Configuration +public class DirectImdgConfig { + Logger log = LoggerFactory.getLogger(getClass()); + +// @Autowired +// @Bean +// public ImdgProvider imdgProvider( +// @Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer, +// @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter, +// TestServiceSettings clientSetting +// ) { +// ImdgProvider imdg = new HazelcastService(taskExecutorHazelcastClientInitializer, +// taskExecutorIdGeneratorAwaiter, +// clientSetting.getHazelcast()); +// return imdg; +// } + + @Autowired + @Bean("imdgNative") + public HazelcastInstance imdgNativeService(TestServiceSettings settings) { + HazelcastClientParams settingsElementHazelcastClient = settings.getHazelcast(); +// if (hazelcastInstance != null) { +// try { +// hazelcastInstance.shutdown(); +// } catch (Throwable ignored) { +// } +// } + HazelcastInstance hazelcastInstance; + log.info("Hazelcast: client init"); + ClientConfig clientConfig = HazelcastHelper.getClientConfig( + settingsElementHazelcastClient.getClusterMembers(), + settingsElementHazelcastClient.getLogin(), + settingsElementHazelcastClient.getPassword(), + settingsElementHazelcastClient.getInstanceName(), + settingsElementHazelcastClient.getNearCacheConfig() + ); +// if (environment != null && Arrays.asList(environment.getActiveProfiles()).contains("tests")) { +// clientConfig.getNetworkConfig().setConnectionAttemptLimit(HazelcastHelper.TEST_CONNECTION_ATTEMPT_LIMIT); +// } + log.info("Hazelcast: client created, trying connect to server ({}) ...", settingsElementHazelcastClient.getClusterMembers()); + hazelcastInstance = HazelcastClient.newHazelcastClient(clientConfig); + log.info("Hazelcast: client created and connected"); + return hazelcastInstance; + } + + + +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaConfig.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaConfig.java new file mode 100644 index 000000000..4727f7482 --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaConfig.java @@ -0,0 +1,65 @@ +package ru.spcex.clearing.test.config; + +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.producer.Producer; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; +import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.config.KafkaConsumerFactory; +import ru.spcex.clearing.platform.messaging.config.KafkaProducerFactory; +import ru.spcex.clearing.platform.messaging.config.element.KafkaProducerSettings; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.test.config.settings.TestServiceSettings; +import ru.spcex.platform.imdg.api.Imdg; +import ru.spcex.platform.imdg.api.ImdgId; +import ru.spcex.platform.imdg.api.ImdgProvider; + +@Configuration +public class KafkaConfig { + @Autowired + @Bean + @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + public Consumer createConsumer(TestServiceSettings settings) { + return KafkaConsumerFactory.consumer(settings.getKafkaConsumer()); + } + + @Autowired + @Bean + public Producer createProducer(TestServiceSettings settings) { + return KafkaProducerFactory.producer(settings.getKafkaProducer()); + } + + @Bean + public ProducerFactory pf(TestServiceSettings settings) { + KafkaProducerSettings kafkaSettings = settings.getKafkaProducer(); + return KafkaProducerFactory.producerFactory(kafkaSettings); + } + + @Bean("kafkaTemplate") + public KafkaTemplate kafkaTemplate(ProducerFactory pf) { + return new KafkaTemplate<>(pf); + } + + @Autowired + @Bean + public KafkaSender kafkaSender(@Qualifier("kafkaTemplate") KafkaTemplate kafkaTemplate, + ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return KafkaSender + .setup() + .setKafkaTemplate(kafkaTemplate) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class); + return imdg::insert; + }) + .build(); + } +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/SwaggerConfig.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/SwaggerConfig.java new file mode 100644 index 000000000..1f0204817 --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/SwaggerConfig.java @@ -0,0 +1,39 @@ +package ru.spcex.clearing.test.config; + +import com.google.common.base.Predicates; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@SuppressWarnings("Guava") +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .groupName("clearing-backend-api") + .apiInfo(metadata()) + .select() + .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot"))) + .paths(PathSelectors.any()) + .build() + .useDefaultResponseMessages(false); + } + + private ApiInfo metadata() { + return new ApiInfoBuilder() + .title("Spcex Clearing service") + .description("Сервис клиринга") + .version("0.0.1") + .build(); + } + +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/WebConfig.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/WebConfig.java new file mode 100644 index 000000000..9f83a7ade --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/WebConfig.java @@ -0,0 +1,106 @@ +package ru.spcex.clearing.test.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.web.server.Cookie; +import org.springframework.boot.web.server.WebServerFactoryCustomizer; +import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; +import org.springframework.boot.web.servlet.server.CookieSameSiteSupplier; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.context.request.RequestContextListener; +import org.springframework.web.servlet.config.annotation.*; +import ru.spcex.clearing.test.config.settings.TestServiceSettings; + + +import java.util.List; +import java.util.function.Consumer; + +@SuppressWarnings("Duplicates") +@Configuration +@EnableWebMvc +//todo remove? see ClearingCorsFilter +@CrossOrigin +public class WebConfig implements WebMvcConfigurer { + private final MappingJackson2HttpMessageConverter customJsonHttpConverter; + private final String sameSite; + + @Bean("customJsonHttpConverter") + public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() { + return new MappingJackson2HttpMessageConverter(JsonUtil.JacksonObjectMapper.getMapper()); + } + + @Autowired + public WebConfig(@Qualifier("customJsonHttpConverter") MappingJackson2HttpMessageConverter customJsonHttpConverter, + TestServiceSettings backendSettings + ) { + this.customJsonHttpConverter = customJsonHttpConverter; + sameSite = null; // this.sameSite = backendSettings.getSecurity().getSameSite(); + } + + @Override + public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { + configurer.enable(); + } + + @Autowired + @Override + public void configureMessageConverters(List> messageConverters) { + Consumer> addConverter = httpMessageConverter -> { + messageConverters.removeIf(registeredConverter -> registeredConverter.getClass().equals(httpMessageConverter.getClass())); + messageConverters.add(httpMessageConverter); + }; + addConverter.accept(new StringHttpMessageConverter()); + addConverter.accept(customJsonHttpConverter); + } + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addRedirectViewController("/v2/api-docs", "/v2/api-docs?group=api"); + registry.addRedirectViewController("/swagger-resources/configuration/ui", "/swagger-resources/configuration/ui"); + registry.addRedirectViewController("/swagger-resources/configuration/security", "/swagger-resources/configuration/security"); + registry.addRedirectViewController("/swagger-resources", "/swagger-resources"); + registry.addRedirectViewController("", "/swagger-ui.html"); + } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry + .addResourceHandler("/swagger-ui.html**") + .addResourceLocations("classpath:/META-INF/resources/swagger-ui.html"); + } + + @Bean + public WebServerFactoryCustomizer enableDefaultServlet() { + return (factory) -> factory.setRegisterDefaultServlet(true); + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedMethods("*"); + } + + @Bean + public RequestContextListener requestContextListener() { + return new RequestContextListener(); + } + + @Bean + public CookieSameSiteSupplier applicationCookieSameSiteSupplier() { + if (sameSite == null) { + return null; + } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.NONE.attributeValue())) { + return CookieSameSiteSupplier.ofNone(); + } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.LAX.attributeValue())) { + return CookieSameSiteSupplier.ofLax(); + } else if (sameSite.equalsIgnoreCase(Cookie.SameSite.STRICT.attributeValue())) { + return CookieSameSiteSupplier.ofStrict(); + } else { + throw new IllegalStateException("unknown SameSite setting"); + } + } +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ControllerSettings.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/ControllerSettings.java similarity index 85% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ControllerSettings.java rename to clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/ControllerSettings.java index 29aabb048..15a7adc6a 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ControllerSettings.java +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/ControllerSettings.java @@ -1,25 +1,25 @@ -package ru.spcex.clearing.imdg.config.element; - -/** - * Debug config - */ -public class ControllerSettings { - private String port; - private String contextPath; - - public String getPort() { - return port; - } - - public void setPort(String port) { - this.port = port; - } - - public String getContextPath() { - return contextPath; - } - - public void setContextPath(String contextPath) { - this.contextPath = contextPath; - } -} +package ru.spcex.clearing.test.config.settings; + +/** + * Debug config + */ +public class ControllerSettings { + private String port; + private String contextPath; + + public String getPort() { + return port; + } + + public void setPort(String port) { + this.port = port; + } + + public String getContextPath() { + return contextPath; + } + + public void setContextPath(String contextPath) { + this.contextPath = contextPath; + } +} diff --git a/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/TestServiceSettings.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/TestServiceSettings.java new file mode 100644 index 000000000..28d35460b --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/config/settings/TestServiceSettings.java @@ -0,0 +1,51 @@ +package ru.spcex.clearing.test.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("test-service") +public class TestServiceSettings { + private HazelcastClientParams hazelcast; + private KafkaConsumerSettings kafkaConsumer; + private KafkaProducerSettings kafkaProducer; + + private ControllerSettings controllerSettings;//todo refactoring + + public ControllerSettings getControllerSettings() { + return controllerSettings; + } + + public void setControllerSettings(ControllerSettings controllerSettings) { + this.controllerSettings = controllerSettings; + } + + 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/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/Controller.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/Controller.java new file mode 100644 index 000000000..6c8ad9a59 --- /dev/null +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/Controller.java @@ -0,0 +1,139 @@ +package ru.spcex.clearing.test.controller; + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import ru.spcex.clearing.test.ImdgService; +import ru.spcex.clearing.test.config.settings.ControllerSettings; +import ru.spcex.clearing.test.config.settings.TestServiceSettings; +import ru.spcex.platform.utils.log.ExceptionUtils; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.time.LocalDateTime; + +@Service +public class Controller implements InitializingBean, DisposableBean { + protected final Logger log = LoggerFactory.getLogger(getClass()); + HttpServer server; + + final ControllerSettings settings; + final ImdgService imdgService; + + @Autowired + public Controller(ImdgService imdgService, TestServiceSettings settings) { + this.imdgService = imdgService; + this.settings = settings.getControllerSettings(); + } + + @Override + public void afterPropertiesSet() throws Exception { + Integer port = null; // 8701 + try { + if (settings == null || StringUtils.isEmpty(settings.getPort())) { + log.debug("Debug HTTP port not set, do not init HTTP controller service."); + return; + } + port = Integer.parseInt(settings.getPort().trim()); + String url = settings.getContextPath().trim(); + log.info("Controller for debug reload star at port {} with url \"{}\"", port, url); + this.server = HttpServer.create(new InetSocketAddress(port), 0); + IndexHandler index=new IndexHandler(); + server.createContext(url, index); + server.createContext(url+"/index.html", index); + server.createContext(url+"/imdg", new ImdgHandler()); + server.createContext(url+"/kafka", new KafkaHandler()); + server.setExecutor(null); // default + server.start(); + } catch (Throwable t) { + log.error("Can not start debug HTTP server in port {}: {}", port, ExceptionUtils.getStackTrace(t)); + } + } + + @Override + public void destroy() throws Exception { + if (server != null) { + server.stop(100); + log.info("Controller for reload stop."); + } + } + + + class IndexHandler extends HtmlHandler { + @Override + public void makePage(HttpExchange t, OutputStream os) throws IOException { + writeLine(os, "Welcome!
"); + writeLine(os, " Reload IMDG. "); + writeLine(os, " Send to kafka. "); + } + } + class KafkaHandler extends HtmlHandler { + @Override + public void makePage(HttpExchange t, OutputStream os) throws IOException { + writeLine(os, "Welcome kafka send!
"); + byte[] jsonB = t.getRequestBody().readAllBytes(); + //t.getRequestHeaders().getFirst() + String json=new String(jsonB, "windows-1251"); + //todo ... + writeLine(os, " Reload IMDG. "); + writeLine(os, " Send to kafka. "); + } + } + + class ImdgHandler extends HtmlHandler { + @Override + public void makePage(HttpExchange t, OutputStream os) throws IOException { + writeLine(os, "Wait, reload all maps from DB...
"); + synchronized (this) { + os.flush(); + try { + long clock = System.currentTimeMillis(); + int count = imdgService.reloadMapFromDB(); + clock = System.currentTimeMillis() - clock; + writeLine(os, count + " map per " + clock + " ms
"); + } catch (Throwable e) { + String msg = "Error reload: " + ExceptionUtils.getStackTrace(e); + log.error(msg); + writeLine(os, msg); + } + } + writeLine(os, "Done. " + LocalDateTime.now() + "
"); + writeLine(os, " Reload again. "); + } + } + + + abstract class HtmlHandler implements HttpHandler { + public abstract void makePage(HttpExchange t, OutputStream os) throws IOException; + + @Override + public void handle(HttpExchange t) throws IOException { + log.info("{} request by user \"{}\"", getClass().getSimpleName(), t.getRemoteAddress().getAddress()); + t.sendResponseHeaders(200, 0); + t.setAttribute("Content-Type", "text/html; charset=windows-1251"); // or "text/plain или text/html; charset=windows-1251" + try (OutputStream os = t.getResponseBody()) { + writeLine(os, "\n\n"); + writeLine(os, "
"); + makePage(t, os); + writeLine(os, "
"); + writeLine(os, ""); + } + log.trace("HTTP Request done."); + } + + void writeLine(OutputStream os, String text) throws IOException { + if (text != null) + os.write(text.getBytes("windows-1251")); + os.write("\n".getBytes("windows-1251")); + } + + } +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/controller/ImdgController.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/ImdgController.java similarity index 86% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/controller/ImdgController.java rename to clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/ImdgController.java index 3c7652305..50d142a38 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/services/controller/ImdgController.java +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/ImdgController.java @@ -1,112 +1,111 @@ -package ru.spcex.clearing.imdg.services.controller; - - -import com.sun.net.httpserver.HttpExchange; -import com.sun.net.httpserver.HttpHandler; -import com.sun.net.httpserver.HttpServer; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import ru.spcex.clearing.imdg.config.element.ControllerSettings; -import ru.spcex.clearing.imdg.config.element.ImdgSettings; -import ru.spcex.clearing.imdg.services.AbstractHazelcastLifecycleSupport; -import ru.spcex.platform.utils.log.ExceptionUtils; - -import java.io.IOException; -import java.io.OutputStream; -import java.net.InetSocketAddress; -import java.nio.charset.StandardCharsets; -import java.time.LocalDateTime; - -@Service -public class ImdgController implements InitializingBean, DisposableBean { - protected final Logger log = LoggerFactory.getLogger(getClass()); - HttpServer server; - - final ControllerSettings settings; - final AbstractHazelcastLifecycleSupport imdgService; - - @Autowired - public ImdgController(AbstractHazelcastLifecycleSupport imdgService, ImdgSettings settings) { - this.imdgService = imdgService; - this.settings = settings.getDebugServer(); - } - - @Override - public void afterPropertiesSet() throws Exception { - Integer port = null; // 8701 - try { - if (settings == null || StringUtils.isEmpty(settings.getPort())) { - log.debug("Debug HTTP port not set, do not init HTTP controller service."); - return; - } - port = Integer.parseInt(settings.getPort().trim()); - String url = StringUtils.isBlank(settings.getContextPath()) ? "/imdg" : settings.getContextPath().trim(); - log.info("Controller for debug reload star at port {} with url \"{}\"", port, url); - this.server = HttpServer.create(new InetSocketAddress(port), 0); - server.createContext(url, new MyHandler()); - server.setExecutor(null); // default - server.start(); - } catch (Throwable t) { - log.error("Can not start debug HTTP server in port {}: {}", port, ExceptionUtils.getStackTrace(t)); - } - } - - @Override - public void destroy() throws Exception { - if (server != null) { - server.stop(100); - log.info("Controller for reload stop."); - } - } - - class MyHandler implements HttpHandler { - @Override - public void handle(HttpExchange t) throws IOException { - log.info("Reload request by user \"{}\"", t.getRemoteAddress().getAddress()); - t.sendResponseHeaders(200, 0); - t.setAttribute("Content-Type", "text/html; charset=windows-1251"); // or "text/plain или text/html; charset=windows-1251" - try (OutputStream os = t.getResponseBody()) { - writeHead(os); - writeLine(os, "Wait, reload all maps from DB...
"); - synchronized (ImdgController.this) { - os.flush(); - try { - long clock = System.currentTimeMillis(); - int count = imdgService.reloadMapFromDB(); - clock = System.currentTimeMillis() - clock; - writeLine(os, count + " map per " + clock + " ms
"); - } catch (Throwable e) { - String msg = "Error reload: " + ExceptionUtils.getStackTrace(e); - log.error(msg); - writeLine(os, msg); - } - } - writeLine(os, "Done. " + LocalDateTime.now() + "
"); - writeLine(os, " Reload again. "); - writeEnd(os); - } //os.close(); - log.trace("HTTP Request done."); - } - - void writeHead(OutputStream os) throws IOException { - writeLine(os, "\n\n"); - writeLine(os, "
"); - } - - void writeLine(OutputStream os, String text) throws IOException { - if (text != null) - os.write(text.getBytes("windows-1251")); - os.write("\n".getBytes("windows-1251")); - } - - void writeEnd(OutputStream os) throws IOException { - writeLine(os, "
"); - writeLine(os, ""); - } - } -} +package ru.spcex.clearing.test.controller; + + +import com.sun.net.httpserver.HttpExchange; +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.DisposableBean; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.test.ImdgService; +import ru.spcex.clearing.test.config.settings.ControllerSettings; +import ru.spcex.clearing.test.config.settings.TestServiceSettings; +import ru.spcex.platform.utils.log.ExceptionUtils; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.InetSocketAddress; +import java.time.LocalDateTime; + +@Service +public class ImdgController implements InitializingBean, DisposableBean { + protected final Logger log = LoggerFactory.getLogger(getClass()); + protected HttpServer server; + + protected final ControllerSettings settings; + protected final ImdgService imdgService; + + @Autowired + public ImdgController(ImdgService imdgService, TestServiceSettings settings) { + this.imdgService = imdgService; + this.settings = settings.getControllerSettings(); + } + + @Override + public void afterPropertiesSet() throws Exception { + Integer port = null; // 8701 + try { + if (settings == null || StringUtils.isEmpty(settings.getPort())) { + log.debug("Debug HTTP port not set, do not init HTTP controller service."); + return; + } + port = Integer.parseInt(settings.getPort().trim()); + String url = StringUtils.isBlank(settings.getContextPath()) ? "/imdg" : settings.getContextPath().trim(); + log.info("Controller for debug reload star at port {} with url \"{}\"", port, url); + this.server = HttpServer.create(new InetSocketAddress(port), 0); + server.createContext(url, new MyHandler()); + server.setExecutor(null); // default + server.start(); + } catch (Throwable t) { + log.error("Can not start debug HTTP server in port {}: {}", port, ExceptionUtils.getStackTrace(t)); + } + } + + @Override + public void destroy() throws Exception { + if (server != null) { + server.stop(100); + log.info("Controller for reload stop."); + } + } + + class MyHandler implements HttpHandler { + @Override + public void handle(HttpExchange t) throws IOException { + log.info("Reload request by user \"{}\"", t.getRemoteAddress().getAddress()); + t.sendResponseHeaders(200, 0); + t.setAttribute("Content-Type", "text/html; charset=windows-1251"); // or "text/plain или text/html; charset=windows-1251" + try (OutputStream os = t.getResponseBody()) { + writeHead(os); + writeLine(os, "Wait, reload all maps from DB...
"); + synchronized (ImdgController.this) { + os.flush(); + try { + long clock = System.currentTimeMillis(); + int count = imdgService.reloadMapFromDB(); + clock = System.currentTimeMillis() - clock; + writeLine(os, count + " map per " + clock + " ms
"); + } catch (Throwable e) { + String msg = "Error reload: " + ExceptionUtils.getStackTrace(e); + log.error(msg); + writeLine(os, msg); + } + } + writeLine(os, "Done. " + LocalDateTime.now() + "
"); + writeLine(os, " Reload again. "); + writeEnd(os); + } //os.close(); + log.trace("HTTP Request done."); + } + + void writeHead(OutputStream os) throws IOException { + writeLine(os, "\n\n"); + writeLine(os, "
"); + } + + void writeLine(OutputStream os, String text) throws IOException { + if (text != null) + os.write(text.getBytes("windows-1251")); + os.write("\n".getBytes("windows-1251")); + } + + void writeEnd(OutputStream os) throws IOException { + writeLine(os, "
"); + writeLine(os, ""); + } + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/kafka/AnyKafkaMessageAction.java similarity index 86% rename from clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java rename to clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/kafka/AnyKafkaMessageAction.java index 5de8b4cb0..d3c2af435 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/controller/test/AnyKafkaMessageAction.java +++ b/clearing-parent/test-api-clearing/src/main/java/ru/spcex/clearing/test/controller/kafka/AnyKafkaMessageAction.java @@ -1,14 +1,13 @@ -package ru.spcex.clearing.backendapi.controller.test; +package ru.spcex.clearing.test.controller.kafka; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonRawValue; import com.fasterxml.jackson.databind.JsonNode; import io.swagger.annotations.ApiModelProperty; -import ru.spcex.clearing.backendapi.domain.actions.IAction; import ru.spcex.clearing.platform.messaging.domain.ActionType; import ru.spcex.clearing.platform.messaging.domain.cud.registry.TradingClearingRegistryNewRequest; -public class AnyKafkaMessageAction implements IAction { +public class AnyKafkaMessageAction /*implements IAction*/ { @ApiModelProperty(value = "полное имя класса payload для BaseRequest", example = "ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest") @JsonProperty private String fullClassName; @@ -22,14 +21,14 @@ public class AnyKafkaMessageAction implements IAction + + + + + %date{HH:mm:ss.SSS} [%thread] %-5level %class{0}:%line - %message%n + utf-8 + + + + ./logs/utility-service.log + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %class{0}:%msg%n + utf8 + + + + ./logs/utility-service.%i.log + + 1 + 10 + + + 500MB + + + + + + + + + + + + +