,,Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作示例

,,Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作示例

这篇文章主要介绍了春天实战之使用TransactionProxyFactoryBean实现声明式事务操作,结合实例形式分析了春天使用TransactionProxyFactoryBean实现声明式事务相关配置、接口设置与使用技巧,需要的朋友可以参考下

本文实例讲述了春天实战之使用TransactionProxyFactoryBean实现声明式事务操作。分享给大家供大家参考,具体如下:

一 配置文件

?可扩展标记语言版本='1.0 '编码='GBK '?

bean xmlns:xsi=' http://www。w3。' org/2001/XML架构-实例'

xmlns=' http://www。spring框架。'组织/架构/bean '

xmlns:p=' http://www。spring框架。'组织/架构/p '

xsi:架构位置=' http://www。spring框架。组织/模式/bean

http://www。spring框架。org/schema/beans/spring-beans-4.0。xsd '

!-定义数据源豆子,使用C3P0数据源实现,并注入数据源的必要信息-

bean id=' data source ' class=' com。m零钱。v2。c3p 0。“组合工具栏数据源”

destroy-method='close '

司机:司机。MySQL。JDBC。“司机”

p:JDBC URL=' JDBC:MySQL://localhost/spring '

p:user='root '

密码='32147 '

p:maxPoolSize='40 '

p:minPoolSize='2 '

p:initialPoolSize='2 '

p:maxIdleTime='30'/

!-配置JDBC数据源的局部事务管理器,使用数据源事务管理器类-

!-该类实现PlatformTransactionManager接口,是针对采用数据源连接的特定实现-

!-配置数据源事务管理器时需要依注入数据源的引用-

bean id='transactionManager '

' org。spring框架。JDBC。数据来源。'数据源事务管理器'

p:dataSource-ref='dataSource'/

!-配置一个业务逻辑豆子-

bean id=' newsDao ' class=' org。疯狂吧。app。道。impl。新闻导报

p:ds-ref='dataSource'/

!-为业务逻辑豆配置事务代理

transactionManager用于为配置事务代理注入所需的事务管理器

目标用于指定为哪个豆配置事务代理-

bean id='newsDaoTrans' class=

org。spring框架。交易。截击机。transactionproxyfactorybean

p:事务管理器-ref='事务管理器'

p:target-ref='newsDao '

!-指定事务属性-

属性名='事务属性'

小道具

prop key=' * ' PROPAGATION _ REQUIRED/prop

/道具

/属性

/bean

/豆子

二 DAO

一接口

包org。疯狂吧。app。道;

公共接口新闻岛

{

公共空插入(字符串标题,字符串内容);

}

2实现类

包org。疯狂吧。app。道。impl

导入javax。SQL。数据来源;

导入Java。SQL。连接;

导入org。spring框架。JDBC。核心。JDBC模板;

导入org。疯狂吧。app。道。*;

公共类新闻报实现新闻岛

{

私有数据源ds;

公共空集合(数据源集合)

{

this.ds=ds

}

公共空的插入(字符串标题、字符串内容)

{

JdbcTemplate jt=新JDBC模板;

jt.update('insert into news_inf '

值(空,)'

,标题,内容);

//两次插入的数据违反唯一键约束

jt.update('insert into news_inf '

值(空,)'

,标题,内容);

//如果没有事务控制,则第一条记录可以被插入

//如果增加事务控制,将发现第一条记录也插不进去。

}

}

三 测试类

包李;

导入org。spring框架。语境。支持。*;

导入org。spring框架。语境。*;

导入org。疯狂吧。app。道。*;

公共课程春季考试

{

公共静态void main(String[] args)

{

//创建春天容器

应用程序上下文ctx=新建

classpathmlaplicationcontext(' bean。XML’);

//获取事务代理豆

新闻道道=(新闻道)ctx。getBean('newsDaoTrans ',newsdao。类);

//执行插入操作

dao.insert('疯狂Java ','轻量级Java EE企业应用实战');

}

}

四 测试

数据库中无数据,说明事务生效。

线程“主要”组织。spring框架。道。重复键异常中出现异常:PreparedStatementCallbackSQL[插入到news_inf值(空,)];'重复条目'疯狂关键字"新闻标题"的“Java”;嵌套异常是com。MySQL。JDBC。例外情况。JDBC 4。mysqltigrityconstraintviolationexception:重复条目疯狂关键字"新闻标题"的" Java "

位于org。spring框架。JDBC。支持。sqlerrorcodesqlexception转换器。do translate(sqlerrorcodesqlexception translator。Java:239)

位于org。spring框架。JDBC。支持。abstractfallbacksqlexceptiontranslator。translate(abstractfallbacksqlexceptiontranslator。Java:73)

位于org。spring框架。JDBC。核心。JDBC模板。执行(JDBC模板。Java:660)

位于org。spring框架。JDBC。核心。JDBC模板。更新(JDBC模板。Java:909)

位于org。spring框架。JDBC。核心。JDBC模板。更新(JDBC模板。Java:970)

位于org。spring框架。JDBC。核心。JDBC模板。更新(JDBC模板。Java:980)

位于org。疯狂吧。app。道。impl。newsdaoimpl。插入(newsdaoimpl。Java:33)

位于星期日反思。nativemethodaccessorimpl。调用0(本机方法)

位于星期日反思。nativemethodaccessorimpl。调用(nativemethodaccessorimpl。Java:62)

位于星期日反思。delegatingmethodaccessorimpl。调用(delegatingmethodaccessorimpl。Java:43)

位于Java。郎。反思。方法。调用(方法。Java:498)

位于org。spring框架。AOP。支持。奥普特利斯。invokejoinpointusingreflection(aoputils。Java:317)

位于org。spring框架。AOP。框架。反射方法调用。调用连接点(反射方法调用。Java:190)

位于org。spring框架。AOP。框架。反射方法调用。继续(反射方法调用。Java:157)

位于org。spring框架。交易。截击机。交易拦截器$1。proceedwithintiation(事务拦截器。Java:98)

位于org。spring框架。交易。截击机。transactionaspectsupport。invokewithtransaction(transactionaspectsupport。Java:262)

位于org。spring框架。交易。截击机。事务拦截器。调用(事务拦截器。Java:95)

位于org。spring框架。AOP。框架。反射方法调用。继续(反射方法调用。Java:179)

位于org。spring框架。AOP。框架。jdkdynamicaopproxy。调用(jdkdynamicaopproxy。Java:207)

at com.sun.proxy.$Proxy4.insert(未知来源)

在李springtest。main(springtest。Java:28)

导致原因:com。MySQL。JDBC。例外情况。JDBC 4。MySQL integrityconstraintviolationexception:重复条目疯狂关键字"新闻标题"的" Java "

位于星期日反思。nativeconstructoraccessorimpl。新实例0(本机方法)

位于星期日反思。nativestructoraccessorimpl。新实例(nativestructoraccessorimpl。Java:62)

位于星期日反思。delegatingconstructoraccessorimpl。新实例(delegatingconstructoraccessorimpl。Java:45)

位于Java。郎。反思。构造函数。新实例(构造函数。Java:423)

位于com。MySQL。JDBC。util。handlenewinstance(util。Java:409)

位于com。MySQL。JDBC。util。getinstance(util。Java:384)

位于com。MySQL。JDBC。SQL错误。createsql异常(sql错误。Java:1039)

位于com。MySQL。JDBC。mysqlio。checkerrorpacket(mysqlio。Java:4232)

位于com。MySQL。JDBC。mysqlio。checkerrorpacket(mysqlio。Java:4164)

位于com。MySQL。JDBC。mysqlio。发送命令(mysqlio。Java:2615)

位于com。MySQL。JDBC。mysqlio。sqlquerydirect(mysqlio。Java:2776)

位于com。MySQL。JDBC。连接实现。exec SQL(连接实现。Java:2838)

位于com。MySQL。JDBC。准备好的声明。执行内部(准备好的语句。Java:2082)

位于com。MySQL。JDBC。准备好的声明。执行update(预准备语句。Java:2334)

位于com。MySQL。JDBC。准备好的声明。执行update(预准备语句。Java:2262)

位于com。MySQL。JDBC。准备好的声明。执行update(预准备语句。Java:2246)

位于com。m零钱。v2。c3p 0。impl。newproxypreparedstatement。执行update(newproxypreparedstatement。Java:147)

位于org。spring框架。JDBC。核心。JDBC模板$2。doinpreparedstatement(JDBC模板。Java:916)

位于org。spring框架。JDBC。核心。JDBC模板$2。doinpreparedstatement(JDBC模板。Java:909)

位于org。spring框架。JDBC。核心。JDBC模板。执行(JDBC模板。Java:644)

.18更

更多对java相关内容感兴趣的读者,请查看我们的专题:《Spring框架入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》。

希望这篇文章对大家的java编程有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • word文档无法编辑是怎么回事-
  • 华为手机怎么设置返回键(华为手机下面的三个按键设置方法)
  • lumia950怎么样(Lumia950体验分享)
  • otg连接是什么意思(OTG连接手机方法)
  • 笔记本触摸板怎么右键(笔记本电脑触控板手势操作设置)
  • 真我x7怎么样(realme X7 系列体验)
  • 苹果的A16处理器有多强(苹果的A16处理器的介绍)
  • 小米互传怎么用(小米手机的连接与共享教程)
  • 怎么设置电脑桌面图标自动对齐 设置电脑桌面自动整理图标的方法
  • 宽带错误651最简单解决方法(处理宽带错误651的措施)
  • 大学生手机有什么推荐(大学生换手机攻略)
  • 天玑1100和骁龙778g哪个好(骁龙778G、天玑900、天玑1100购选建议)
  • yum update 升级报错的解决办法
  • Windows10禁用屏保教程
  • 连接wifi显示无互联网连接怎么办(无线连上了却不能上网处理绝招)
  • 留言与评论(共有 条评论)
       
    验证码: