diff --git a/credit-tracker.properties b/credit-tracker.properties index 52e6a38..5703426 100644 --- a/credit-tracker.properties +++ b/credit-tracker.properties @@ -48,6 +48,20 @@ ct.scoring-data-source-settings.max-lifetime=${MAX_LIFETIME_SCORING:1800000} ct.scoring-data-source-settings.keepalive-time=${KEEPALIVE_TIME_SCORING:0} ct.scoring-data-source-settings.leak-detection-threshold=${LEAK_DETECTION_THRESHOLD_SCORING:0} +# nbch +ct.nbch-data-source-settings.driver=com.ibm.db2.jcc.DB2Driver +ct.nbch-data-source-settings.url=${DB_URL_NBCH:jdbc:db2://10.230.227.102:2668/cprosd22:currentSchema=NBCH;} +ct.nbch-data-source-settings.username=${USERNAME_NBCH:ros9appl} +ct.nbch-data-source-settings.password=${PASSWORD_NBCH:R0s9Appl} +ct.nbch-data-source-settings.maximum-pool-size=${MAXIMUM_POOL_SIZE_NBCH:30} +ct.nbch-data-source-settings.minimum-idle=${MINIMUM_IDLE_NBCH:10} +ct.nbch-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_NBCH:10000} +ct.nbch-data-source-settings.validation-timeout=${VALIDATION_TIMEOUT_NBCH:5000} +ct.nbch-data-source-settings.idle-timeout=${IDLE_TIMEOUT_NBCH:600000} +ct.nbch-data-source-settings.max-lifetime=${MAX_LIFETIME_NBCH:1800000} +ct.nbch-data-source-settings.keepalive-time=${KEEPALIVE_TIME_NBCH:0} +ct.nbch-data-source-settings.leak-detection-threshold=${LEAK_DETECTION_THRESHOLD_NBCH:0} + ct.max_xml_file_size=${ACCEPTED_XML_SIZE:1024} spring.servlet.multipart.max-file-size=${ACCEPTED_ARCHIVE_SIZE:2048MB} spring.servlet.multipart.max-request-size=${ACCEPTED_ARCHIVE_SIZE:2048MB} diff --git a/docker_compose/credit_tracker_config.env b/docker_compose/credit_tracker_config.env index 12dc807..11ab8ed 100644 --- a/docker_compose/credit_tracker_config.env +++ b/docker_compose/credit_tracker_config.env @@ -62,6 +62,19 @@ MAX_LIFETIME_SCORING=1800000 KEEPALIVE_TIME_SCORING=0 LEAK_DETECTION_THRESHOLD_SCORING=0 +# nbch +DB_URL_NBCH=jdbc:db2://10.230.227.102:2668/cprosd22:currentSchema=NBCH; +USERNAME_NBCH=ros9appl +PASSWORD_NBCH=R0s9Appl +MAXIMUM_POOL_SIZE_NBCH=30 +MINIMUM_IDLE_NBCH=10 +CONNECTION_TIMEOUT_NBCH=10000 +VALIDATION_TIMEOUT_NBCH=5000 +IDLE_TIMEOUT_NBCH=600000 +MAX_LIFETIME_NBCH=1800000 +KEEPALIVE_TIME_NBCH=0 +LEAK_DETECTION_THRESHOLD_NBCH=0 + # размер в mb ACCEPTED_XML_SIZE=1024 ACCEPTED_ARCHIVE_SIZE=2048MB diff --git a/docker_compose/docker-compose.yml b/docker_compose/docker-compose.yml index 67f5c4c..225a794 100644 --- a/docker_compose/docker-compose.yml +++ b/docker_compose/docker-compose.yml @@ -58,6 +58,17 @@ services: - MAX_LIFETIME_SCORING=${MAX_LIFETIME_SCORING} - KEEPALIVE_TIME_SCORING=${KEEPALIVE_TIME_SCORING} - LEAK_DETECTION_THRESHOLD_SCORING=${LEAK_DETECTION_THRESHOLD_SCORING} + - DB_URL_NBCH=${DB_URL_NBCH} + - USERNAME_NBCH=${USERNAME_NBCH} + - PASSWORD_NBCH=${PASSWORD_NBCH} + - MAXIMUM_POOL_SIZE_NBCH=${MAXIMUM_POOL_SIZE_NBCH} + - MINIMUM_IDLE_NBCH=${MINIMUM_IDLE_NBCH} + - CONNECTION_TIMEOUT_NBCH=${CONNECTION_TIMEOUT_NBCH} + - VALIDATION_TIMEOUT_NBCH=${VALIDATION_TIMEOUT_NBCH} + - IDLE_TIMEOUT_NBCH=${IDLE_TIMEOUT_NBCH} + - MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH} + - KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH} + - LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_NBCH} - ACCEPTED_XML_SIZE=${ACCEPTED_XML_SIZE} - ACCEPTED_ARCHIVE_SIZE=${ACCEPTED_ARCHIVE_SIZE} - SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI} @@ -142,6 +153,17 @@ services: - MAX_LIFETIME_SCORING=${MAX_LIFETIME_SCORING} - KEEPALIVE_TIME_SCORING=${KEEPALIVE_TIME_SCORING} - LEAK_DETECTION_THRESHOLD_SCORING=${LEAK_DETECTION_THRESHOLD_SCORING} + - DB_URL_NBCH=${DB_URL_NBCH} + - USERNAME_NBCH=${USERNAME_NBCH} + - PASSWORD_NBCH=${PASSWORD_NBCH} + - MAXIMUM_POOL_SIZE_NBCH=${MAXIMUM_POOL_SIZE_NBCH} + - MINIMUM_IDLE_NBCH=${MINIMUM_IDLE_NBCH} + - CONNECTION_TIMEOUT_NBCH=${CONNECTION_TIMEOUT_NBCH} + - VALIDATION_TIMEOUT_NBCH=${VALIDATION_TIMEOUT_NBCH} + - IDLE_TIMEOUT_NBCH=${IDLE_TIMEOUT_NBCH} + - MAX_LIFETIME_NBCH=${MAX_LIFETIME_NBCH} + - KEEPALIVE_TIME_NBCH=${KEEPALIVE_TIME_NBCH} + - LEAK_DETECTION_THRESHOLD_NBCH=${LEAK_DETECTION_THRESHOLD_NBCH} - SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI} - SIGNALS_TOKEN=${SIGNALS_TOKEN} - SIGNALS_USER=${SIGNALS_USER} diff --git a/src/main/java/ru/nbch/credit_tracker/config/datasource/NbchDataSourceConfig.java b/src/main/java/ru/nbch/credit_tracker/config/datasource/NbchDataSourceConfig.java new file mode 100644 index 0000000..73681a2 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/config/datasource/NbchDataSourceConfig.java @@ -0,0 +1,61 @@ +package ru.nbch.credit_tracker.config.datasource; + +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; +import ru.nbch.credit_tracker.config.settings.DataSourceSettings; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; + +@Slf4j +@Configuration +@MapperScan( + basePackages = "ru.nbch.credit_tracker.mapper.nbch", + sqlSessionFactoryRef = "sqlSessionNbch" +) +public class NbchDataSourceConfig extends DatabaseConfig { + @Value("classpath:mybatis/mapper/nbch/*.xml") + private Resource[] resources; + + @Bean(name = "nbchDataSource") + public DataSource dataSource(CreditTrackerSettings config) throws SQLException { + DataSourceSettings signalSetings = config.getNbchDataSourceSettings(); + + HikariDataSource dataSource = createDataSource(signalSetings); + dataSource.setMaximumPoolSize(signalSetings.maximumPoolSize()); + dataSource.setMinimumIdle(signalSetings.minimumIdle()); + dataSource.setConnectionTimeout(signalSetings.connectionTimeout()); + dataSource.setValidationTimeout(signalSetings.validationTimeout()); + dataSource.setIdleTimeout(signalSetings.idleTimeout()); + dataSource.setMaxLifetime(signalSetings.maxLifetime()); + dataSource.setKeepaliveTime(signalSetings.keepaliveTime()); + dataSource.setLeakDetectionThreshold(signalSetings.leakDetectionThreshold()); + + try (Connection connection = dataSource.getConnection()) { + connection.isValid(3); + } catch (SQLException e) { + log.error("Unable to connect to NBCH url={}", signalSetings.url(), e); + throw e; + } + log.info("Connected to NBCH: url={}", signalSetings.url()); + return dataSource; + } + + @Bean(name = "sqlSessionNbch") + public SqlSessionFactory sqlSessionFactory(@Qualifier("nbchDataSource") DataSource dataSource) throws Exception { + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSource); + sqlSessionFactoryBean.setMapperLocations(resources); + return sqlSessionFactoryBean.getObject(); + } +} diff --git a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java index 320fb2f..80a202e 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java +++ b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java @@ -20,6 +20,8 @@ public class CreditTrackerSettings { @NestedConfigurationProperty private DataSourceSettings scoringDataSourceSettings; @NestedConfigurationProperty + private DataSourceSettings nbchDataSourceSettings; + @NestedConfigurationProperty private XsdValidation xsdValidation; @NestedConfigurationProperty private PipelineSettings pipeline; diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/nbch/SourceMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/nbch/SourceMapper.java new file mode 100644 index 0000000..2c7e1d9 --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/nbch/SourceMapper.java @@ -0,0 +1,12 @@ +package ru.nbch.credit_tracker.mapper.nbch; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface SourceMapper { + + List findBusCategories(@Param("memberCodes") List memberCodes); +} diff --git a/src/main/resources/mybatis/mapper/nbch/SourceMapper.xml b/src/main/resources/mybatis/mapper/nbch/SourceMapper.xml new file mode 100644 index 0000000..717edf6 --- /dev/null +++ b/src/main/resources/mybatis/mapper/nbch/SourceMapper.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file