Commit 17de3fc7 by inrgihc

脚本执行增加事务

parent efc7844d
...@@ -26,11 +26,12 @@ import org.dromara.sqlrest.core.exec.annotation.Module; ...@@ -26,11 +26,12 @@ import org.dromara.sqlrest.core.exec.annotation.Module;
import org.dromara.sqlrest.core.exec.engine.AbstractExecutorEngine; import org.dromara.sqlrest.core.exec.engine.AbstractExecutorEngine;
import org.dromara.sqlrest.core.exec.module.CacheVarModule; import org.dromara.sqlrest.core.exec.module.CacheVarModule;
import org.dromara.sqlrest.core.exec.module.DbVarModule; import org.dromara.sqlrest.core.exec.module.DbVarModule;
import org.dromara.sqlrest.core.exec.module.LogVarModule;
import org.dromara.sqlrest.core.exec.module.DsVarModule; import org.dromara.sqlrest.core.exec.module.DsVarModule;
import org.dromara.sqlrest.core.exec.module.EnvVarModule; import org.dromara.sqlrest.core.exec.module.EnvVarModule;
import org.dromara.sqlrest.core.exec.module.HttpModule; import org.dromara.sqlrest.core.exec.module.HttpModule;
import org.dromara.sqlrest.core.exec.module.LogVarModule;
import org.dromara.sqlrest.core.exec.module.ReqVarModule; import org.dromara.sqlrest.core.exec.module.ReqVarModule;
import org.dromara.sqlrest.core.exec.module.TxVarModule;
import org.dromara.sqlrest.persistence.entity.ApiContextEntity; import org.dromara.sqlrest.persistence.entity.ApiContextEntity;
public class ScriptExecutorService extends AbstractExecutorEngine { public class ScriptExecutorService extends AbstractExecutorEngine {
...@@ -41,6 +42,7 @@ public class ScriptExecutorService extends AbstractExecutorEngine { ...@@ -41,6 +42,7 @@ public class ScriptExecutorService extends AbstractExecutorEngine {
HttpModule.class, HttpModule.class,
LogVarModule.class, LogVarModule.class,
DbVarModule.class, DbVarModule.class,
TxVarModule.class,
DsVarModule.class, DsVarModule.class,
ReqVarModule.class, ReqVarModule.class,
CacheVarModule.class); CacheVarModule.class);
......
...@@ -84,6 +84,9 @@ public class DbVarModule implements VarModuleInterface { ...@@ -84,6 +84,9 @@ public class DbVarModule implements VarModuleInterface {
} }
private Map<String, Object> build(Map<String, Object> row) { private Map<String, Object> build(Map<String, Object> row) {
if (null == row) {
return null;
}
return ConvertUtils.to(row, converter); return ConvertUtils.to(row, converter);
} }
...@@ -239,5 +242,11 @@ public class DbVarModule implements VarModuleInterface { ...@@ -239,5 +242,11 @@ public class DbVarModule implements VarModuleInterface {
DebugExecuteLogger.add(sqlMeta.getSql(), parameters, System.currentTimeMillis() - start); DebugExecuteLogger.add(sqlMeta.getSql(), parameters, System.currentTimeMillis() - start);
} }
} }
@Comment("开启事务")
public TxVarModule beginTx() {
return new TxVarModule(dataSource);
}
} }
// Copyright tang. All rights reserved.
// https://gitee.com/inrgihc/sqlrest
//
// Use of this source code is governed by a BSD-style license
//
// Author: tang (inrgihc@126.com)
// Date : 2024/3/31
// Location: beijing , china
/////////////////////////////////////////////////////////////
package org.dromara.sqlrest.core.exec.module;
import javax.sql.DataSource;
import org.dromara.sqlrest.common.service.VarModuleInterface;
import org.dromara.sqlrest.core.exec.annotation.Comment;
import org.dromara.sqlrest.core.exec.annotation.Module;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
@Module(TxVarModule.VAR_NAME)
public class TxVarModule implements VarModuleInterface {
protected static final String VAR_NAME = "tx";
private final TransactionDefinition transactionDefinition;
private final PlatformTransactionManager transactionManager;
private final TransactionStatus transactionStatus;
public TxVarModule(DataSource dataSource) {
this.transactionDefinition = getDefaultTransactionDefinition();
this.transactionManager = new DataSourceTransactionManager(dataSource);
this.transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition);
}
private TransactionDefinition getDefaultTransactionDefinition() {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
return definition;
}
@Override
public String getVarModuleName() {
return VAR_NAME;
}
@Comment("提交事务")
public void commit() {
this.transactionManager.commit(this.transactionStatus);
}
@Comment("回滚事务")
public void rollback() {
this.transactionManager.rollback(this.transactionStatus);
}
}
...@@ -23,6 +23,9 @@ public class ConvertUtils { ...@@ -23,6 +23,9 @@ public class ConvertUtils {
if (null == converter) { if (null == converter) {
return row; return row;
} }
if (null == row) {
return null;
}
Map<String, Object> ret = new LinkedHashMap<>(); Map<String, Object> ret = new LinkedHashMap<>();
row.forEach((key, val) -> ret.put(converter.apply(key), val)); row.forEach((key, val) -> ret.put(converter.apply(key), val));
return ret; return ret;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment