项目中spring事务管理配置分析与修改方案

简介:

概要:

现有spring事务管理配置存在问题:对数据库无关的service层方法,也会进行事务管理(创建数据库链接、提交(回滚)事务、释放连接等),消耗资源。

修改方案:只对执行数据库写操作的service层方法进行事务管理,其它方法均不做配置。

需要做的工作:统计现有service层方法命名;修改事务管理配置文件;规范后续开发时的service层方法命名。

后续工作

1、确定事务管理机制

2、清理现有service层方法命名及功能

3、按确定的事务管理机制修改事务管理配置

4、规范以后的方法命名。

1、现有配置

配置如下:

<tx:method name="get*" read-only="true" />

<tx:method name="query*" read-only="true" />

<tx:method name="*" propagation="REQUIRED" />

日志输出:

1com.sinosig.carpremium.services.impl.TokenServiceImpl.countToken

创建事务

2012-01-17 11:46:39,656 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction:371] - Creating new transaction with name [com.sinosig.carpremium.services.impl.TokenServiceImpl.countToken]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT

建立链接

2012-01-17 11:46:58,375 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:202] - Acquired Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] for JDBC transaction

2012-01-17 11:46:58,468 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:219] - Switching JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] to manual commit

执行处理逻辑

2012-01-17 11:46:58,468 INFO [com.sinosig.carpremium.services.impl.TokenServiceImpl.countToken:44] - 令牌基数是:100000,当前令牌值是:1

commit预处理

2012-01-17 11:46:58,468 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit:903] - Triggering beforeCommit synchronization

2012-01-17 11:46:58,468 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion:916] - Triggering beforeCompletion synchronization

2012-01-17 11:46:58,468 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit:730] - Initiating transaction commit

提交事务

2012-01-17 11:46:58,484 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit:259] - Committing JDBC transaction on Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver]

Commit后处理

2012-01-17 11:46:58,484 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit:929] - Triggering afterCommit synchronization

2012-01-17 11:46:58,484 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion:945] - Triggering afterCompletion synchronization

释放数据库链接

2012-01-17 11:46:58,484 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion:314] - Releasing JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] after transaction

2、com.sinosig.carpremium.services.impl.AutocompleteServiceImpl.getTravelHotCityList

创建事务

2012-01-17 11:47:05,687 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction:371] - Creating new transaction with name [com.sinosig.carpremium.services.impl.AutocompleteServiceImpl.getTravelHotCityList]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly

创建数据库链接

2012-01-17 11:47:05,687 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:202] - Acquired Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] for JDBC transaction

2012-01-17 11:47:05,687 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:219] - Switching JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] to manual commit

执行逻辑

2012-01-17 11:47:05,765 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100000} Connection

2012-01-17 11:47:05,781 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100000} Preparing Statement:    Select p.City city, p.Spelling spelling, p.Org_Id   orgId,p.spelling_acronym spellingAcronym,p.city_plate cityPlate   ,a.PRO_PLATE provincePlate   From t_Se_City p left join t_se_netCityControl a      on p.org_id = a.org_id    Where p.hot_sign=? and a.isnew = '1' Order By p.city_id   Asc  

2012-01-17 11:47:05,953 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Executing Statement:    Select p.City city, p.Spelling spelling, p.Org_Id   orgId,p.spelling_acronym spellingAcronym,p.city_plate cityPlate   ,a.PRO_PLATE provincePlate   From t_Se_City p left join t_se_netCityControl a      on p.org_id = a.org_id    Where p.hot_sign=? and a.isnew = '1' Order By p.city_id   Asc  

2012-01-17 11:47:05,953 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Parameters: [1]

2012-01-17 11:47:05,968 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Types: [java.lang.String]

2012-01-17 11:47:06,015 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} ResultSet

2012-01-17 11:47:06,031 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Header: [CITY, SPELLING, ORGID, SPELLINGACRONYM, CITYPLATE, PROVINCEPLATE]

2012-01-17 11:47:06,031 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [北京市, BeiJingShi, 01682900, bjs, ]

2012-01-17 11:47:06,031 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [济南市, JiNanShi, 02129700, jns, A, A]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [南京市, NanJingShi, 03515500, njs, A, ]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [重庆市, ChongQingShi, 05141600, cqs, ]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [郑州市, ZhengZhouShi, 06511000, zzs, A, ]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [上海市, ShangHaiShi, 07518800, shs, ]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [广州市, GuangZhouShi, 08512200, gzs, A, ]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [深圳市, ShenZhenShi, 09101800, szs, B, B]

2012-01-17 11:47:06,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [青岛市, QingDaoShi, 11402000, qds, B, B]

2012-01-17 11:47:06,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [石家庄市, ShiJiaZhuangShi, 15503200, sjzs, A, ]

2012-01-17 11:47:06,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [杭州市, HangZhouShi, 19503500, hzs, A, ]

2012-01-17 11:47:06,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [成都市, ChengDuShi, 21114000, cds, A, ]

提交预操作

2012-01-17 11:47:06,062 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit:903] - Triggering beforeCommit synchronization

2012-01-17 11:47:06,078 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion:916] - Triggering beforeCompletion synchronization

2012-01-17 11:47:06,078 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit:730] - Initiating transaction commit

提交事务

2012-01-17 11:47:06,078 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit:259] - Committing JDBC transaction on Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver]

提交后操作

2012-01-17 11:47:06,093 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit:929] - Triggering afterCommit synchronization

2012-01-17 11:47:06,093 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion:945] - Triggering afterCompletion synchronization

2012-01-17 11:47:06,093 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion:314] - Releasing JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] after transaction

问题:

与数据库无关的service层操作也被纳入了事务管理的范围里。事务管理和数据库操作都会占用系统资源。

方案一:对数据库增//改操作的操作进行事务管理,其余均不做配置。

配置如下。

<tx:method name="add*" propagation="REQUIRED" />

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="edit*" propagation="REQUIRED" />

<tx:method name="remove*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

日志记录

1、com.sinosig.carpremium.services.impl.TokenServiceImpl.countToken

2012-01-17 12:11:29,578 INFO [com.sinosig.carpremium.services.impl.TokenServiceImpl.countToken:44] - 令牌基数是:100000,当前令牌值是:1

2、com.sinosig.carpremium.services.impl.AutocompleteServiceImpl.getTravelHotCityList

2012-01-17 12:11:35,312 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100000} Connection

2012-01-17 12:11:53,765 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100000} Preparing Statement:    Select p.City city, p.Spelling spelling, p.Org_Id   orgId,p.spelling_acronym spellingAcronym,p.city_plate cityPlate   ,a.PRO_PLATE provincePlate   From t_Se_City p left join t_se_netCityControl a      on p.org_id = a.org_id    Where p.hot_sign=? and a.isnew = '1' Order By p.city_id   Asc  

2012-01-17 12:11:53,953 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Executing Statement:    Select p.City city, p.Spelling spelling, p.Org_Id   orgId,p.spelling_acronym spellingAcronym,p.city_plate cityPlate   ,a.PRO_PLATE provincePlate   From t_Se_City p left join t_se_netCityControl a      on p.org_id = a.org_id    Where p.hot_sign=? and a.isnew = '1' Order By p.city_id   Asc  

2012-01-17 12:11:53,953 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Parameters: [1]

2012-01-17 12:11:53,953 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100001} Types: [java.lang.String]

2012-01-17 12:11:54,000 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} ResultSet

2012-01-17 12:11:54,015 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Header: [CITY, SPELLING, ORGID, SPELLINGACRONYM, CITYPLATE, PROVINCEPLATE]

2012-01-17 12:11:54,015 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [北京市, BeiJingShi, 01682900, bjs, 京, 京]

2012-01-17 12:11:54,015 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [济南市, JiNanShi, 02129700, jns, 鲁A, 鲁A]

2012-01-17 12:11:54,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [南京市, NanJingShi, 03515500, njs, 苏A, 苏]

2012-01-17 12:11:54,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [重庆市, ChongQingShi, 05141600, cqs, 渝, 渝]

2012-01-17 12:11:54,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [郑州市, ZhengZhouShi, 06511000, zzs, 豫A, 豫]

2012-01-17 12:11:54,046 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [上海市, ShangHaiShi, 07518800, shs, 沪, 沪]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [广州市, GuangZhouShi, 08512200, gzs, 粤A, 粤]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [深圳市, ShenZhenShi, 09101800, szs, 粤B, 粤B]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [青岛市, QingDaoShi, 11402000, qds, 鲁B, 鲁B]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [石家庄市, ShiJiaZhuangShi, 15503200, sjzs, 冀A, 冀]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [杭州市, HangZhouShi, 19503500, hzs, 浙A, 浙]

2012-01-17 12:11:54,062 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100002} Result: [成都市, ChengDuShi, 21114000, cds, 川A, 川]

3、com.sinosig.carchannel.services.impl.NetInfoServcieImpl.saveNetInfo

2012-01-17 12:17:58,437 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction:371] - Creating new transaction with name [com.sinosig.carchannel.services.impl.NetInfoServcieImpl.saveNetInfo]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT

2012-01-17 12:17:58,437 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:202] - Acquired Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] for JDBC transaction

2012-01-17 12:17:58,515 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:219] - Switching JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] to manual commit

2012-01-17 12:17:58,546 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100009} Connection

2012-01-17 12:17:58,546 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100009} Preparing Statement:     select SEQ_INSUINFO.nextval from dual   

2012-01-17 12:17:58,546 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100010} Executing Statement:     select SEQ_INSUINFO.nextval from dual   

2012-01-17 12:17:58,546 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100010} Parameters: []

2012-01-17 12:17:58,546 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100010} Types: []

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100011} ResultSet

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100011} Header: [NEXTVAL]

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100011} Result: [15081689]

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100009} Preparing Statement:       insert into   T_SE_INSURANCE_INFO(PK_T_INS_ID,CONT_TEL,PROV_CITY,USEYEAR,   NUM_PLATE,PURCHASE_DATE,PRICE,IS_NEW,INSU_APP_DATE,CONT_NAME,   PUSHED_FLAG,PURGECODE,AREACODE,EMAIL,SPSOURCE,HASDRI,INSU_APP_DATE_TRA)   values(?,?,?,?,   ?,?,?,?,to_date(?,'yyyy-MM-dd'),?,   '9',?,?,?,?,'0',?)  

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100012} Executing Statement:       insert into   T_SE_INSURANCE_INFO(PK_T_INS_ID,CONT_TEL,PROV_CITY,USEYEAR,   NUM_PLATE,PURCHASE_DATE,PRICE,IS_NEW,INSU_APP_DATE,CONT_NAME,   PUSHED_FLAG,PURGECODE,AREACODE,EMAIL,SPSOURCE,HASDRI,INSU_APP_DATE_TRA)   values(?,?,?,?,   ?,?,?,?,to_date(?,'yyyy-MM-dd'),?,   '9',?,?,?,?,'0',?)  

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100012} Parameters: [15081689, 13800138000, 02129700, 5, 鲁A423423, 2007-01-17, , 0, 2012-01-18,  , WB-OB-NR-FQ, W00000002, , NET, 2012-01-18]

2012-01-17 12:17:58,562 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100012} Types: [java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String]

2012-01-17 12:17:58,578 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit:903] - Triggering beforeCommit synchronization

2012-01-17 12:17:58,578 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion:916] - Triggering beforeCompletion synchronization

2012-01-17 12:17:58,578 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit:730] - Initiating transaction commit

2012-01-17 12:17:58,578 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit:259] - Committing JDBC transaction on Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver]

2012-01-17 12:17:58,578 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit:929] - Triggering afterCommit synchronization

2012-01-17 12:17:58,578 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion:945] - Triggering afterCompletion synchronization

2012-01-17 12:17:58,593 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion:314] - Releasing JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] after transaction

4、com.sinosig.carchannel.services.impl.NetRuleServiceImpl.saveRuleInfo

2012-01-17 12:17:58,593 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction:371] - Creating new transaction with name [com.sinosig.carchannel.services.impl.NetRuleServiceImpl.saveRuleInfo]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT

2012-01-17 12:17:58,593 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:202] - Acquired Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] for JDBC transaction

2012-01-17 12:17:58,593 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin:219] - Switching JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] to manual commit

2012-01-17 12:17:58,593 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100013} Connection

2012-01-17 12:17:58,593 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100013} Preparing Statement:     select SEQ_RULE.nextval from dual   

2012-01-17 12:17:58,593 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100014} Executing Statement:     select SEQ_RULE.nextval from dual   

2012-01-17 12:17:58,593 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100014} Parameters: []

2012-01-17 12:17:58,593 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100014} Types: []

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100015} ResultSet

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100015} Header: [NEXTVAL]

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {rset-100015} Result: [60910]

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {conn-100013} Preparing Statement:       insert into T_SE_RULE(ID,PK_T_INS_ID,MULTIRISKTYPE,   CUSTOMERLOYALTY,DAMAGEDFACTORGRADE,RUNAREACODE,RUNMILES,ADDONCOUNT,ParticularModel,DISCOUNT)   values(?,?,?,   ?,?,?,?,?,?,'1.0')  

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100016} Executing Statement:       insert into T_SE_RULE(ID,PK_T_INS_ID,MULTIRISKTYPE,   CUSTOMERLOYALTY,DAMAGEDFACTORGRADE,RUNAREACODE,RUNMILES,ADDONCOUNT,ParticularModel,DISCOUNT)   values(?,?,?,   ?,?,?,?,?,?,'1.0')  

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100016} Parameters: [60910, 15081689, 1, 1, 1, 1, 1, 1, 0]

2012-01-17 12:17:58,609 DEBUG [com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl.debug:27] - {pstm-100016} Types: [java.lang.Long, java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String]

2012-01-17 12:17:58,609 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCommit:903] - Triggering beforeCommit synchronization

2012-01-17 12:17:58,609 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion:916] - Triggering beforeCompletion synchronization

2012-01-17 12:17:58,625 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit:730] - Initiating transaction commit

2012-01-17 12:17:58,625 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCommit:259] - Committing JDBC transaction on Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver]

2012-01-17 12:17:58,625 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCommit:929] - Triggering afterCommit synchronization

2012-01-17 12:17:58,625 DEBUG [org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion:945] - Triggering afterCompletion synchronization

2012-01-17 12:17:58,625 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion:314] - Releasing JDBC Connection [jdbc:oracle:thin:@10.10.114.161:1521:ifpdb, UserName=AUTOCREAT, Oracle JDBC driver] after transaction

对数据库无关的操作(如countToken)不再进行事务管理;

对读取数据库的操作(如查找热门城市)也不再进行事务管理;

对写数据库的操作(如saveNetInfo、saveRuleInfo)仍进行可回滚的事务管理。

需要:1、整理现有的service层操作方法名

2、后续开发中规范service层操作方法命名。



本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/805419,如需转载请自行联系原作者

相关文章
|
2天前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
19 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
2天前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——常见问题总结
本文总结了Spring Boot中使用事务的常见问题,虽然通过`@Transactional`注解可以轻松实现事务管理,但在实际项目中仍有许多潜在坑点。文章详细分析了三个典型问题:1) 异常未被捕获导致事务未回滚,需明确指定`rollbackFor`属性;2) 异常被try-catch“吃掉”,应避免在事务方法中直接处理异常;3) 事务范围与锁范围不一致引发并发问题,建议调整锁策略以覆盖事务范围。这些问题看似简单,但一旦发生,排查难度较大,因此开发时需格外留意。最后,文章提供了课程源代码下载地址,供读者实践参考。
13 0
|
2天前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
12 0
|
2天前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——事务相关
本文介绍Spring Boot事务配置管理,阐述事务在企业应用开发中的重要性。事务确保数据操作可靠,任一异常均可回滚至初始状态,如转账、购票等场景需全流程执行成功才算完成。同时,事务管理在Spring Boot的service层广泛应用,但根据实际需求也可能存在无需事务的情况,例如独立数据插入操作。
11 0
|
2天前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
19 0
|
2天前
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th=&quot;http://www.thymeleaf.org&quot;`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
16 0
|
2天前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
15 0
|
存储 SQL Java
Spring事务管理的底层逻辑—源码解析
首先进入CglibAopProxy.class的intercept方法打上一个Debug断点调试,或者在JdkDynamicAopProxy.class的invoke方法(如果目标方法是继承接口方式实现),根据不同实现方法类型选择不同的动态代理类
152 0
Spring事务管理的底层逻辑—源码解析
|
XML Java 数据格式
【spring源码学习】spring的事务管理的源码解析
【一】spring事务管理(1)spring的事务管理,是基于aop动态代理实现的。对目标对象生成代理对象,加入事务管理的核心拦截器==>org.springframework.transaction.interceptor.TransactionInterceptor。
2112 0
|
2天前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
15 0