DB 검증 profile 추가
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
package com.eactive.apim.portal.spring;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.SmartInitializingSingleton;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
@Configuration
|
||||
@Profile("db_check")
|
||||
@Slf4j
|
||||
public class DatabaseSessionVerifier implements SmartInitializingSingleton {
|
||||
private final DataSource emsDataSource;
|
||||
|
||||
|
||||
public DatabaseSessionVerifier(DataSource emsDataSource) {
|
||||
this.emsDataSource = emsDataSource;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void afterSingletonsInstantiated() {
|
||||
log.info("DB 검증 작업 시작 - {}", now());
|
||||
log.info("---------------------------------------------------");
|
||||
|
||||
log.info("1. 커넥션 확인");
|
||||
try (Connection conn = emsDataSource.getConnection()) {
|
||||
try (PreparedStatement statement = conn.prepareStatement("select 1 from dual")) {
|
||||
ResultSet rs = statement.executeQuery();
|
||||
if (rs.next()) {
|
||||
log.info("DB 커넥션 확인됨");
|
||||
}
|
||||
}
|
||||
|
||||
log.info("\n2. Table 권한 확인 - {}", now());
|
||||
Map<String, Set<String>> grantTables = this.printTablePrivileges(conn);
|
||||
|
||||
|
||||
log.info("\n3. PTL_PROPERTY 테이블 확인 - {}", now());
|
||||
if (!grantTables.containsKey("PTL_PROPERTY")) {
|
||||
log.info("PTL_PROPERTY 테이블 확인 안됨. ROLE 재로딩 시도");
|
||||
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
stmt.execute("SET ROLE_RL_EMS_ALL");
|
||||
}
|
||||
|
||||
this.printTablePrivileges(conn);
|
||||
|
||||
throw new InterruptedException("DB 검증 실패로 강제 종료");
|
||||
} else {
|
||||
log.info("PTL_PROPERTY 테이블 확인 됨.");
|
||||
}
|
||||
|
||||
log.info("검증 작업 종료 - {}", now());
|
||||
} catch (Exception e) {
|
||||
log.error("DB 세션 검증 실패", e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private LinkedHashMap<String, Set<String>> printTablePrivileges(Connection conn) throws SQLException {
|
||||
LinkedHashMap<String, Set<String>> tables = new LinkedHashMap<>();
|
||||
|
||||
try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM ROLE_TAB_PRIVS WHERE role = ? ORDER BY table_name ASC")) {
|
||||
stmt.setString(1, "RL_EMS_ALL");
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
while(rs.next()) {
|
||||
Set<String> privileges;
|
||||
if (tables.containsKey(rs.getString("table_name"))) {
|
||||
privileges = tables.get(rs.getString("table_name"));
|
||||
} else {
|
||||
privileges = new LinkedHashSet<>();
|
||||
tables.put(rs.getString("table_name").toUpperCase(), privileges);
|
||||
}
|
||||
|
||||
privileges.add(rs.getString("privilege"));
|
||||
}
|
||||
|
||||
log.info("| Table | Privileges |");
|
||||
log.info("|---|---|");
|
||||
tables.forEach((key, value) -> log.info(String.format("| %-20s | %-36s |", key, value)));
|
||||
}
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
|
||||
private String now() {
|
||||
return LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
||||
}
|
||||
}
|
||||
@@ -35,6 +35,17 @@
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="FILE_REPORT" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/debug-report.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_PATH}/backup/debug-report.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="FILE"/>
|
||||
@@ -43,6 +54,7 @@
|
||||
|
||||
|
||||
<logger name="com.eactive.eapim" level="DEBUG" />
|
||||
<logger name="weblogic" level="INFO" />
|
||||
|
||||
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
|
||||
<appender-ref ref="FILE_HIBERNATE" />
|
||||
@@ -53,4 +65,7 @@
|
||||
<logger name="org.hibernate.engine.jdbc.spi.SqlExceptionHelper" additivity="false">
|
||||
<appender-ref ref="FILE_HIBERNATE" />
|
||||
</logger>
|
||||
<logger name="com.eactive.apim.portal.spring.DatabaseSessionVerifier" level="debug">
|
||||
<appender-ref ref="FILE_REPORT" />
|
||||
</logger>
|
||||
</configuration>
|
||||
@@ -27,6 +27,17 @@
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
<appender name="FILE_REPORT" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||
<file>${LOG_PATH}/report.log</file>
|
||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
||||
<fileNamePattern>${LOG_PATH}/backup/report.%d{yyyy-MM-dd}.log</fileNamePattern>
|
||||
<maxHistory>7</maxHistory>
|
||||
</rollingPolicy>
|
||||
<encoder>
|
||||
<pattern>%msg%n</pattern>
|
||||
</encoder>
|
||||
</appender>
|
||||
|
||||
|
||||
<root level="INFO">
|
||||
<appender-ref ref="FILE"/>
|
||||
@@ -45,5 +56,8 @@
|
||||
<logger name="org.hibernate.engine.jdbc.spi.SqlExceptionHelper" additivity="false">
|
||||
<appender-ref ref="FILE_HIBERNATE" />
|
||||
</logger>
|
||||
<logger name="com.eactive.apim.portal.spring.DatabaseSessionVerifier" level="debug">
|
||||
<appender-ref ref="FILE_REPORT" />
|
||||
</logger>
|
||||
|
||||
</configuration>
|
||||
Reference in New Issue
Block a user