CUBRID JDBC 버전 변경

CUBRID 오류 대비 commit, rollback, connection close 로직 추가
main
icksishu@gmail.com 2 months ago
parent 5de747008e
commit a93cdd68b8

@ -5,7 +5,7 @@ plugins {
} }
group = 'com.bsmlab.dfx' group = 'com.bsmlab.dfx'
version = '1.0.7' version = '1.0.8'
// git commit hash -> application.yml // git commit hash -> application.yml
def gitCommitId = '' def gitCommitId = ''
@ -59,7 +59,7 @@ dependencies {
implementation 'com.oracle.database.jdbc:ojdbc11' implementation 'com.oracle.database.jdbc:ojdbc11'
implementation 'com.oracle.ojdbc:orai18n:19.3.0.0' implementation 'com.oracle.ojdbc:orai18n:19.3.0.0'
implementation 'org.mariadb.jdbc:mariadb-java-client' implementation 'org.mariadb.jdbc:mariadb-java-client'
implementation 'cubrid:cubrid-jdbc:11.3.0.0047' implementation 'cubrid:cubrid-jdbc:11.2.1.0040'
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16' implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-starter-test'

@ -46,6 +46,8 @@ public class DynamicDataSourceService {
} }
else if(cubrid.jdbc.driver.CUBRIDDriver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) { else if(cubrid.jdbc.driver.CUBRIDDriver.class.getCanonicalName().equals(dataSourceConfig.getDriverClassName())) {
dataSource.setValidationQuery("SELECT 1 FROM DB_ROOT"); dataSource.setValidationQuery("SELECT 1 FROM DB_ROOT");
dataSource.setValidationQueryTimeout(Duration.ofMillis(3));
dataSource.setDurationBetweenEvictionRuns(Duration.ofMillis(60000));
} }
dataSource.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy"); dataSource.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
dataSource.setSoftMinEvictableIdle(Duration.ofSeconds(30)); dataSource.setSoftMinEvictableIdle(Duration.ofSeconds(30));
@ -84,9 +86,9 @@ public class DynamicDataSourceService {
boolean connected = false; boolean connected = false;
try { try {
if(connection.getMetaData().getDriverName().contains("cubrid") || connection.getMetaData().getDriverName().contains("CUBRID")) { if(connection.getMetaData().getDriverName().contains("cubrid") || connection.getMetaData().getDriverName().contains("CUBRID")) {
// SELECT 1 FROM DB_ROOT
Statement statement = connection.createStatement(); Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT 1 FROM DB_ROOT"); ResultSet resultSet = statement.executeQuery("SELECT 1 FROM DB_ROOT");
resultSet.next();
int result = resultSet.getInt(1); int result = resultSet.getInt(1);
if(result == 1) { if(result == 1) {
connected = true; connected = true;
@ -94,7 +96,6 @@ public class DynamicDataSourceService {
else { else {
connected = false; connected = false;
} }
} }
else { else {
connected = connection.isValid(1); connected = connection.isValid(1);

@ -11,6 +11,8 @@ import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -54,37 +56,77 @@ public class SqlExecuteService {
dataSourceConfig = config; dataSourceConfig = config;
} }
} }
Map<String, Object> parameter = null;
int maximumRowForTransaction = dataSourceConfig == null ? 1000 : dataSourceConfig.getMaximumRowForTransaction(); int maximumRowForTransaction = dataSourceConfig == null ? 1000 : dataSourceConfig.getMaximumRowForTransaction();
DataSourceTransactionManager transactionManager = dynamicDataSourceService.getTransactionManager(dataSourceId);
DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition);
Connection connection = null;
if(parameterList.size() > maximumRowForTransaction) { if(parameterList.size() > maximumRowForTransaction) {
try(SqlSession sqlSession = dynamicDataSourceService.getSqlSession(dataSourceId)) { try(SqlSession sqlSession = dynamicDataSourceService.getSqlSession(dataSourceId)) {
connection = sqlSession.getConnection();
for(int i = 0; i < parameterList.size(); i++) { for(int i = 0; i < parameterList.size(); i++) {
Map<String, Object> parameter = parameterList.get(i); parameter = parameterList.get(i);
sqlSession.insert(sqlId, parameter); sqlSession.insert(sqlId, parameter);
resultParameterList.add(parameter); resultParameterList.add(parameter);
} }
return resultParameterList; transactionManager.commit(transactionStatus);
}
catch(RuntimeException e) {
log.error("dataSourceId: {}, sqlId: {}, parameters: {}", dataSourceId, sqlId, parameter, e);
try {
transactionManager.rollback(transactionStatus);
}
catch (RuntimeException ex) {
log.warn("Rollback failed", ex);
}
if(connection != null) {
try {
connection.close();
} catch (SQLException ex) {
log.warn("Failed to close connection after error", ex);
}
}
throw e;
} }
finally { finally {
dynamicRoutingDataSource.clearDataSource(); dynamicRoutingDataSource.clearDataSource();
} }
} }
else { else {
DataSourceTransactionManager transactionManager = dynamicDataSourceService.getTransactionManager(dataSourceId);
DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus transactionStatus = transactionManager.getTransaction(defaultTransactionDefinition);
try(SqlSession sqlSession = dynamicDataSourceService.getSqlSession(dataSourceId)) { try(SqlSession sqlSession = dynamicDataSourceService.getSqlSession(dataSourceId)) {
connection = sqlSession.getConnection();
for(int i = 0; i < parameterList.size(); i++) { for(int i = 0; i < parameterList.size(); i++) {
Map<String, Object> parameter = parameterList.get(i); parameter = parameterList.get(i);
sqlSession.insert(sqlId, parameter); sqlSession.insert(sqlId, parameter);
resultParameterList.add(parameter); resultParameterList.add(parameter);
} }
transactionManager.commit(transactionStatus); transactionManager.commit(transactionStatus);
return resultParameterList; return resultParameterList;
} }
catch(RuntimeException e) {
log.error("dataSourceId: {}, sqlId: {}, parameters: {}", dataSourceId, sqlId, parameter, e);
try {
transactionManager.rollback(transactionStatus);
}
catch (RuntimeException ex) {
log.warn("Rollback failed", ex);
}
if(connection != null) {
try {
connection.close();
}
catch (SQLException ex) {
log.warn("Failed to close connection after error", ex);
}
}
throw e;
}
finally { finally {
dynamicRoutingDataSource.clearDataSource(); dynamicRoutingDataSource.clearDataSource();
} }
} }
return resultParameterList;
} }
public int update(String dataSourceId, String sqlId, Map<String, Object> parameter) { public int update(String dataSourceId, String sqlId, Map<String, Object> parameter) {

Loading…
Cancel
Save