diff --git "a/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/AOP.md" "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/AOP.md"
index b4b322113a..214dd5431b 100644
--- "a/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/AOP.md"
+++ "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/AOP.md"
@@ -119,169 +119,5 @@ public class ErrorPageAspect {
```
-# 事务
-## 属性
-
-- read-only:是否是只读事务。默认false,不只读。
-- isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
-- propagation:指定事务的传播行为。
-- timeout:指定超时时间。默认值为:-1。永不超时。
-- rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。没有默认值,任何异常都回滚。
-- no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,任何异常都回滚。
-
-## 使用xml进行配置
-
-- 声明式事务
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-```java
-public class Dao {
-
- private JdbcTemplate jdbcTemplate;
-
- public Dao(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
-
- public void transfer(){
- String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
- String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
- jdbcTemplate.update(sql);
- jdbcTemplate.update(sql1);
- }
-}
-```
-
-## 注解配置
-
-```java
-@Configuration
-@EnableTransactionManagement
-public class Config {
-
- @Bean
- public DataSource dataSource(){
- DriverManagerDataSource dataSource = new DriverManagerDataSource();
- dataSource.setUsername("root");
- dataSource.setPassword("123");
- dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
- dataSource.setUrl("jdbc:mysql:///mybatis");
- return dataSource;
- }
-
- @Bean
- public JdbcTemplate jdbcTemplate(DataSource dataSource){
- return new JdbcTemplate(dataSource);
- }
-
- @Bean
- public PlatformTransactionManager transactionManager(DataSource dataSource){
- return new DataSourceTransactionManager(dataSource);
- }
-}
-```
-
-```java
-@Service
-public class Dao {
-
- private JdbcTemplate jdbcTemplate;
-
- public Dao(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
-
- @Transactional(rollbackFor = Exception.class)
- public void transfer(){
- String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
- String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
-
- jdbcTemplate.update(sql);
- jdbcTemplate.update(sql1);
- }
-}
-```
-
-- 编程式事务
-
-```java
- @Bean
- public TransactionTemplate transactionTemplate(PlatformTransactionManager manager){
- return new TransactionTemplate(manager);
- }
-```
-
-```java
-@Service
-public class Dao {
-
- private JdbcTemplate jdbcTemplate;
-
- private TransactionTemplate transactionTemplate;
-
- public Dao(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
-
- public void transfer(){
- transactionTemplate.execute((TransactionCallback) status -> {
- String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
- String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
- jdbcTemplate.update(sql);
- jdbcTemplate.update(sql1);
- return null;
- });
- }
-
- @Autowired
- public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
- this.transactionTemplate = transactionTemplate;
- }
-}
-```
diff --git "a/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/nav.md" "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/nav.md"
index 41c8cc00c8..a8a0d521e0 100644
--- "a/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/nav.md"
+++ "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/nav.md"
@@ -4,6 +4,7 @@
- [装配Bean](./装配Bean.md)
- [高级装配](./高级装配.md)
- [AOP](./AOP.md)
+ - [事务](./事务.md)
- ## SpringMVC
diff --git "a/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/\344\272\213\345\212\241.md" "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/\344\272\213\345\212\241.md"
new file mode 100644
index 0000000000..af1cae794c
--- /dev/null
+++ "b/\345\220\216\347\253\257\345\274\200\345\217\221/\346\241\206\346\236\266/Spring/\344\272\213\345\212\241.md"
@@ -0,0 +1,184 @@
+# 事务
+
+## 属性
+
+- read-only:是否是只读事务。默认false,不只读。
+- isolation:指定事务的隔离级别。默认值是使用数据库的默认隔离级别。
+- propagation:指定事务的传播行为。
+- timeout:指定超时时间。默认值为:-1。永不超时。
+- rollback-for:用于指定一个异常,当执行产生该异常时,事务回滚。产生其他异常,事务不回滚。没有默认值,任何异常都回滚。
+- no-rollback-for:用于指定一个异常,当产生该异常时,事务不回滚,产生其他异常时,事务回滚。没有默认值,任何异常都回滚。
+
+### 传播行为
+
+- PROPAGATION_REQUIRED
+
+![](https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/images/tx_prop_required.png)
+
+简单来说就是两个被事务管理的方法都将在同一个事务内执行
+
+- PROPAGATION_REQUIRES_NEW
+
+![](https://docs.spring.io/spring/docs/5.2.1.RELEASE/spring-framework-reference/images/tx_prop_requires_new.png)
+
+而这个传播行为则是开启一个新事务
+
+- PROPAGATION_NESTED
+
+该传播行为则是与JDBC的保存点一样,它使用了物理事务的保存点的概念
+
+## 使用xml进行配置
+
+- 声明式事务
+ - 声明式事务都是基于编程事务
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```java
+public class Dao {
+
+ private JdbcTemplate jdbcTemplate;
+
+ public Dao(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ public void transfer(){
+ String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
+ String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
+ jdbcTemplate.update(sql);
+ jdbcTemplate.update(sql1);
+ }
+}
+```
+
+## 注解配置
+
+```java
+@Configuration
+@EnableTransactionManagement
+public class Config {
+
+ @Bean
+ public DataSource dataSource(){
+ DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setUsername("root");
+ dataSource.setPassword("123");
+ dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
+ dataSource.setUrl("jdbc:mysql:///mybatis");
+ return dataSource;
+ }
+
+ @Bean
+ public JdbcTemplate jdbcTemplate(DataSource dataSource){
+ return new JdbcTemplate(dataSource);
+ }
+
+ @Bean
+ public PlatformTransactionManager transactionManager(DataSource dataSource){
+ return new DataSourceTransactionManager(dataSource);
+ }
+}
+```
+
+```java
+@Service
+public class Dao {
+
+ private JdbcTemplate jdbcTemplate;
+
+ public Dao(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public void transfer(){
+ String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
+ String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
+
+ jdbcTemplate.update(sql);
+ jdbcTemplate.update(sql1);
+ }
+}
+```
+
+- 编程式事务
+
+```java
+@Bean
+public TransactionTemplate transactionTemplate(PlatformTransactionManager manager){
+ return new TransactionTemplate(manager);
+}
+```
+
+```java
+@Service
+public class Dao {
+
+ private JdbcTemplate jdbcTemplate;
+
+ private TransactionTemplate transactionTemplate;
+
+ public Dao(JdbcTemplate jdbcTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ }
+
+ public void transfer(){
+ transactionTemplate.execute((TransactionCallback) status -> {
+ String sql = "UPDATE account SET money = money -200 WHERE uid = 41";
+ String sql1 = "UPDATE account SET money = money +200 WHERE uid = 45";
+ jdbcTemplate.update(sql);
+ jdbcTemplate.update(sql1);
+ return null;
+ });
+ }
+
+ @Autowired
+ public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
+ this.transactionTemplate = transactionTemplate;
+ }
+}
+```
\ No newline at end of file