diff --git a/clearing-parent/dbf-exporter/pom.xml b/clearing-parent/dbf-exporter/pom.xml
index dc03fe6c8..3e4163572 100644
--- a/clearing-parent/dbf-exporter/pom.xml
+++ b/clearing-parent/dbf-exporter/pom.xml
@@ -30,26 +30,22 @@
spring-boot-autoconfigure
-
-
- org.springframework
- spring-jdbc
-
-
- com.mchange
- c3p0
-
-
- org.postgresql
- postgresql
-
-
com.github.albfernandez
javadbf
+
+
+ ru.spcex.platform
+ platform-imdg-api-hazelcast-impl
+
+
+ ru.spcex.clearing
+ classes
+
+
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
index cbad9106a..811c2733d 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/config/DBFExporterConfig.java
@@ -1,21 +1,20 @@
package ru.spcex.clearing.dbf.exporter.config;
-import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
-import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromDB;
+import ru.spcex.clearing.dbf.exporter.logic.stages.ExportFromHazelcast;
import ru.spcex.clearing.dbf.exporter.logic.stages.PrepareDBFFile;
import ru.spcex.clearing.dbf.exporter.logic.stages.Stage;
import ru.spcex.clearing.dbf.exporter.properties.AProperties;
+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 javax.sql.DataSource;
-import java.beans.PropertyVetoException;
import java.util.LinkedList;
import java.util.List;
@@ -31,19 +30,26 @@ public class DBFExporterConfig {
this.context = context;
}
- @Bean("dbfDataSource")
- public DataSource dataSource() throws PropertyVetoException {
- ComboPooledDataSource dataSource = new ComboPooledDataSource();
- dataSource.setDriverClass(properties.getDbDriver());
- dataSource.setJdbcUrl(properties.getJdbcUrl());
- dataSource.setUser(properties.getDbLogin());
- dataSource.setPassword(properties.getDbPassword());
- return dataSource;
+ @Bean("taskExecutorHazelcastClientInitializer")
+ public ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer() {
+ return createThreadPoolTaskExecutor(1, true);
}
- @Bean("dbfJdbcTemplate")
- public JdbcTemplate jdbcTemplate(@Qualifier("dbfDataSource") DataSource dataSource) {
- return new JdbcTemplate(dataSource);
+ @Bean("taskExecutorIdGeneratorAwaiter")
+ public ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter() {
+ return createThreadPoolTaskExecutor(1, false);
+ }
+
+ @Bean("imdgProvider")
+ public ImdgProvider imdgProvider(@Qualifier("taskExecutorHazelcastClientInitializer") ThreadPoolTaskExecutor taskExecutorHazelcastClientInitializer,
+ @Qualifier("taskExecutorIdGeneratorAwaiter") ThreadPoolTaskExecutor taskExecutorIdGeneratorAwaiter,
+ AProperties properties) {
+ HazelcastClientParams params = new HazelcastClientParams();
+ params.setClusterMembers(properties.getHazelcastClusterMembers());
+ params.setLogin(properties.getHazelcastLogin());
+ params.setPassword(properties.getHazelcastPassword());
+ params.setInstanceName("dbf-exporter");
+ return new HazelcastService(taskExecutorHazelcastClientInitializer, taskExecutorIdGeneratorAwaiter, params);
}
@Bean("pipeline")
@@ -51,7 +57,7 @@ public class DBFExporterConfig {
List pipeline = new LinkedList<>();
pipeline.add(context.getBean(PrepareDBFFile.class));
- pipeline.add(context.getBean(ExportFromDB.class));
+ pipeline.add(context.getBean(ExportFromHazelcast.class));
return pipeline;
}
@@ -68,4 +74,15 @@ public class DBFExporterConfig {
return executor;
}
+ 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;
+ }
+
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java
index 5889d1604..0cd525aa0 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/controller/DefaultController.java
@@ -10,7 +10,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
-import ru.spcex.clearing.dbf.exporter.logic.data.ISqlFilter;
+import ru.spcex.clearing.dbf.exporter.logic.data.IFilter;
import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
import ru.spcex.clearing.dbf.exporter.services.DBFExportService;
@@ -37,7 +37,7 @@ public class DefaultController implements InitializingBean {
@ResponseBody
public String exportTables() {
log.info("Call export method for exporter controller");
- Map tablesForExport = new EnumMap<>(Table.class);
+ Map tablesForExport = new EnumMap<>(Table.class);
for (Table table : Table.values()) tablesForExport.put(table, null);
dbfExportService.run(tablesForExport);
return "export done, see log";
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ISqlFilter.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java
similarity index 66%
rename from clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ISqlFilter.java
rename to clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java
index 668a5e6f3..56c45b249 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ISqlFilter.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/IFilter.java
@@ -3,6 +3,6 @@ package ru.spcex.clearing.dbf.exporter.logic.data;
/**
* Фильтр записей для экспорта
*/
-public interface ISqlFilter {
- String getSqlCondition();
+public interface IFilter {
+
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
index ecdc1b43e..9513b0c4f 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/ResultContainer.java
@@ -11,12 +11,12 @@ import java.util.UUID;
public class ResultContainer {
private UUID uuid;
private Table tableForExport;
- private ISqlFilter filter;
+ private IFilter filter;
private File fileForExport;
protected ResultContainer() {}
- public static ResultContainer createNewTask(Table tableForExport, ISqlFilter filter) {
+ public static ResultContainer createNewTask(Table tableForExport, IFilter filter) {
ResultContainer container = new ResultContainer();
container.tableForExport = tableForExport;
container.filter = filter;
@@ -32,11 +32,11 @@ public class ResultContainer {
this.tableForExport = tableForExport;
}
- public ISqlFilter getFilter() {
+ public IFilter getFilter() {
return filter;
}
- public void setFilter(ISqlFilter filter) {
+ public void setFilter(IFilter filter) {
this.filter = filter;
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/ColumnType.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/ColumnType.java
index fbf77e773..67fd51746 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/ColumnType.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/ColumnType.java
@@ -2,37 +2,38 @@ package ru.spcex.clearing.dbf.exporter.logic.data.enums;
import com.linuxense.javadbf.DBFDataType;
-import java.sql.Types;
+import java.math.BigDecimal;
+import java.time.LocalDate;
/**
* Типы данных в таблицах.
* Ставит в соответствие типы PostGRE и DBF
*/
public enum ColumnType {
- VARCHAR(DBFDataType.CHARACTER, Types.VARCHAR),
- CHARACTER(DBFDataType.CHARACTER, Types.CHAR),
- NUMERIC(DBFDataType.NUMERIC, Types.NUMERIC),
- DATE(DBFDataType.DATE, Types.DATE);
+ VARCHAR(DBFDataType.CHARACTER, String.class),
+ CHARACTER(DBFDataType.CHARACTER, Character.class),
+ NUMERIC(DBFDataType.NUMERIC, BigDecimal.class),
+ DATE(DBFDataType.DATE, LocalDate.class);
private final DBFDataType dbfType;
- private final int sqlType;
+ private final Class> javaType;
- ColumnType(DBFDataType dbfType, int postgreSqlType) {
+ ColumnType(DBFDataType dbfType, Class> javaType) {
this.dbfType = dbfType;
- this.sqlType = postgreSqlType;
+ this.javaType = javaType;
}
public DBFDataType getDbfType() {
return dbfType;
}
- public int getSqlType() {
- return sqlType;
+ public Class> getJavaType() {
+ return javaType;
}
- public static ColumnType getForSQLType(int sqlType) {
+ public static ColumnType getForSQLType(Class> sqlType) {
for (ColumnType columnType : values()) {
- if (columnType.sqlType == sqlType) return columnType;
+ if (columnType.javaType == sqlType) return columnType;
}
return null;
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
index 697490f7e..740ad040b 100644
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
+++ b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/data/enums/Table.java
@@ -1,39 +1,49 @@
package ru.spcex.clearing.dbf.exporter.logic.data.enums;
-public enum Table {
- DF_01("DF-01"),
- DF_02("DF-02"),
- DF_03("DF-03"),
- DF_04("DF-04"),
- DF_05("DF-05"),
- DF_06("DF-06");
+import ru.clearing.classes.statics.data.sdf.*;
+import ru.spcex.clearing.imdg.IMDGDistributedNames;
+import ru.spcex.platform.classes.base.SpcexObjectBase;
+public enum Table {
+ S_DF01("DF-01", IMDGDistributedNames.Map_SDf01, SDf01.class),
+ S_DF02("DF-02", IMDGDistributedNames.Map_SDf02, SDf02.class),
+ S_DF08("DF-08", IMDGDistributedNames.Map_SDf08, SDf08.class),
+ S_DF12("DF-12", IMDGDistributedNames.Map_SDf12, SDf12.class),
+ S_DF16("DF-16", IMDGDistributedNames.Map_SDf16, SDf16.class),
+ S_DF18("DF-18", IMDGDistributedNames.Map_SDf18, SDf18.class);
+
+ /**
+ * Префикс имени файла для экспорта
+ */
private final String filePrefix;
- Table(String prefix) {
- this.filePrefix = prefix;
+ /**
+ * Имя мапы hazelcast
+ */
+ private final String hazelcastMapName;
+
+ /**
+ * Класс объекта
+ */
+ private final Class extends SpcexObjectBase> entityClass;
+
+
+ Table(String filePrefix, String hazelcastMapName, Class extends SpcexObjectBase> entityClass) {
+ this.filePrefix = filePrefix;
+ this.hazelcastMapName = hazelcastMapName;
+ this.entityClass = entityClass;
}
- public boolean fileForThisTable(String filename) {
- return filename != null && filename.startsWith(filePrefix);
- }
-
- public static Table getTableForFilename(String filename) {
- for (Table table : Table.values()) {
- if (table.fileForThisTable(filename)) return table;
- }
- return null;
- }
-
- public static Table tableForName(String name) {
- for (Table table : values()) {
- if (name.equalsIgnoreCase(table.name()))
- return table;
- }
- return null;
+ public String getHazelcastMapName() {
+ return hazelcastMapName;
}
public String getFilePrefix() {
return filePrefix;
}
+
+ public Class extends SpcexObjectBase> getEntityClass() {
+ return entityClass;
+ }
+
}
diff --git a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromDB.java b/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromDB.java
deleted file mode 100644
index a95f588ca..000000000
--- a/clearing-parent/dbf-exporter/src/main/java/ru/spcex/clearing/dbf/exporter/logic/stages/ExportFromDB.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package ru.spcex.clearing.dbf.exporter.logic.stages;
-
-import com.linuxense.javadbf.DBFDataType;
-import com.linuxense.javadbf.DBFField;
-import com.linuxense.javadbf.DBFWriter;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.support.JdbcUtils;
-import org.springframework.jdbc.support.MetaDataAccessException;
-import org.springframework.stereotype.Component;
-import ru.spcex.clearing.dbf.exporter.exceptions.ConfigException;
-import ru.spcex.clearing.dbf.exporter.logic.data.ISqlFilter;
-import ru.spcex.clearing.dbf.exporter.logic.data.ResultContainer;
-import ru.spcex.clearing.dbf.exporter.logic.data.enums.ColumnType;
-import ru.spcex.clearing.dbf.exporter.logic.data.enums.StageResult;
-import ru.spcex.clearing.dbf.exporter.logic.data.enums.Table;
-import ru.spcex.clearing.dbf.exporter.properties.AProperties;
-
-import java.io.File;
-import java.math.BigDecimal;
-import java.nio.charset.Charset;
-import java.sql.ResultSet;
-import java.time.LocalDate;
-import java.time.ZoneOffset;
-import java.util.*;
-
-/**
- * Выгрузка данных из базы и их запись
- */
-@Component
-public class ExportFromDB extends Stage implements InitializingBean {
- private final AProperties properties;
- private final JdbcTemplate dbfJdbcTemplate;
- private final Map dbfFieldsForTable = new HashMap<>();
-
- private Charset dbfCharset;
-
- public ExportFromDB(@Qualifier("dbfExporterProperties") AProperties properties,
- @Qualifier("dbfJdbcTemplate") JdbcTemplate dbfJdbcTemplate) {
- this.properties = properties;
- this.dbfJdbcTemplate = dbfJdbcTemplate;
- }
-
- @Override
- public StageResult process(ResultContainer resultContainer) {
- Objects.requireNonNull(resultContainer.getTableForExport());
- Objects.requireNonNull(resultContainer.getFileForExport());
-
- Table table = resultContainer.getTableForExport();
- ISqlFilter sqlFilter = resultContainer.getFilter();
- String sqlCondition = sqlFilter != null ? " where " + sqlFilter : "";
-
- String sql = "select * from " + table + sqlCondition;
- List