新闻报价 汽车 商家 技术 软件 驱动专业群组:手机版 房车之家 江苏汽车网 中耳炎
 
首页 新闻 报价库 经销商 驱动 软件 培训
论坛 手机 笔记本 配件 办公与网络 揭幕内参 美色美女
单机游戏 网游 手游 网页游戏开服表
软件开发培训班 软件商店 分类下载 破解注册 驱动下载 软件新闻
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏 编程开发 安全相关
  新闻首页 >> 软件新闻 >> Java源码分析在 Spring 中,如何基于注解来配置事务详解

Java源码分析在 Spring 中,如何基于注解来配置事务详解

珠江路在线   2019年9月9日  【 转载 】来一杯82年的Jav 编辑:

 

Java源码
综合在 Spring 中,如何基于注解来配置事务详解

Spring 提供了基于注解的事务配置,即对需求事务加强的 Bean 接口 、 实现类或者步骤进行标注@Transactional,而后在容器中配置基于注解的事务加强驱动,即可使用基于注解的申明式事务  。

1 配置事务示例

我们使用 @Transactional 来为业务类配置事务:

@Service
@Transactional
public class UserService {
 @Autowired
 private UserDao userDao;
 /**
 * 新增
 *
 * @param user
 */
 public int addUser(final User user) {
 return userDao.save(user);
 }
 /**
 * 根据 Id,猎取账号
 *
 * @param userId
 * @return
 */
 public User getUser(Long userId) {
 return userDao.get(userId);
 }
 /**
 * 更新账号所对应的密码
 * @param userId
 * @param pwd
 */
 public int update(Long userId, String pwd) {
 return userDao.update(userId, pwd);
 }
}

接着在 Spring 配置文件中, 告知 Spring 容器对标注了 @Transactional 注解的 Bean,织入事务治理切面:

在默许状况下,会自动使用名为 transactionManager 的事务治理器, 所以,假如我们的事务治理器就叫做 transactionManager ,那么就能够进一步简化为


	

占有以下属性:

属性 默许值 注明 transaction-manager transactionManager 事务治理器 Bean ID proxy-target-class false true 示意将通过创立子类来代理业务类(需求在类路径中增加 CGlib.jar 类库); false 示意使用基于接口来代理  。 order - 假如业务类除了需求事务切面之外,还需求织入其余切面,那么能够通过该属性,来操纵事务切面在指标衔接点中的织入顺序 。 单元测试:

public class UserServiceTest {
 ApplicationContext context;
 @BeforeMethod
 public void setUp() throws Exception {
 context = new ClassPathXmlApplicationContext("spring_anno.xml");
 }
 @Test
 public void testAddUser() throws Exception {
 UserService userService = (UserService) context.getBean("userService");
 final User user = new User("deniro");
 userService.addUser(user);
 }
}

运行日志:

Java源码
综合在 Spring 中,如何基于注解来配置事务详解

从日志中能够看出,Spring 容器为这个类的全部步骤,都织入了事务治理性能 。

2 @Transactional 属性

@Transactional 占有以下这些属性:

属性 默许值 注明

propagation PROPAGATION_REQUIRED 事务流传行为 。

可通过org.springframework.transaction.annotation.Propagation枚举类,来提供合法值,

例:@Transactional(propagation=Propagation.SUPPORTS) isolation ISOLATION_DEFAULT 事务隔离级别 。

可通过 org.springframework.transaction.annotation.Isolation 枚举类,来提供合法值,例:@Transactional(isolation=Isolation.READ_UNCOMMITTED) readOnly false 是不是可读写事务 。

例:@Transactional(readOnly=true) timeout 使用底层事务系统的默许值 超时工夫,单位为秒 。

例: @Transactional(timeout=3) rollbackFor 回滚全部运行期异样 。 需求回滚的一组异样类,类型为 Class[], 多个异样类使用逗号分隔 。

例:@Transactional(rollbackFor={SQLException,class})  。 rollbackForClassName {} 需求回滚的一组异样类,类型为 String[] 。

例:@Transactional(rollbackForClassName={“xxxException”}) noRollbackFor {} 不需求回滚的一组异样类,类型为 Class[] 。 noRolbackForClassName {} 不需求回滚的一组异样类,类型为 String[] 。

3 标注位置

@Transactional 注解能够被标注于接口定义、接口步骤 、 类定义和类的 Public 步骤上  。

但假如 @Transactional 注解被标注在业务接口上,那么假如启用了子类代理:


	

那么被代理的业务类并不会织入事务加强,依然工作在非事务环境下 。这显然不是我们想看到的 。

提议在具体业务类上使用 @Transactional 注解,这样无论是不是开启子类代理模式,业务类都会织入事务加强 。

也能够在直接在步骤上定义注解 。

步骤上定义的注解会遮蔽类定义的注解,比方有些步骤需求使用到特别的事务属性,那么就能够直接在步骤上定义注解 。

在以下示例中,我们在 getUser() 步骤上设置了只读事务属性:

@Service
@Transactional
public class UserService {
 @Autowired
 private UserDao userDao;
 /**
 * 根据 Id,猎取账号
 *
 * @param userId
 * @return
 */
 @Transactional(readOnly = true)
 public User getUser(Long userId) {
 return userDao.get(userId);
 }
 ...
}

单元测试:

 @Test
 public void testGetUser() throws Exception {
 UserService userService = (UserService) context.getBean("userService");
 User user = userService.getUser(1l);
 logger.info("user={}", user);
 }

操纵台输出后果:

从输出后果中我们能够看出,在调用该步骤时,事务加入了只读属性 。

Java源码
综合在 Spring 中,如何基于注解来配置事务详解

本文到这里就结束了,喜爱的朋友能够帮忙转发和关注一下,感激支撑!


 按类别看新闻
电脑
数码
办公
网络

 江苏IT新闻联盟

 网游推荐
新开魔域 天龙八部3官网 传世散人服 6v电影网 传世搜服发布网woool 传世开服网 天龙八部公益服 传奇世界搜服 天龙八部发布网 西瓜影院

工具:
成语大全 菜谱大全 邮编区号 全国地图 公交查询 火车时刻表 汉字换拼音 繁体字转换 二维码 | 站长工具:收录/反向链接 ALEXA排名 关键词排名 WHOIS
教程:
Flash Dreamweaver Photoshop | ASP PHP | ASP.NET Java | SQL MySQL 热门搜索:内参 游戏 美食 美女 魔域 天龙八部 DNF 传奇 传奇世界
游戏:

传奇世界 新开魔域 新开传奇网站 奇迹 DNF公益服 热血江湖 DNF 天龙八部 冒险岛 传奇世界 魔域 传奇 奇迹 单职业 天龙 魔域变态版 征途 DNF 天龙八部

论坛:

手机 笔记本 配件 办公与网络 | 户外摄影 美食天地 美色美女 揭幕内参 | 游戏热点 冒险岛 传奇 天龙八部

驱动下载:显卡 声卡 网卡 主板 打印扫描
加入官方微信号
渠道报价/招聘
任你发任你查
Copyright 2019 www.zhujiangroad.com All Rights Reserved.
南京网爵数码科技有限责任公司版权所有 版权所有 苏ICP备05016148号
关于我们 | 手机版 |  收藏夹 |  南京地图 | 站长工具 | 中耳炎.中国