<commit_before>---
layout: post
title:  "spring transaction"
date:   2016-12-13
excerpt: "spring transaction管理流程"
tag:
- spring
- transaction
- datasource
comments: true
---

### spring事物管理流程

1. org.springframework.transaction.interceptor.TransactionAspectSupport.TransactionInfo 获取事物信息

2. org.springframework.transaction.support.AbstractPlatformTransactionManager#isExistingTransaction 判断当前线程已获取连接并且已开启事物

	* org.springframework.jdbc.datasource.JdbcTransactionObjectSupport#getConnectionHolder 获取连接holder

	* org.springframework.jdbc.datasource.ConnectionHolder#isTransactionActive 是否已开启事物

	* org.springframework.transaction.support.AbstractPlatformTransactionManager#handleExistingTransaction 当前线程已开启事物仍请求新事物处理方法

3. org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin 如果当前线程没有开启事物，则开启事务

	* org.springframework.jdbc.datasource.ConnectionHolder#setTransactionActive 设置当前线程所持有的连接已开启事物

4. org.springframework.transaction.support.AbstractPlatformTransactionManager#processCommit 判断transaction对象状态是否为new，即事物是否该由该transaction对象管理，如果为new，则提交或者回滚<commit_msg>modify<commit_after>---
layout: post
title:  "spring transaction"
date:   2016-12-13
excerpt: "spring transaction管理流程"
tag:
- spring
- transaction
- datasource
comments: true
---

### spring事务管理流程

1. org.springframework.transaction.interceptor.TransactionAspectSupport.TransactionInfo 获取事务信息

2. org.springframework.transaction.support.AbstractPlatformTransactionManager#isExistingTransaction 判断当前线程已获取连接并且已开启事务

	* org.springframework.jdbc.datasource.JdbcTransactionObjectSupport#getConnectionHolder 获取连接holder

	* org.springframework.jdbc.datasource.ConnectionHolder#isTransactionActive 是否已开启事务

	* org.springframework.transaction.support.AbstractPlatformTransactionManager#handleExistingTransaction 当前线程已开启事务仍请求新事务处理方法

3. org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin 如果当前线程没有开启事务，则开启事务

	* org.springframework.jdbc.datasource.ConnectionHolder#setTransactionActive 设置当前线程所持有的连接已开启事务

4. org.springframework.transaction.support.AbstractPlatformTransactionManager#processCommit 判断transaction对象状态是否为new，即事务是否该由该transaction对象管理，如果为new，则提交或者回滚
{'fraction_non_alphanumeric': 0.0735910572892408, 'fraction_numerical': 0.011178388448998603, 'mean_word_length': 8.71945701357466, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4142708', 'n_tokens_mistral': 760, 'n_tokens_neox': 791, 'n_words': 75}