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来操作数据库,必须通过以下步骤才能使用到数据库的事务,步骤如下:
- 获取连接 Connection con = DriverManager.getConnection()
- 开启事务con.setAutoCommit(true/false);
- 执行CRUD
- 提交事务/回滚事务 con.commit() / con.rollback();
- 关闭连接 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!