refactoring imdg settings

This commit is contained in:
etreschenkov 2022-09-27 10:34:16 +03:00
parent 7d55b4cb1b
commit c28ad05c6e
6 changed files with 98 additions and 23 deletions

View file

@ -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;
}
}

View file

@ -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();
}

View file

@ -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;

View file

@ -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<String> clusterMembers;
public int getListenPort() {

View file

@ -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;
}
}

View file

@ -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 &
docker run -d -p 8090:8080 -v /opt/clearing/logs:/opt/clearing/bin/logs backend-api:1.0.0