spring面试题—— 事务

2023-12-14 17:02:09

一:Spring事物是什么?

spring事务的本质是底层数据库对事务的支持,spring并不直接管理事物,而是提供了多种事务管理器,具体的实现由持久化框架自己来做。

二:Spring为什么需要事物?

add方法,功能是向数据库添加数据的操作,其中部分代码有问题,正常情况下不能向数据库成功插入数据,如果没有事物管理,会成功插入数据,如果有事物管理,不会成功插入数据

@Repository("userDao02")
public class UserDao {

@Autowired
private JdbcTemplate jdbcTemplate;

public void add(String name, String age) {
	String sql = "INSERT INTO caogang(NAME, age) VALUES(?,?);";
	int update = jdbcTemplate.update(sql, name, age);
	System.out.println("数据库添加user成功..insert:" + update);
}

public void add() {
	System.out.println("userDao002 add....");
   }
}

public void add() {
    System.out.println("添加用户开始...");
	userDao.add("ceshi","30");
	int j=1/0;
}

三:Spring事务做了什么?

jdbc来操作数据库,必须通过以下步骤才能使用到数据库的事务,步骤如下:

  1. 获取连接 Connection con = DriverManager.getConnection()
  2. 开启事务con.setAutoCommit(true/false);
  3. 执行CRUD
  4. 提交事务/回滚事务 con.commit() / con.rollback();
  5. 关闭连接 conn.close();

Spring的事务管理会自动帮我们完成上面的2和4的步骤,不再需要我们自己去手动开启和关闭

四:Spring中如何开启事务?

Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。
编程式事务:开发者在代码中手动的管理事务的开启、提交、回滚等操作。

@Component
public class TransactionUtils {

	@Autowired
	private DataSourceTransactionManager dataSourceTransactionManager;
	
	//开启事物(参数是事物的隔离级别)
	public TransactionStatus begin(){
		TransactionStatus transaction = dataSourceTransactionManager.getTransaction(new DefaultTransactionDefinition());
	    System.out.println("开启事物");
		return transaction;
	}
	//提交事物
   public void commit(TransactionStatus transaction){
	   dataSourceTransactionManager.commit(transaction);
	   System.out.println("提交事物");
   }
   //回滚事物
   public void rollback(TransactionStatus transaction){
	   dataSourceTransactionManager.rollback(transaction);
	   System.out.println("回滚事物");
   }
}

public void add() {
	TransactionStatus begin = null;
	try {
		begin = transactionUtils.begin();
		userDao.add("caogang2", "20");
		int i=1/0;
		transactionUtils.commit(begin);
	} catch (Exception e) {
		e.printStackTrace();
		transactionUtils.rollback(begin);
	}
}

如果很多方法都需要事物,自己在每个方法都去开启,提交,回滚,无意义的工作量很大,此时用aop的思想来解决,就会减少很多工作量
声明式事务

五:Spring事务失效可能是哪些原因?

六:Spring的事务传播机制有哪些?

文章来源:https://blog.csdn.net/weixin_44582492/article/details/134848077
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。