From 8d07897e42601916f0848758863b9a45f849f8f1 Mon Sep 17 00:00:00 2001 From: Rinjae Date: Thu, 11 Sep 2025 16:38:50 +0900 Subject: [PATCH] =?UTF-8?q?adm/app=20=EA=B3=84=EC=A0=95=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=ED=95=98=EC=9D=B4=EB=B2=84=EB=84=A4=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/EmsDatasourceProperties.java | 1 + .../config/GatewayDataSourceProperties.java | 1 + .../config/PortalConfigGatewayDatasource.java | 79 ++++++++++++++----- .../config/PortalConfigPortalDatasource.java | 72 +++++++++++------ src/main/resources/application-gf63.yml | 10 ++- src/main/resources/application-stage.yml | 2 + src/main/resources/logback-spring.xml | 4 + 7 files changed, 122 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/eactive/apim/portal/config/EmsDatasourceProperties.java b/src/main/java/com/eactive/apim/portal/config/EmsDatasourceProperties.java index 511a5fb..4cde3f5 100644 --- a/src/main/java/com/eactive/apim/portal/config/EmsDatasourceProperties.java +++ b/src/main/java/com/eactive/apim/portal/config/EmsDatasourceProperties.java @@ -14,5 +14,6 @@ public class EmsDatasourceProperties { private String password; private String databaseName; private String serverName; + private String schema; private int portNumber; } diff --git a/src/main/java/com/eactive/apim/portal/config/GatewayDataSourceProperties.java b/src/main/java/com/eactive/apim/portal/config/GatewayDataSourceProperties.java index 8204387..f85eb1c 100644 --- a/src/main/java/com/eactive/apim/portal/config/GatewayDataSourceProperties.java +++ b/src/main/java/com/eactive/apim/portal/config/GatewayDataSourceProperties.java @@ -14,5 +14,6 @@ public class GatewayDataSourceProperties { private String password; private String databaseName; private String serverName; + private String schema; private int portNumber; } diff --git a/src/main/java/com/eactive/apim/portal/config/PortalConfigGatewayDatasource.java b/src/main/java/com/eactive/apim/portal/config/PortalConfigGatewayDatasource.java index f2f6b30..d857187 100644 --- a/src/main/java/com/eactive/apim/portal/config/PortalConfigGatewayDatasource.java +++ b/src/main/java/com/eactive/apim/portal/config/PortalConfigGatewayDatasource.java @@ -3,7 +3,12 @@ package com.eactive.apim.portal.config; import com.eactive.eai.data.jpa.BaseRepositoryImpl; import java.util.HashMap; import java.util.Properties; +import javax.annotation.PostConstruct; import javax.sql.DataSource; + +import com.zaxxer.hikari.HikariDataSource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; @@ -19,36 +24,71 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; repositoryBaseClass = BaseRepositoryImpl.class, entityManagerFactoryRef = "gatewayEntityManagerFactory") @EnableJpaAuditing(auditorAwareRef = "auditorProvider") +@Slf4j public class PortalConfigGatewayDatasource { @Autowired private GatewayDataSourceProperties gatewayDataSourceProperties; + + @PostConstruct + public void init() { + if (StringUtils.isEmpty(gatewayDataSourceProperties.getSchema())) { + log.error("Profile property 'schema' is empty. Please check your configuration."); + throw new IllegalArgumentException("GatewayDataSourceProperties schema is empty. Please check your configuration."); + } + } + + +// @Bean +// public DataSource gatewayDataSource() { +// AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); +// dataSource.setBeanName("gatewayDataSource"); +// dataSource.setUniqueResourceName("gatewayDataSource"); +// dataSource.setMinPoolSize(5); +// dataSource.setMaxPoolSize(10); +// dataSource.setMaxIdleTime(60); // seconds +// dataSource.setBorrowConnectionTimeout(30); // seconds +// dataSource.setTestQuery("SELECT 1 FROM DUAL"); +// dataSource.setMaintenanceInterval(60); +// dataSource.setXaDataSourceClassName("oracle.jdbc.xa.client.OracleXADataSource"); +// +// Properties xaProperties = new Properties(); +// String url = String.format("jdbc:oracle:thin:@//%s:%d/%s", +// gatewayDataSourceProperties.getServerName(), // HOST +// gatewayDataSourceProperties.getPortNumber(), // PORT +// gatewayDataSourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID +// // SID를 사용하는 경우: "jdbc:oracle:thin:@host:port:SID" +// +// xaProperties.setProperty("URL", url); +// xaProperties.setProperty("user", gatewayDataSourceProperties.getUsername()); +// xaProperties.setProperty("password", gatewayDataSourceProperties.getPassword()); +// +// dataSource.setXaProperties(xaProperties); +// return dataSource; +// } + @Bean public DataSource gatewayDataSource() { - AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); - dataSource.setBeanName("gatewayDataSource"); - dataSource.setUniqueResourceName("gatewayDataSource"); - dataSource.setMinPoolSize(5); - dataSource.setMaxPoolSize(10); - dataSource.setMaxIdleTime(60); // seconds - dataSource.setBorrowConnectionTimeout(30); // seconds - dataSource.setTestQuery("SELECT 1 FROM DUAL"); - dataSource.setMaintenanceInterval(60); - dataSource.setXaDataSourceClassName("oracle.jdbc.xa.client.OracleXADataSource"); + HikariDataSource dataSource = new HikariDataSource(); - Properties xaProperties = new Properties(); String url = String.format("jdbc:oracle:thin:@//%s:%d/%s", - gatewayDataSourceProperties.getServerName(), // HOST - gatewayDataSourceProperties.getPortNumber(), // PORT - gatewayDataSourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID - // SID를 사용하는 경우: "jdbc:oracle:thin:@host:port:SID" + gatewayDataSourceProperties.getServerName(), // HOST + gatewayDataSourceProperties.getPortNumber(), // PORT + gatewayDataSourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID - xaProperties.setProperty("URL", url); - xaProperties.setProperty("user", gatewayDataSourceProperties.getUsername()); - xaProperties.setProperty("password", gatewayDataSourceProperties.getPassword()); + dataSource.setJdbcUrl(url); + dataSource.setUsername(gatewayDataSourceProperties.getUsername()); + dataSource.setPassword(gatewayDataSourceProperties.getPassword()); + dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); + + // 커넥션 풀 세팅 + dataSource.setMinimumIdle(5); + dataSource.setMaximumPoolSize(10); + dataSource.setIdleTimeout(60000); // 60초 + dataSource.setConnectionTimeout(30000); // 30초 + dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL"); - dataSource.setXaProperties(xaProperties); return dataSource; } @@ -62,6 +102,7 @@ public class PortalConfigGatewayDatasource { properties.put("hibernate.connection.handling_mode", "DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION"); properties.put("hibernate.transaction.jta.platform", "org.hibernate.engine.transaction.jta.platform.internal.AtomikosJtaPlatform"); properties.put("hibernate.physical_naming_strategy", "com.eactive.apim.portal.common.entity.CustomPhysicalNamingStrategy"); + properties.put("hibernate.default_schema", gatewayDataSourceProperties.getSchema()); properties.put("javax.persistence.validation.mode", "none"); properties.put("javax.persistence.transactionType", "JTA"); diff --git a/src/main/java/com/eactive/apim/portal/config/PortalConfigPortalDatasource.java b/src/main/java/com/eactive/apim/portal/config/PortalConfigPortalDatasource.java index 46a50a9..265bd60 100644 --- a/src/main/java/com/eactive/apim/portal/config/PortalConfigPortalDatasource.java +++ b/src/main/java/com/eactive/apim/portal/config/PortalConfigPortalDatasource.java @@ -1,11 +1,12 @@ package com.eactive.apim.portal.config; import com.eactive.eai.data.jpa.BaseRepositoryImpl; +import com.zaxxer.hikari.HikariDataSource; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.jta.atomikos.AtomikosDataSourceBean; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -19,9 +20,7 @@ import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import javax.annotation.PostConstruct; import javax.sql.DataSource; -import java.util.Arrays; import java.util.HashMap; -import java.util.Properties; /** * @author Sungpil Hyun @@ -56,35 +55,59 @@ public class PortalConfigPortalDatasource { @PostConstruct public void checkProfile() { - log.warn("Active profiles: {}", Arrays.toString(env.getActiveProfiles())); + if (StringUtils.isEmpty(emsDatasourceProperties.getSchema())) { + log.error("Profile property 'schema' is empty. Please check your configuration."); + throw new IllegalArgumentException("'ems.datasource.schema' is not configured."); + } } - @Primary + @Primary @Bean public DataSource portalDataSource() { - AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); - dataSource.setBeanName("portalDataSource"); - dataSource.setUniqueResourceName("portalDataSource"); - dataSource.setMinPoolSize(5); - dataSource.setMaxPoolSize(10); - dataSource.setMaxIdleTime(60); // seconds - dataSource.setBorrowConnectionTimeout(30); // seconds - dataSource.setTestQuery("SELECT 1 FROM DUAL"); - dataSource.setMaintenanceInterval(60); - dataSource.setXaDataSourceClassName("oracle.jdbc.xa.client.OracleXADataSource"); +// AtomikosDataSourceBean dataSource = new AtomikosDataSourceBean(); +// dataSource.setBeanName("portalDataSource"); +// dataSource.setUniqueResourceName("portalDataSource"); +// dataSource.setMinPoolSize(5); +// dataSource.setMaxPoolSize(10); +// dataSource.setMaxIdleTime(60); // seconds +// dataSource.setBorrowConnectionTimeout(30); // seconds +// dataSource.setTestQuery("SELECT 1 FROM DUAL"); +// dataSource.setMaintenanceInterval(60); +// dataSource.setXaDataSourceClassName("oracle.jdbc.xa.client.OracleXADataSource"); +// +// Properties xaProperties = new Properties(); +// String url = String.format("jdbc:oracle:thin:@//%s:%d/%s", +// emsDatasourceProperties.getServerName(), // HOST +// emsDatasourceProperties.getPortNumber(), // PORT +// emsDatasourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID +// // SID를 사용하는 경우: "jdbc:oracle:thin:@host:port:SID" +// +// xaProperties.setProperty("URL", url); +// xaProperties.setProperty("user", emsDatasourceProperties.getUsername()); +// xaProperties.setProperty("password", emsDatasourceProperties.getPassword()); +// +// dataSource.setXaProperties(xaProperties); +// return dataSource; + + HikariDataSource dataSource = new HikariDataSource(); - Properties xaProperties = new Properties(); String url = String.format("jdbc:oracle:thin:@//%s:%d/%s", - emsDatasourceProperties.getServerName(), // HOST - emsDatasourceProperties.getPortNumber(), // PORT - emsDatasourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID - // SID를 사용하는 경우: "jdbc:oracle:thin:@host:port:SID" + emsDatasourceProperties.getServerName(), // HOST + emsDatasourceProperties.getPortNumber(), // PORT + emsDatasourceProperties.getDatabaseName()); // SERVICE_NAME 또는 SID - xaProperties.setProperty("URL", url); - xaProperties.setProperty("user", emsDatasourceProperties.getUsername()); - xaProperties.setProperty("password", emsDatasourceProperties.getPassword()); + dataSource.setJdbcUrl(url); + dataSource.setUsername(emsDatasourceProperties.getUsername()); + dataSource.setPassword(emsDatasourceProperties.getPassword()); + dataSource.setDriverClassName("oracle.jdbc.OracleDriver"); + + // 커넥션 풀 설정 + dataSource.setMinimumIdle(5); + dataSource.setMaximumPoolSize(10); + dataSource.setIdleTimeout(60000); // 60s + dataSource.setConnectionTimeout(30000); // 30s + dataSource.setConnectionTestQuery("SELECT 1 FROM DUAL"); - dataSource.setXaProperties(xaProperties); return dataSource; } @@ -106,6 +129,7 @@ public class PortalConfigPortalDatasource { properties.put("hibernate.show_sql", "true"); properties.put("hibernate.transaction.jta.platform", "org.hibernate.engine.transaction.jta.platform.internal.AtomikosJtaPlatform"); properties.put("hibernate.use_sql_comments", "true"); + properties.put("hibernate.default_schema", emsDatasourceProperties.getSchema()); properties.put("javax.persistence.validation.mode", "none"); properties.put("javax.persistence.transactionType", "JTA"); diff --git a/src/main/resources/application-gf63.yml b/src/main/resources/application-gf63.yml index f1c3975..2a8eeaf 100644 --- a/src/main/resources/application-gf63.yml +++ b/src/main/resources/application-gf63.yml @@ -20,16 +20,18 @@ ems: serverName: 192.168.240.177 portNumber: 1599 databaseName: DAPM - username: EMSADM - password: EMSADM123! + username: EMSAPP + password: EMSAPP123! + schema: EMSADM gateway: datasource: serverName: 192.168.240.177 portNumber: 1599 databaseName: DAPM - username: AGWADM - password: AGWADM123! + username: AGWAPP + password: AGWAPP123! + schema: AGWADM proxy: diff --git a/src/main/resources/application-stage.yml b/src/main/resources/application-stage.yml index 4484b34..5312d47 100644 --- a/src/main/resources/application-stage.yml +++ b/src/main/resources/application-stage.yml @@ -22,6 +22,7 @@ ems: databaseName: DAPM username: EMSAPP password: EMSAPP123! + schema: EMSADM gateway: datasource: @@ -30,6 +31,7 @@ gateway: databaseName: DAPM username: AGWAPP password: AGWAPP123! + schema: AGWADM #proxy: # targets: diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 18392b2..d075bcf 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -40,6 +40,10 @@ + + + +