事务简介:
事务管理是企业级应用程序开发中必不可少的技术,用来确保数据的完整性和一致性。
事务就是一系列的动作,它们被当做一个单独的工作单元。这些动作要么全部完成,要么全部不起作用。
事务的是四个关键属性(ACID):
- 原子性(atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
- 一致性(consistency):一旦所有事务动作完成,事务就被提交。数据和资源就处于一种满足业务的一致性状态中。
- 隔离性(isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
- 持久性(durablility):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。通常情况下,事务的结果都被写到持久化存储中。
传统事务与Spring事务管理器:
传统事务:
package com.dx.jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class JdbcAPITx { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); DataSource dataSource = (DataSource) ctx.getBean("dataSource"); Connection connection = null; try { connection = dataSource.getConnection(); connection.setAutoCommit(false); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select @@version;"); while (resultSet.next()) { String version = resultSet.getString(1); System.out.println(version); } connection.commit(); } catch (SQLException ex) { ex.printStackTrace(); if (connection != null) { try { connection.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } } throw new RuntimeException(ex); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e1) { e1.printStackTrace(); } } } System.out.println("Complete..."); } }