From c28ad05c6e39241813fcff399d83dbfd01a1ce45 Mon Sep 17 00:00:00 2001 From: etreschenkov Date: Tue, 27 Sep 2022 10:34:16 +0300 Subject: [PATCH] refactoring imdg settings --- .../imdg/config/DbConnectionConfig.java | 73 +++++++++++++++++++ .../imdg/config/HazelcastConfiguration.java | 7 +- .../DatabaseSettings.java} | 4 +- .../HazelcastServerSettings.java} | 8 +- .../config/{ => element}/ImdgSettings.java | 27 ++++--- .../main/resources/distr/bin/backend-api.sh | 2 +- 6 files changed, 98 insertions(+), 23 deletions(-) create mode 100644 clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{DatabaseConnectionElement.java => element/DatabaseSettings.java} (86%) rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{HazelcastServerElement.java => element/HazelcastServerSettings.java} (83%) rename clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/{ => element}/ImdgSettings.java (57%) diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java new file mode 100644 index 000000000..ef8328659 --- /dev/null +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DbConnectionConfig.java @@ -0,0 +1,73 @@ +package ru.spcex.clearing.imdg.config; + +import com.mchange.v2.c3p0.ComboPooledDataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.core.JdbcTemplate; +import ru.spcex.clearing.imdg.config.element.DatabaseSettings; +import ru.spcex.clearing.imdg.config.element.ImdgSettings; +import ru.spcex.clearing.imdg.error.ModuleInitializeException; + +import javax.sql.DataSource; +import java.sql.Connection; + +@SuppressWarnings("UnnecessaryLocalVariable") +@Configuration +public class DbConnectionConfig { + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + private final DatabaseSettings settings; + + public DbConnectionConfig(ImdgSettings settings) { + this.settings = settings.getDatabase(); + } + + @Bean + public DataSource dataSource() { + DataSource result; + String login = settings.getLogin(); + String password = settings.getPassword(); + String logTimeoutPart = ""; + String dbPath = settings.getUrl(); + int timeoutSec = 30; + + ComboPooledDataSource cpds = new ComboPooledDataSource(); + try { + cpds.setDriverClass("org.postgresql.Driver"); + } catch (Exception ue) { + throw new RuntimeException(ue); + } + cpds.setJdbcUrl(dbPath); + cpds.setUser(login); + cpds.setPassword(password); + cpds.setInitialPoolSize(10); + cpds.setMinPoolSize(10); + cpds.setMaxPoolSize(30); + int numHelperThreads = Runtime.getRuntime().availableProcessors() * 2; + cpds.setNumHelperThreads(numHelperThreads); + cpds.setCheckoutTimeout(timeoutSec * 1000); + logTimeoutPart = String.format(" (timeout=%ds)", timeoutSec); + result = cpds; + + String OPERATION_DATABASE_CONNECTION_CHECK = String.format("Database [%s] connection check", dbPath); + try { + Connection conn = result.getConnection(); + conn.close(); + log.info("{}: success", OPERATION_DATABASE_CONNECTION_CHECK); + return result; + } catch (Throwable e) { + String msg = String.format("%s%s: failed: %s -> %s", + OPERATION_DATABASE_CONNECTION_CHECK, logTimeoutPart, e.getClass().getSimpleName(), e.getMessage()); + log.error(msg); + throw new ModuleInitializeException(msg, e); + } + } + + @Bean + public JdbcTemplate jdbcTemplate(DataSource dataSource) { + JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); + return jdbcTemplate; + } +} diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java index 896cebed2..01f53add1 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastConfiguration.java @@ -6,6 +6,8 @@ import com.hazelcast.core.HazelcastInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import ru.spcex.clearing.imdg.config.element.HazelcastServerSettings; +import ru.spcex.clearing.imdg.config.element.ImdgSettings; import java.util.List; @@ -13,10 +15,11 @@ import java.util.List; public class HazelcastConfiguration { private final PoolMapConfigs poolMapConfigs; - private final HazelcastServerElement hzSettings; + private final HazelcastServerSettings hzSettings; @Autowired - public HazelcastConfiguration(PoolMapConfigs poolMapConfigs, ImdgSettings imdgSettings) { + public HazelcastConfiguration(PoolMapConfigs poolMapConfigs, + ImdgSettings imdgSettings) { this.poolMapConfigs = poolMapConfigs; this.hzSettings = imdgSettings.getHazelcast(); } diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java similarity index 86% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java index 274839a2c..670bfde03 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/DatabaseConnectionElement.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/DatabaseSettings.java @@ -1,6 +1,6 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; -public class DatabaseConnectionElement { +public class DatabaseSettings { private String login; private String password; private String url; diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java similarity index 83% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java index db267c74e..897d9a600 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/HazelcastServerElement.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/HazelcastServerSettings.java @@ -1,12 +1,12 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; import java.util.List; -public class HazelcastServerElement { +public class HazelcastServerSettings { private int listenPort = 5071; - private String login = "dev"; - private String password = "dev-pass"; + private String login; + private String password; private List clusterMembers; public int getListenPort() { diff --git a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java similarity index 57% rename from clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java rename to clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java index a178af9fb..95eae7658 100644 --- a/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/ImdgSettings.java +++ b/clearing-parent/imdg/src/main/java/ru/spcex/clearing/imdg/config/element/ImdgSettings.java @@ -1,4 +1,4 @@ -package ru.spcex.clearing.imdg.config; +package ru.spcex.clearing.imdg.config.element; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.PropertySource; @@ -8,23 +8,22 @@ import org.springframework.stereotype.Component; @PropertySource("file:${spring.config.location}/application.properties") @ConfigurationProperties("imdg") public class ImdgSettings { + private HazelcastServerSettings hazelcast; + private DatabaseSettings database; - private HazelcastServerElement hazelcast; - private DatabaseConnectionElement database; - - public DatabaseConnectionElement getDatabase() { - return database; - } - - public void setDatabase(DatabaseConnectionElement database) { - this.database = database; - } - - public HazelcastServerElement getHazelcast() { + public HazelcastServerSettings getHazelcast() { return hazelcast; } - public void setHazelcast(HazelcastServerElement hazelcast) { + public void setHazelcast(HazelcastServerSettings hazelcast) { this.hazelcast = hazelcast; } + + public DatabaseSettings getDatabase() { + return database; + } + + public void setDatabase(DatabaseSettings database) { + this.database = database; + } } diff --git a/z-distr/src/main/resources/distr/bin/backend-api.sh b/z-distr/src/main/resources/distr/bin/backend-api.sh index 8bbec107f..b6ed297ea 100644 --- a/z-distr/src/main/resources/distr/bin/backend-api.sh +++ b/z-distr/src/main/resources/distr/bin/backend-api.sh @@ -1,3 +1,3 @@ #!/bin/sh docker build -t backend-api:1.0.0 ../modules/backend-api/ -docker run -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 & \ No newline at end of file +docker run -d -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0 \ No newline at end of file