静态如何开启事务

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionException;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.beans.factory.annotation.Autowired;
 
public class MyService {
 
    @Autowired
    private PlatformTransactionManager transactionManager;

private static MyService utills;

@PostConstruct
public void init() {
    utills = this;
    utills.opShippingSpaceOrderMapper = this.opShippingSpaceOrderMapper;
    utills.opFinChargeDetailsMapper = this.opFinChargeDetailsMapper;
}

 
    public static void someStaticMethod() {
        // 静态方法内的事务逻辑
        TransactionDefinition def = new DefaultTransactionDefinition();
        TransactionStatus status = transactionManager.getTransaction(def);
        try {
            // 你的业务逻辑
 
            transactionManager.commit(status);
        } catch (RuntimeException e) {
            transactionManager.rollback(status);
            throw e;
        }
    }
}

### 配置MyBatis以开启和管理事务 #### 一、引入必要的依赖 为了在Spring Boot项目中使用MyBatis并进行事务管理,首先需要确保`pom.xml`文件中有如下依赖项。这一步骤是为了让应用程序能够识别MyBatis以及与数据库交互所需的MySQL驱动程序[^1]。 ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>版本号</version> </dependency> <!-- MySQL JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` #### 二、创建启动类 接着定义一个带有`@SpringBootApplication`注解的应用入口类,比如命名为`StartApp.java`。此类中的静态方法main作为应用的起点,通过调用`SpringApplication.run()`来启动整个Spring上下文环境[^2]。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class StartApp { public static void main(String[] args) { SpringApplication.run(StartApp.class, args); } } ``` #### 三、配置数据源及其连接池(可选) 对于想要自定义的数据源设置或是更换其他类型的连接池(而非默认的选择),可以在项目的`application.yml`或`.properties`文件里指定相应的参数。例如,如果选用的是Druid连接池,则需按照特定格式填写相关信息;如果不打算采用Druid,则可根据个人喜好调整为其他的连接池方案[^3]。 #### 四、启用全局事务支持 为了让业务逻辑层的方法具备自动化的事务处理能力,通常会在服务接口或者具体的服务实现类上方加上`@Transactional`注解。值得注意的是,只有当发生未被捕获的运行时异常(`RuntimeException`)或者其他非检查型异常的时候,才会触发事务回滚机制。而对于那些编译期就能发现错误的情况(即所谓的“受检异常”,如IOException等),除非特别指明要对其进行捕获并抛出新的不受检异常,否则不会引起事务的撤销行为[^4]。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override @Transactional public int addUser(User user){ try{ return userMapper.insert(user); }catch(Exception e){ throw new RuntimeException(e.getMessage()); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值