|
|
|
@ -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) {
|
|
|
|
|