diff --git a/credit-tracker.properties b/credit-tracker.properties index a337a0e..e8ab0cb 100644 --- a/credit-tracker.properties +++ b/credit-tracker.properties @@ -11,18 +11,42 @@ ct.indic-data-source-settings.driver=com.ibm.db2.jcc.DB2Driver ct.indic-data-source-settings.url=${DB_URL_INDIC:jdbc:db2://10.230.227.101:2668/cprosd22:currentSchema=INDIC;} ct.indic-data-source-settings.username=${USERNAME_INDIC:tester} ct.indic-data-source-settings.password=${PASSWORD_INDIC:tester} +ct.indic-data-source-settings.maximum-pool-size=${MAXIMUM_POOL_SIZE_INDIC:10} +ct.indic-data-source-settings.minimum-idle=${MINIMUM_IDLE_INDIC:10} +ct.indic-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_INDIC:10000} +ct.indic-data-source-settings.validation-timeout=${VALIDATION_TIMEOUT_INDIC:5000} +ct.indic-data-source-settings.idle-timeout=${IDLE_TIMEOUT_INDIC:600000} +ct.indic-data-source-settings.max-lifetime=${MAX_LIFETIME_INDIC:1800000} +ct.indic-data-source-settings.keepalive-time=${KEEPALIVE_TIME_INDIC:0} +ct.indic-data-source-settings.leak-detection-threshold=${DETECTION_THRESHOLD_INDIC:0} # signal ct.signal-data-source-settings.driver=org.postgresql.Driver ct.signal-data-source-settings.url=${DB_URL_SIGNAL:jdbc:postgresql://10.200.200.133:5432/credit_tracker} ct.signal-data-source-settings.username=${USERNAME_SIGNAL:credit_tracker_user} ct.signal-data-source-settings.password=${PASSWORD_SIGNAL:-} +ct.signal-data-source-settings.maximum-pool-size=${MAXIMUM_POOL_SIZE_SIGNAL:10} +ct.signal-data-source-settings.minimum-idle=${MINIMUM_IDLE_SIGNAL:10} +ct.signal-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_SIGNAL:10000} +ct.signal-data-source-settings.validation-timeout=${VALIDATION_TIMEOUT_SIGNAL:5000} +ct.signal-data-source-settings.idle-timeout=${IDLE_TIMEOUT_SIGNAL:600000} +ct.signal-data-source-settings.max-lifetime=${MAX_LIFETIME_SIGNAL:1800000} +ct.signal-data-source-settings.keepalive-time=${KEEPALIVE_TIME_SIGNAL:0} +ct.signal-data-source-settings.leak-detection-threshold=${DETECTION_THRESHOLD_SIGNAL:0} # scoring ct.scoring-data-source-settings.driver=com.ibm.db2.jcc.DB2Driver ct.scoring-data-source-settings.url=${DB_URL_SCORING:jdbc:db2://10.230.227.101:2668/cprosd22:currentSchema=TEST_2_INDIC;} ct.scoring-data-source-settings.username=${USERNAME_SCORING:tester} ct.scoring-data-source-settings.password=${PASSWORD_SCORING:tester} +ct.scoring-data-source-settings.maximum-pool-size=${MAXIMUM_POOL_SIZE_SCORING:10} +ct.scoring-data-source-settings.minimum-idle=${MINIMUM_IDLE_SCORING:10} +ct.scoring-data-source-settings.connection-timeout=${CONNECTION_TIMEOUT_SCORING:10000} +ct.scoring-data-source-settings.validation-timeout=${VALIDATION_TIMEOUT_SCORING:5000} +ct.scoring-data-source-settings.idle-timeout=${IDLE_TIMEOUT_SCORING:600000} +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=${DETECTION_THRESHOLD_SCORING:0} ct.max_xml_file_size=${ACCEPTED_XML_SIZE:1024} spring.servlet.multipart.max-file-size=${ACCEPTED_ARCHIVE_SIZE:2048MB} diff --git a/docker_compose/credit_tracker_config.env b/docker_compose/credit_tracker_config.env index b395b4f..437d729 100644 --- a/docker_compose/credit_tracker_config.env +++ b/docker_compose/credit_tracker_config.env @@ -24,16 +24,41 @@ SERVER_PORT=8099 DB_URL_INDIC=jdbc:db2://10.230.227.101:2668/cprosd22:currentSchema=INDIC; USERNAME_INDIC=tester PASSWORD_INDIC=tester +MAXIMUM_POOL_SIZE_INDIC=10 +MINIMUM_IDLE_INDIC=10 +CONNECTION_TIMEOUT_INDIC=10000 +VALIDATION_TIMEOUT_INDIC=5000 +IDLE_TIMEOUT_INDIC=600000 +MAX_LIFETIME_INDIC=1800000 +KEEPALIVE_TIME_INDIC=0 +DETECTION_THRESHOLD_INDIC=0 + # signal DB_URL_SIGNAL=jdbc:postgresql://10.200.200.133:5432/credit_tracker USERNAME_SIGNAL=credit_tracker_user PASSWORD_SIGNAL= +MAXIMUM_POOL_SIZE_SIGNAL=10 +MINIMUM_IDLE_SIGNAL=10 +CONNECTION_TIMEOUT_SIGNAL=10000 +VALIDATION_TIMEOUT_SIGNAL=5000 +IDLE_TIMEOUT_SIGNAL=600000 +MAX_LIFETIME_SIGNAL=1800000 +KEEPALIVE_TIME_SIGNAL=0 +DETECTION_THRESHOLD_SIGNAL=0 # scoring DB_URL_SCORING=jdbc:db2://10.230.227.101:2668/cprosd22:currentSchema=TEST_2_INDIC; USERNAME_SCORING=tester PASSWORD_SCORING=tester +MAXIMUM_POOL_SIZE_SCORING=10 +MINIMUM_IDLE_SCORING=10 +CONNECTION_TIMEOUT_SCORING=10000 +VALIDATION_TIMEOUT_SCORING=5000 +IDLE_TIMEOUT_SCORING=600000 +MAX_LIFETIME_SCORING=1800000 +KEEPALIVE_TIME_SCORING=0 +DETECTION_THRESHOLD_SCORING=0 # размер в mb ACCEPTED_XML_SIZE=1024 diff --git a/docker_compose/docker-compose.yml b/docker_compose/docker-compose.yml index 1b06547..1c069df 100644 --- a/docker_compose/docker-compose.yml +++ b/docker_compose/docker-compose.yml @@ -23,12 +23,36 @@ services: - DB_URL_INDIC=${DB_URL_INDIC} - USERNAME_INDIC=${USERNAME_INDIC} - PASSWORD_INDIC=${PASSWORD_INDIC} + - MAXIMUM_POOL_SIZE_INDIC=${MAXIMUM_POOL_SIZE_INDIC} + - MINIMUM_IDLE_INDIC=${MINIMUM_IDLE_INDIC} + - CONNECTION_TIMEOUT_INDIC=${CONNECTION_TIMEOUT_INDIC} + - VALIDATION_TIMEOUT_INDIC=${VALIDATION_TIMEOUT_INDIC} + - IDLE_TIMEOUT_INDIC=${IDLE_TIMEOUT_INDIC} + - MAX_LIFETIME_INDIC=${MAX_LIFETIME_INDIC} + - KEEPALIVE_TIME_INDIC=${KEEPALIVE_TIME_INDIC} + - DETECTION_THRESHOLD_INDIC=${DETECTION_THRESHOLD_INDIC} - DB_URL_SIGNAL=${DB_URL_SIGNAL} - USERNAME_SIGNAL=${USERNAME_SIGNAL} - PASSWORD_SIGNAL=${PASSWORD_SIGNAL} + - MAXIMUM_POOL_SIZE_SIGNAL=${MAXIMUM_POOL_SIZE_SIGNAL} + - MINIMUM_IDLE_SIGNAL=${MINIMUM_IDLE_SIGNAL} + - CONNECTION_TIMEOUT_SIGNAL=${CONNECTION_TIMEOUT_SIGNAL} + - VALIDATION_TIMEOUT_SIGNAL=${VALIDATION_TIMEOUT_SIGNAL} + - IDLE_TIMEOUT_SIGNAL=${IDLE_TIMEOUT_SIGNAL} + - MAX_LIFETIME_SIGNAL=${MAX_LIFETIME_SIGNAL} + - KEEPALIVE_TIME_SIGNAL=${KEEPALIVE_TIME_SIGNAL} + - DETECTION_THRESHOLD_SIGNAL=${DETECTION_THRESHOLD_SIGNAL} - DB_URL_SCORING=${DB_URL_SCORING} - USERNAME_SCORING=${USERNAME_SCORING} - PASSWORD_SCORING=${PASSWORD_SCORING} + - MAXIMUM_POOL_SIZE_SCORING=${MAXIMUM_POOL_SIZE_SCORING} + - MINIMUM_IDLE_SCORING=${MINIMUM_IDLE_SCORING} + - CONNECTION_TIMEOUT_SCORING=${CONNECTION_TIMEOUT_SCORING} + - VALIDATION_TIMEOUT_SCORING=${VALIDATION_TIMEOUT_SCORING} + - IDLE_TIMEOUT_SCORING=${IDLE_TIMEOUT_SCORING} + - MAX_LIFETIME_SCORING=${MAX_LIFETIME_SCORING} + - KEEPALIVE_TIME_SCORING=${KEEPALIVE_TIME_SCORING} + - DETECTION_THRESHOLD_SCORING=${DETECTION_THRESHOLD_SCORING} - ACCEPTED_XML_SIZE=${ACCEPTED_XML_SIZE} - ACCEPTED_ARCHIVE_SIZE=${ACCEPTED_ARCHIVE_SIZE} - SIGNALS_ROOT_URI=${SIGNALS_ROOT_URI} diff --git a/src/main/java/ru/nbch/credit_tracker/config/datasource/DatabaseConfig.java b/src/main/java/ru/nbch/credit_tracker/config/datasource/DatabaseConfig.java index dafc1a7..e75ce61 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/datasource/DatabaseConfig.java +++ b/src/main/java/ru/nbch/credit_tracker/config/datasource/DatabaseConfig.java @@ -1,18 +1,18 @@ package ru.nbch.credit_tracker.config.datasource; +import com.zaxxer.hikari.HikariDataSource; import org.springframework.boot.jdbc.DataSourceBuilder; import ru.nbch.credit_tracker.config.settings.DataSourceSettings; -import javax.sql.DataSource; - public class DatabaseConfig { - protected DataSource createDataSource(DataSourceSettings settings) { + protected HikariDataSource createDataSource(DataSourceSettings settings) { return DataSourceBuilder.create() .driverClassName(settings.driver()) .url(settings.url()) .username(settings.username()) .password(settings.password()) + .type(HikariDataSource.class) .build(); } diff --git a/src/main/java/ru/nbch/credit_tracker/config/datasource/IndicDataSourceConfig.java b/src/main/java/ru/nbch/credit_tracker/config/datasource/IndicDataSourceConfig.java index e83429b..cc2afc7 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/datasource/IndicDataSourceConfig.java +++ b/src/main/java/ru/nbch/credit_tracker/config/datasource/IndicDataSourceConfig.java @@ -1,5 +1,6 @@ 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; @@ -10,6 +11,7 @@ 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; @@ -28,14 +30,25 @@ public class IndicDataSourceConfig extends DatabaseConfig { @Bean(name = "indicDataSource") public DataSource dataSource(CreditTrackerSettings config) throws SQLException { - DataSource dataSource = createDataSource(config.getIndicDataSourceSettings()); + DataSourceSettings indicSetings = config.getIndicDataSourceSettings(); + + HikariDataSource dataSource = createDataSource(indicSetings); + dataSource.setMaximumPoolSize(indicSetings.maximumPoolSize()); + dataSource.setMinimumIdle(indicSetings.minimumIdle()); + dataSource.setConnectionTimeout(indicSetings.connectionTimeout()); + dataSource.setValidationTimeout(indicSetings.validationTimeout()); + dataSource.setIdleTimeout(indicSetings.idleTimeout()); + dataSource.setMaxLifetime(indicSetings.maxLifetime()); + dataSource.setKeepaliveTime(indicSetings.keepaliveTime()); + dataSource.setLeakDetectionThreshold(indicSetings.leakDetectionThreshold()); + try (Connection connection = dataSource.getConnection()) { connection.isValid(3); } catch (SQLException e) { - log.error("Unable to connect to Indic url={}", config.getIndicDataSourceSettings().url(), e); + log.error("Unable to connect to Indic url={}", indicSetings.url(), e); throw e; } - log.info("Connected to Indic: url={}", config.getIndicDataSourceSettings().url()); + log.info("Connected to Indic: url={}", indicSetings.url()); return dataSource; } diff --git a/src/main/java/ru/nbch/credit_tracker/config/datasource/ScoringDataSourceConfig.java b/src/main/java/ru/nbch/credit_tracker/config/datasource/ScoringDataSourceConfig.java index 8d9bbde..d65b590 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/datasource/ScoringDataSourceConfig.java +++ b/src/main/java/ru/nbch/credit_tracker/config/datasource/ScoringDataSourceConfig.java @@ -1,5 +1,6 @@ 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; @@ -10,6 +11,7 @@ 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; @@ -28,14 +30,25 @@ public class ScoringDataSourceConfig extends DatabaseConfig { @Bean(name = "scoringDataSource") public DataSource dataSource(CreditTrackerSettings config) throws SQLException { - DataSource dataSource = createDataSource(config.getScoringDataSourceSettings()); + DataSourceSettings scoringSetings = config.getScoringDataSourceSettings(); + + HikariDataSource dataSource = createDataSource(scoringSetings); + dataSource.setMaximumPoolSize(scoringSetings.maximumPoolSize()); + dataSource.setMinimumIdle(scoringSetings.minimumIdle()); + dataSource.setConnectionTimeout(scoringSetings.connectionTimeout()); + dataSource.setValidationTimeout(scoringSetings.validationTimeout()); + dataSource.setIdleTimeout(scoringSetings.idleTimeout()); + dataSource.setMaxLifetime(scoringSetings.maxLifetime()); + dataSource.setKeepaliveTime(scoringSetings.keepaliveTime()); + dataSource.setLeakDetectionThreshold(scoringSetings.leakDetectionThreshold()); + try (Connection connection = dataSource.getConnection()) { connection.isValid(3); } catch (SQLException e) { - log.error("Unable to connect to Scoring url={}", config.getScoringDataSourceSettings().url(), e); + log.error("Unable to connect to Scoring url={}", scoringSetings.url(), e); throw e; } - log.info("Connected to Scoring: url={}", config.getScoringDataSourceSettings().url()); + log.info("Connected to Scoring: url={}", scoringSetings.url()); return dataSource; } diff --git a/src/main/java/ru/nbch/credit_tracker/config/datasource/SignalDataSourceConfig.java b/src/main/java/ru/nbch/credit_tracker/config/datasource/SignalDataSourceConfig.java index c2e94c3..4e9167f 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/datasource/SignalDataSourceConfig.java +++ b/src/main/java/ru/nbch/credit_tracker/config/datasource/SignalDataSourceConfig.java @@ -1,5 +1,6 @@ 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; @@ -10,6 +11,7 @@ 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; @@ -27,14 +29,25 @@ public class SignalDataSourceConfig extends DatabaseConfig { @Bean(name = "signalDataSource") public DataSource dataSource(CreditTrackerSettings config) throws SQLException { - DataSource dataSource = createDataSource(config.getSignalDataSourceSettings()); + DataSourceSettings signalSetings = config.getSignalDataSourceSettings(); + + 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 Signal url={}", config.getSignalDataSourceSettings().url(), e); + log.error("Unable to connect to Signal url={}", signalSetings.url(), e); throw e; } - log.info("Connected to Signal: url={}", config.getSignalDataSourceSettings().url()); + log.info("Connected to Signal: url={}", signalSetings.url()); return dataSource; } diff --git a/src/main/java/ru/nbch/credit_tracker/config/settings/DataSourceSettings.java b/src/main/java/ru/nbch/credit_tracker/config/settings/DataSourceSettings.java index 101c08d..f283f23 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/settings/DataSourceSettings.java +++ b/src/main/java/ru/nbch/credit_tracker/config/settings/DataSourceSettings.java @@ -4,5 +4,13 @@ public record DataSourceSettings( String username, String password, String url, - String driver + String driver, + Integer maximumPoolSize, + Integer minimumIdle, + long connectionTimeout, + long validationTimeout, + long idleTimeout, + long maxLifetime, + long keepaliveTime, + long leakDetectionThreshold ) {} \ No newline at end of file