Multi DBMS 설정 기능 개선

This commit is contained in:
dsjang 2024-08-07 05:51:49 +09:00
parent 2477085a37
commit b517754d01
20 changed files with 976 additions and 36 deletions

View File

@ -43,6 +43,13 @@ dependencies {
implementation 'org.jdom:jdom2:2.0.6.1'
// https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2
implementation 'org.apache.commons:commons-configuration2:2.10.1'
// https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11
implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '23.5.0.24.07'
// https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
implementation group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '12.8.0.jre11'
// https://mvnrepository.com/artifact/org.postgresql/postgresql
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
}
tasks.named('test') {

View File

@ -1,7 +1,6 @@
package com.munjaon.client.config;
import com.zaxxer.hikari.HikariDataSource;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.configuration2.ex.ConfigurationException;
@ -11,7 +10,6 @@ import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@ -28,6 +26,7 @@ import javax.sql.DataSource;
@EnableTransactionManagement
@MapperScan(basePackages= "com.munjaon.client.**.mapper")
public class DataSourceConfig {
//public class DataSourceConfig implements BeanDefinitionRegistryPostProcessor {
@Autowired
private ApplicationContext applicationContext;
private final ServerConfig serverConfig;
@ -51,12 +50,15 @@ public class DataSourceConfig {
@Primary
@Bean(name = "factory")
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
String dbms = serverConfig.getString("DB.DBMS");
System.out.println("dbms : " + dbms);
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setVfs(SpringBootVFS.class);
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setTypeAliasesPackage("com.munjaon.client.**.dto");
sqlSessionFactory.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/sqlmap/**/*.xml"));
// sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/sqlmap/" + dbms.toLowerCase() + "/*.xml"));
return sqlSessionFactory.getObject();
}
@ -65,4 +67,22 @@ public class DataSourceConfig {
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
// @Override
// public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
// String dbms = null;
// try {
// dbms = serverConfig.getString("DB.DBMS");
// } catch (ConfigurationException e) {
// throw new RuntimeException(e);
// }
// AbstractBeanDefinition mapperScannerConfigurer = BeanDefinitionBuilder
// .genericBeanDefinition(MapperScannerConfigurer.class)
// .addPropertyValue("sqlSessionFactoryBeanName", "factory")
// .addPropertyValue("basePackage", "com.munjaon.client.**.dto")
// .addPropertyValue("annotationClass", MapperType.value(dbms).getClass())
// .getBeanDefinition();
//
// registry.registerBeanDefinition("MapperScanner", mapperScannerConfigurer);
// }
}

View File

@ -13,14 +13,14 @@ import java.util.List;
@Service
@RequiredArgsConstructor
public class MariaDBService {
private final MariaDBMapper mariaDBMapper;
private final MariaDBMapper deliverBMapper;
public boolean checkTableExists() {
boolean isExist = false;
try {
int msgCount = mariaDBMapper.checkTableForMessage();
int logCount = mariaDBMapper.checkTableForLog();
if (msgCount > 0 && logCount > 0) {
int msgCount = deliverBMapper.checkTableForMessage();
int logCount = deliverBMapper.checkTableForLog();
if (msgCount >= 0 && logCount >= 0) {
isExist = true;
}
} catch (Exception e) {
@ -30,25 +30,25 @@ public class MariaDBService {
return isExist;
}
public List<MunjaonMsg> selectToDeliver(String msgType) {
return mariaDBMapper.selectToDeliver(msgType);
return deliverBMapper.selectToDeliver(msgType);
}
public int updateToDeliver(String msgId) {
return mariaDBMapper.updateToDeliver(msgId);
return deliverBMapper.updateToDeliver(msgId);
}
public int updateToReport(MunjaonMsg params) {
return mariaDBMapper.updateToReport(params);
return deliverBMapper.updateToReport(params);
}
public List<MunjaonMsg> selectToMove() {
return mariaDBMapper.selectToMove();
return deliverBMapper.selectToMove();
}
public List<MunjaonMsg> selectToExpire(String expireTime) {
return mariaDBMapper.selectToExpire(expireTime);
return deliverBMapper.selectToExpire(expireTime);
}
public int insertToLog(String msgId) {
return mariaDBMapper.insertToLog(msgId);
return deliverBMapper.insertToLog(msgId);
}
public int deleteFromDeliver(String msgId) {
return mariaDBMapper.deleteFromDeliver(msgId);
return deliverBMapper.deleteFromDeliver(msgId);
}
@Transactional

View File

@ -0,0 +1,20 @@
package com.munjaon.client.mssql.mapper;
import com.munjaon.client.model.MunjaonMsg;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MssqlMapper {
String checkTime();
int checkTableForMessage();
int checkTableForLog();
List<MunjaonMsg> selectToDeliver(String msgType);
int updateToDeliver(String msgId);
int updateToReport(MunjaonMsg params);
List<MunjaonMsg> selectToMove();
List<MunjaonMsg> selectToExpire(String expireTime);
int insertToLog(String msgId);
int deleteFromDeliver(String msgId);
}

View File

@ -0,0 +1,66 @@
package com.munjaon.client.mssql.service;
import com.munjaon.client.model.MunjaonMsg;
import com.munjaon.client.mssql.mapper.MssqlMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class MssqlService {
private final MssqlMapper deliverBMapper;
public boolean checkTableExists() {
boolean isExist = false;
try {
int msgCount = deliverBMapper.checkTableForMessage();
int logCount = deliverBMapper.checkTableForLog();
if (msgCount >= 0 && logCount >= 0) {
isExist = true;
}
} catch (Exception e) {
log.error("Check table exists error : {}", e);
}
return isExist;
}
public List<MunjaonMsg> selectToDeliver(String msgType) {
return deliverBMapper.selectToDeliver(msgType);
}
public int updateToDeliver(String msgId) {
return deliverBMapper.updateToDeliver(msgId);
}
public int updateToReport(MunjaonMsg params) {
return deliverBMapper.updateToReport(params);
}
public List<MunjaonMsg> selectToMove() {
return deliverBMapper.selectToMove();
}
public List<MunjaonMsg> selectToExpire(String expireTime) {
return deliverBMapper.selectToExpire(expireTime);
}
public int insertToLog(String msgId) {
return deliverBMapper.insertToLog(msgId);
}
public int deleteFromDeliver(String msgId) {
return deliverBMapper.deleteFromDeliver(msgId);
}
@Transactional
public void moveToDeliver() {
List<MunjaonMsg> list = selectToMove();
if (list == null || list.size() == 0) {
return;
}
log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
for (MunjaonMsg msg : list) {
insertToLog(msg.getMsgId());
deleteFromDeliver(msg.getMsgId());
}
}
}

View File

@ -0,0 +1,20 @@
package com.munjaon.client.mysql.mapper;
import com.munjaon.client.model.MunjaonMsg;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface MysqlMapper {
String checkTime();
int checkTableForMessage();
int checkTableForLog();
List<MunjaonMsg> selectToDeliver(String msgType);
int updateToDeliver(String msgId);
int updateToReport(MunjaonMsg params);
List<MunjaonMsg> selectToMove();
List<MunjaonMsg> selectToExpire(String expireTime);
int insertToLog(String msgId);
int deleteFromDeliver(String msgId);
}

View File

@ -1,11 +1,66 @@
package com.munjaon.client.mysql.service;
import com.munjaon.client.model.MunjaonMsg;
import com.munjaon.client.mysql.mapper.MysqlMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class MysqlService {
private final MysqlMapper deliverBMapper;
public boolean checkTableExists() {
boolean isExist = false;
try {
int msgCount = deliverBMapper.checkTableForMessage();
int logCount = deliverBMapper.checkTableForLog();
if (msgCount >= 0 && logCount >= 0) {
isExist = true;
}
} catch (Exception e) {
log.error("Check table exists error : {}", e);
}
return isExist;
}
public List<MunjaonMsg> selectToDeliver(String msgType) {
return deliverBMapper.selectToDeliver(msgType);
}
public int updateToDeliver(String msgId) {
return deliverBMapper.updateToDeliver(msgId);
}
public int updateToReport(MunjaonMsg params) {
return deliverBMapper.updateToReport(params);
}
public List<MunjaonMsg> selectToMove() {
return deliverBMapper.selectToMove();
}
public List<MunjaonMsg> selectToExpire(String expireTime) {
return deliverBMapper.selectToExpire(expireTime);
}
public int insertToLog(String msgId) {
return deliverBMapper.insertToLog(msgId);
}
public int deleteFromDeliver(String msgId) {
return deliverBMapper.deleteFromDeliver(msgId);
}
@Transactional
public void moveToDeliver() {
List<MunjaonMsg> list = selectToMove();
if (list == null || list.size() == 0) {
return;
}
log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
for (MunjaonMsg msg : list) {
insertToLog(msg.getMsgId());
deleteFromDeliver(msg.getMsgId());
}
}
}

View File

@ -0,0 +1,20 @@
package com.munjaon.client.oracle.mapper;
import com.munjaon.client.model.MunjaonMsg;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface OracleMapper {
String checkTime();
int checkTableForMessage();
int checkTableForLog();
List<MunjaonMsg> selectToDeliver(String msgType);
int updateToDeliver(String msgId);
int updateToReport(MunjaonMsg params);
List<MunjaonMsg> selectToMove();
List<MunjaonMsg> selectToExpire(String expireTime);
int insertToLog(String msgId);
int deleteFromDeliver(String msgId);
}

View File

@ -0,0 +1,66 @@
package com.munjaon.client.oracle.service;
import com.munjaon.client.model.MunjaonMsg;
import com.munjaon.client.oracle.mapper.OracleMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class OracleService {
private final OracleMapper deliverBMapper;
public boolean checkTableExists() {
boolean isExist = false;
try {
int msgCount = deliverBMapper.checkTableForMessage();
int logCount = deliverBMapper.checkTableForLog();
if (msgCount >= 0 && logCount >= 0) {
isExist = true;
}
} catch (Exception e) {
log.error("Check table exists error : {}", e);
}
return isExist;
}
public List<MunjaonMsg> selectToDeliver(String msgType) {
return deliverBMapper.selectToDeliver(msgType);
}
public int updateToDeliver(String msgId) {
return deliverBMapper.updateToDeliver(msgId);
}
public int updateToReport(MunjaonMsg params) {
return deliverBMapper.updateToReport(params);
}
public List<MunjaonMsg> selectToMove() {
return deliverBMapper.selectToMove();
}
public List<MunjaonMsg> selectToExpire(String expireTime) {
return deliverBMapper.selectToExpire(expireTime);
}
public int insertToLog(String msgId) {
return deliverBMapper.insertToLog(msgId);
}
public int deleteFromDeliver(String msgId) {
return deliverBMapper.deleteFromDeliver(msgId);
}
@Transactional
public void moveToDeliver() {
List<MunjaonMsg> list = selectToMove();
if (list == null || list.size() == 0) {
return;
}
log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
for (MunjaonMsg msg : list) {
insertToLog(msg.getMsgId());
deleteFromDeliver(msg.getMsgId());
}
}
}

View File

@ -0,0 +1,20 @@
package com.munjaon.client.postgresql.mapper;
import com.munjaon.client.model.MunjaonMsg;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface PostgresqlMapper {
String checkTime();
int checkTableForMessage();
int checkTableForLog();
List<MunjaonMsg> selectToDeliver(String msgType);
int updateToDeliver(String msgId);
int updateToReport(MunjaonMsg params);
List<MunjaonMsg> selectToMove();
List<MunjaonMsg> selectToExpire(String expireTime);
int insertToLog(String msgId);
int deleteFromDeliver(String msgId);
}

View File

@ -0,0 +1,66 @@
package com.munjaon.client.postgresql.service;
import com.munjaon.client.model.MunjaonMsg;
import com.munjaon.client.postgresql.mapper.PostgresqlMapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Slf4j
@Service
@RequiredArgsConstructor
public class PostgresqlService {
private final PostgresqlMapper deliverBMapper;
public boolean checkTableExists() {
boolean isExist = false;
try {
int msgCount = deliverBMapper.checkTableForMessage();
int logCount = deliverBMapper.checkTableForLog();
if (msgCount >= 0 && logCount >= 0) {
isExist = true;
}
} catch (Exception e) {
log.error("Check table exists error : {}", e);
}
return isExist;
}
public List<MunjaonMsg> selectToDeliver(String msgType) {
return deliverBMapper.selectToDeliver(msgType);
}
public int updateToDeliver(String msgId) {
return deliverBMapper.updateToDeliver(msgId);
}
public int updateToReport(MunjaonMsg params) {
return deliverBMapper.updateToReport(params);
}
public List<MunjaonMsg> selectToMove() {
return deliverBMapper.selectToMove();
}
public List<MunjaonMsg> selectToExpire(String expireTime) {
return deliverBMapper.selectToExpire(expireTime);
}
public int insertToLog(String msgId) {
return deliverBMapper.insertToLog(msgId);
}
public int deleteFromDeliver(String msgId) {
return deliverBMapper.deleteFromDeliver(msgId);
}
@Transactional
public void moveToDeliver() {
List<MunjaonMsg> list = selectToMove();
if (list == null || list.size() == 0) {
return;
}
log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
for (MunjaonMsg msg : list) {
insertToLog(msg.getMsgId());
deleteFromDeliver(msg.getMsgId());
}
}
}

View File

@ -13,7 +13,6 @@ import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import java.nio.file.Files;
import java.util.List;
public class CollectClientService extends Service {

View File

@ -5,6 +5,9 @@ import lombok.Getter;
@Getter
public enum DatabaseService {
MARIADB_SERVICE,
MSSQL_SERVICE,
ORACLE_SERVICE,
POSTGRESQL_SERVICE,
MYSQL_SERVICE;
private Object service;

View File

@ -1,7 +1,10 @@
package com.munjaon.client.service;
import com.munjaon.client.mariadb.service.MariaDBService;
import com.munjaon.client.mssql.service.MssqlService;
import com.munjaon.client.mysql.service.MysqlService;
import com.munjaon.client.oracle.service.OracleService;
import com.munjaon.client.postgresql.service.PostgresqlService;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -13,7 +16,13 @@ public class DatabaseServiceInjector {
@Autowired
private MariaDBService mariaDBService;
@Autowired
private MssqlService mssqlService;
@Autowired
private MysqlService mysqlService;
@Autowired
private OracleService oracleService;
@Autowired
private PostgresqlService postgresqlService;
@PostConstruct
public void postConstruct() {
@ -21,8 +30,14 @@ public class DatabaseServiceInjector {
switch (svc) {
case MARIADB_SERVICE: svc.setService(mariaDBService);
break;
case MSSQL_SERVICE: svc.setService(mssqlService);
break;
case MYSQL_SERVICE: svc.setService(mysqlService);
break;
case ORACLE_SERVICE: svc.setService(oracleService);
break;
case POSTGRESQL_SERVICE : svc.setService(postgresqlService);
break;
default: break;
}
}

View File

@ -2,6 +2,10 @@ package com.munjaon.client.service;
import com.munjaon.client.mariadb.service.MariaDBService;
import com.munjaon.client.model.MunjaonMsg;
import com.munjaon.client.mssql.service.MssqlService;
import com.munjaon.client.mysql.service.MysqlService;
import com.munjaon.client.oracle.service.OracleService;
import com.munjaon.client.postgresql.service.PostgresqlService;
import lombok.Getter;
import java.util.EnumSet;
@ -64,50 +68,224 @@ public enum DatabaseTypeWorker {
mariaDBService.moveToDeliver();
}
},
TYPE_OF_MYSQL("MYSQL") {
TYPE_OF_ORACLE("ORACLE") {
@Override
public boolean checkTableExists() {
return false;
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.checkTableExists();
}
@Override
public List<MunjaonMsg> selectToDeliver(String msgType) {
return List.of();
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.selectToDeliver(msgType);
}
@Override
public int updateToDeliver(String msgId) {
return 0;
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.updateToDeliver(msgId);
}
@Override
public int updateToReport(MunjaonMsg params) {
return 0;
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.updateToReport(params);
}
@Override
public List<MunjaonMsg> selectToMove() {
return List.of();
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.selectToMove();
}
@Override
public List<MunjaonMsg> selectToExpire(String expireTime) {
return List.of();
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.selectToExpire(expireTime);
}
@Override
public int insertToLog(String msgId) {
return 0;
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.insertToLog(msgId);
}
@Override
public int deleteFromDeliver(String msgId) {
return 0;
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
return oracleService.deleteFromDeliver(msgId);
}
@Override
public void moveToDeliver() {
OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
oracleService.moveToDeliver();
}
},
TYPE_OF_MSSQL("MSSQL") {
@Override
public boolean checkTableExists() {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.checkTableExists();
}
@Override
public List<MunjaonMsg> selectToDeliver(String msgType) {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.selectToDeliver(msgType);
}
@Override
public int updateToDeliver(String msgId) {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.updateToDeliver(msgId);
}
@Override
public int updateToReport(MunjaonMsg params) {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.updateToReport(params);
}
@Override
public List<MunjaonMsg> selectToMove() {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.selectToMove();
}
@Override
public List<MunjaonMsg> selectToExpire(String expireTime) {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.selectToExpire(expireTime);
}
@Override
public int insertToLog(String msgId) {
MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
return mssqlService.insertToLog(msgId);
}
@Override
public int deleteFromDeliver(String msgId) {
MssqlService mssqlService = (MssqlService) DatabaseService.ORACLE_SERVICE.getService();
return mssqlService.deleteFromDeliver(msgId);
}
@Override
public void moveToDeliver() {
MssqlService oracleService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
oracleService.moveToDeliver();
}
},
TYPE_OF_POSTGRESQL("POSTGRESQL") {
@Override
public boolean checkTableExists() {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.checkTableExists();
}
@Override
public List<MunjaonMsg> selectToDeliver(String msgType) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.selectToDeliver(msgType);
}
@Override
public int updateToDeliver(String msgId) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.updateToDeliver(msgId);
}
@Override
public int updateToReport(MunjaonMsg params) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.updateToReport(params);
}
@Override
public List<MunjaonMsg> selectToMove() {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.selectToMove();
}
@Override
public List<MunjaonMsg> selectToExpire(String expireTime) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.selectToExpire(expireTime);
}
@Override
public int insertToLog(String msgId) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.insertToLog(msgId);
}
@Override
public int deleteFromDeliver(String msgId) {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
return postgresqlService.deleteFromDeliver(msgId);
}
@Override
public void moveToDeliver() {
PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
postgresqlService.moveToDeliver();
}
},
TYPE_OF_MYSQL("MYSQL") {
@Override
public boolean checkTableExists() {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.checkTableExists();
}
@Override
public List<MunjaonMsg> selectToDeliver(String msgType) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.selectToDeliver(msgType);
}
@Override
public int updateToDeliver(String msgId) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.updateToDeliver(msgId);
}
@Override
public int updateToReport(MunjaonMsg params) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.updateToReport(params);
}
@Override
public List<MunjaonMsg> selectToMove() {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.selectToMove();
}
@Override
public List<MunjaonMsg> selectToExpire(String expireTime) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.selectToExpire(expireTime);
}
@Override
public int insertToLog(String msgId) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.insertToLog(msgId);
}
@Override
public int deleteFromDeliver(String msgId) {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
return mysqlService.deleteFromDeliver(msgId);
}
@Override
public void moveToDeliver() {
MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
mysqlService.moveToDeliver();
}
};

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.munjaon.client.mssql.mapper.MssqlMapper">
<select id="checkTime" resultType="String">
/* MariaDBMapper.checkTime */
SELECT GETDATE()
</select>
<select id="checkTableForMessage" resultType="int">
/* MariaDBMapper.checkTableForMessage */
-- SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
<![CDATA[
SELECT TOP 1 COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1
]]>
</select>
<select id="checkTableForLog" resultType="int">
/* MariaDBMapper.checkTableForLog */
<![CDATA[
SELECT TOP 1 COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1
]]>
</select>
<select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToDeliver */
<![CDATA[
SELECT
TOP 100
MSG_ID
, MSG_TYPE
, REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),REQUEST_DATE,120),'-',''),' ',''),':','') RESERVE_DATE
, REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120),'-',''),' ',''),':','') REQUEST_DATE
, RECV_PHONE
, SEND_PHONE
, SUBJECT
, MESSAGE
, FILENAME01
, FILENAME02
, FILENAME03
, KAKAO_SENDER_KEY
, KAKAO_TEMPLATE_CODE
, KAKAO_JSON_FILE
FROM MUNJAON_MSG
WHERE SEND_STATUS = '0'
AND MSG_TYPE = #{msgType}
AND REQUEST_DATE <= GETDATE()
ORDER BY REQUEST_DATE ASC
]]>
</select>
<update id="updateToDeliver">
/* MariaDBMapper.updateToDeliver */
UPDATE MUNJAON_MSG SET
SEND_STATUS = '1'
, DELIVER_DATE = GETDATE()
WHERE MSG_ID = #{msgId}
</update>
<update id="updateToReport">
/* MariaDBMapper.updateToReport */
UPDATE MUNJAON_MSG SET
SEND_STATUS = #{sendStatus}
, SENT_DATE = CAST(#{sendDate} AS DATETIME)
, REPORT_DATE = SYSDATE
, TELECOM = #{telecom}
WHERE MSG_ID = #{msgId}
</update>
<select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToMove */
<![CDATA[
SELECT TOP 100
MSG_ID, CONVERT(VARCHAR(6),REQUEST_DATE,112) REQUEST_DATE
FROM MUNJAON_MSG
WHERE SEND_STATUS NOT IN ('0', '1')
]]>
</select>
<select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToExpire */
<![CDATA[
SELECT TOP 100
MSG_ID, CONVERT(VARCHAR(6),REQUEST_DATE,112) REQUEST_DATE
FROM MUNJAON_MSG
WHERE REQUEST_DATE < CAST(#{expireTime} AS DATETIME)
AND SEND_STATUS = '1'
]]>
</select>
<insert id="insertToLog">
/* MariaDBMapper.insertToLog */
INSERT INTO MUNJAON_MSG_LOG
(
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
)
SELECT
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</insert>
<delete id="deleteFromDeliver">
/* MariaDBMapper.deleteFromDeliver */
DELETE FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</delete>
</mapper>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.munjaon.client.mysql.mapper.MysqlMapper">
<select id="checkTime" resultType="String">
/* MariaDBMapper.checkTime */
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
</select>
<select id="checkTableForMessage" resultType="int">
/* MariaDBMapper.checkTableForMessage */
-- SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
SELECT COUNT(*)
FROM information_schema.tables
WHERE TABLE_NAME = 'MUNJAON_MSG'
</select>
<select id="checkTableForLog" resultType="int">
/* MariaDBMapper.checkTableForLog */
SELECT COUNT(*)
FROM information_schema.tables
WHERE TABLE_NAME = 'MUNJAON_MSG_LOG'
-- SELECT 1 FROM MUNJAON_MSG_LOG WHERE 1=1 LIMIT 1
</select>
<select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToDeliver */
SELECT
MSG_ID
, MSG_TYPE
, DATE_FORMAT(REQUEST_DATE,'%Y%m%d%H%i%s') RESERVE_DATE
, DATE_FORMAT(NOW(),'%Y%m%d%H%i%s') REQUEST_DATE
, RECV_PHONE
, SEND_PHONE
, SUBJECT
, MESSAGE
, FILENAME01
, FILENAME02
, FILENAME03
, KAKAO_SENDER_KEY
, KAKAO_TEMPLATE_CODE
, KAKAO_JSON_FILE
FROM MUNJAON_MSG
WHERE SEND_STATUS = '0'
AND MSG_TYPE = #{msgType}
AND REQUEST_DATE <![CDATA[<=]]> SYSDATE()
ORDER BY REQUEST_DATE ASC
LIMIT 100
</select>
<update id="updateToDeliver">
/* MariaDBMapper.updateToDeliver */
UPDATE MUNJAON_MSG SET
SEND_STATUS = '1'
, DELIVER_DATE = NOW()
WHERE MSG_ID = #{msgId}
</update>
<update id="updateToReport">
/* MariaDBMapper.updateToReport */
UPDATE MUNJAON_MSG SET
SEND_STATUS = #{sendStatus}
, SENT_DATE = FROM_UNIXTIME(UNIX_TIMESTAMP(#{sendDate}))
, REPORT_DATE = NOW()
, TELECOM = #{telecom}
WHERE MSG_ID = #{msgId}
</update>
<select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToMove */
SELECT MSG_ID, DATE_FORMAT(REQUEST_DATE, '%Y%m') REQUEST_DATE
FROM MUNJAON_MSG
WHERE SEND_STATUS NOT IN ('0', '1')
LIMIT 100
</select>
<select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToExpire */
SELECT MSG_ID, DATE_FORMAT(REQUEST_DATE, '%Y%m') REQUEST_DATE
FROM MUNJAON_MSG
WHERE REQUEST_DATE <![CDATA[<]]> FROM_UNIXTIME(UNIX_TIMESTAMP(#{expireTime}))
AND SEND_STATUS = '1'
LIMIT 100
</select>
<insert id="insertToLog">
/* MariaDBMapper.insertToLog */
INSERT INTO MUNJAON_MSG_LOG
(
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
)
SELECT
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</insert>
<delete id="deleteFromDeliver">
/* MariaDBMapper.deleteFromDeliver */
DELETE FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</delete>
</mapper>

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.munjaon.client.oracle.mapper.OracleMapper">
<select id="checkTime" resultType="String">
/* MariaDBMapper.checkTime */
SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL
</select>
<select id="checkTableForMessage" resultType="int">
/* MariaDBMapper.checkTableForMessage */
-- SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
<![CDATA[
SELECT COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1 AND rownum <= 1
]]>
</select>
<select id="checkTableForLog" resultType="int">
/* MariaDBMapper.checkTableForLog */
<![CDATA[
SELECT COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1 AND rownum <= 1
]]>
</select>
<select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToDeliver */
<![CDATA[
SELECT
MSG_ID
, MSG_TYPE
, TO_CHAR(REQUEST_DATE,'YYYYMMDDHH24MISS') RESERVE_DATE
, TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') REQUEST_DATE
, RECV_PHONE
, SEND_PHONE
, SUBJECT
, MESSAGE
, FILENAME01
, FILENAME02
, FILENAME03
, KAKAO_SENDER_KEY
, KAKAO_TEMPLATE_CODE
, KAKAO_JSON_FILE
FROM MUNJAON_MSG
WHERE SEND_STATUS = '0'
AND MSG_TYPE = #{msgType}
AND REQUEST_DATE <= SYSDATE
AND ROWNUM <= 100
ORDER BY REQUEST_DATE ASC
]]>
</select>
<update id="updateToDeliver">
/* MariaDBMapper.updateToDeliver */
UPDATE MUNJAON_MSG SET
SEND_STATUS = '1'
, DELIVER_DATE = SYSDATE
WHERE MSG_ID = #{msgId}
</update>
<update id="updateToReport">
/* MariaDBMapper.updateToReport */
UPDATE MUNJAON_MSG SET
SEND_STATUS = #{sendStatus}
, SENT_DATE = TO_DATE(#{sendDate}, 'YYYYMMDDHH24MISS')
, REPORT_DATE = SYSDATE
, TELECOM = #{telecom}
WHERE MSG_ID = #{msgId}
</update>
<select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToMove */
<![CDATA[
SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
FROM MUNJAON_MSG
WHERE SEND_STATUS NOT IN ('0', '1')
AND ROWNUM <= 100
]]>
</select>
<select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToExpire */
<![CDATA[
SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
FROM MUNJAON_MSG
WHERE REQUEST_DATE < TO_DATE(#{expireTime}, 'YYYYMMDDHH24MISS')
AND SEND_STATUS = '1'
AND ROWNUM <= 100
]]>
</select>
<insert id="insertToLog">
/* MariaDBMapper.insertToLog */
INSERT INTO MUNJAON_MSG_LOG
(
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
)
SELECT
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</insert>
<delete id="deleteFromDeliver">
/* MariaDBMapper.deleteFromDeliver */
DELETE FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</delete>
</mapper>

View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.munjaon.client.postgresql.mapper.PostgresqlMapper">
<select id="checkTime" resultType="String">
/* MariaDBMapper.checkTime */
SELECT TO_CHAR(NOW(), 'YYYYMMDDHH24MISS') FROM DUAL
</select>
<select id="checkTableForMessage" resultType="int">
/* MariaDBMapper.checkTableForMessage */
SELECT COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
</select>
<select id="checkTableForLog" resultType="int">
/* MariaDBMapper.checkTableForLog */
SELECT COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1 LIMIT 1
</select>
<select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToDeliver */
<![CDATA[
SELECT
MSG_ID
, MSG_TYPE
, TO_CHAR(REQUEST_DATE,'YYYYMMDDHH24MISS') RESERVE_DATE
, TO_CHAR(NOW(),'YYYYMMDDHH24MISS') REQUEST_DATE
, RECV_PHONE
, SEND_PHONE
, SUBJECT
, MESSAGE
, FILENAME01
, FILENAME02
, FILENAME03
, KAKAO_SENDER_KEY
, KAKAO_TEMPLATE_CODE
, KAKAO_JSON_FILE
FROM MUNJAON_MSG
WHERE SEND_STATUS = '0'
AND MSG_TYPE = #{msgType}
AND REQUEST_DATE <= NOW()
ORDER BY REQUEST_DATE ASC
LIMIT 100
]]>
</select>
<update id="updateToDeliver">
/* MariaDBMapper.updateToDeliver */
UPDATE MUNJAON_MSG SET
SEND_STATUS = '1'
, DELIVER_DATE = NOW()
WHERE MSG_ID = #{msgId}
</update>
<update id="updateToReport">
/* MariaDBMapper.updateToReport */
UPDATE MUNJAON_MSG SET
SEND_STATUS = #{sendStatus}
, SENT_DATE = TO_DATE(#{sendDate}, 'YYYYMMDDHH24MISS')
, REPORT_DATE = SYSDATE
, TELECOM = #{telecom}
WHERE MSG_ID = #{msgId}
</update>
<select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToMove */
<![CDATA[
SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
FROM MUNJAON_MSG
WHERE SEND_STATUS NOT IN ('0', '1')
LIMIT 100
]]>
</select>
<select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
/* MariaDBMapper.selectToExpire */
<![CDATA[
SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
FROM MUNJAON_MSG
WHERE REQUEST_DATE < TO_DATE(#{expireTime}, 'YYYYMMDDHH24MISS')
AND SEND_STATUS = '1'
LIMIT 100
]]>
</select>
<insert id="insertToLog">
/* MariaDBMapper.insertToLog */
INSERT INTO MUNJAON_MSG_LOG
(
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
)
SELECT
MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</insert>
<delete id="deleteFromDeliver">
/* MariaDBMapper.deleteFromDeliver */
DELETE FROM MUNJAON_MSG
WHERE MSG_ID = #{msgId}
</delete>
</mapper>

View File

@ -1,13 +0,0 @@
package com.munjaon.client;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class MunjaonClientApplicationTests {
@Test
void contextLoads() {
}
}