springBoot自定义事务管理

1.在springBoot项目中service的实现类可以通过注解@Transactional添加事务

2.可以通过设置包名统一设置事务

3.自定义代码内设置事务
(1).注入事务管理类

	 @Resource
	 PlatformTransactionManager platformTransactionManager;
	 @Resource
	 TransactionDefinition transactionDefinition;

(2)使用事务

     public void saveAgentCert(BaseCertDto dto) {
		 SetDtoUtil.initOtherDto(dto);
		 if (dto.getBaseCerts().size() > 0) {
			 //手动开启事务
			 TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
		 	 String certId = null;
		 	 String vendorId = dto.getVendorId();
			 try {
				 //这里一定要先获取到主信息certId 再保存代理信息 所以两个循环
				 for (BaseCert cert : dto.getBaseCerts()) {
					 //代理资质资质等级字段,范围由0-n 前端用于区分代理级别,0代表主资质信息
					 if (0 == cert.getAgentLevel()) {
						 List<BaseCertFile> baseCertFiles = cert.getBaseCertFiles();
						 cert.setBaseCertFiles(null);
					 	//保存授权资质主信息
						 BaseCertDto dto1 = new BaseCertDto();
						 dto1.setBaseCert(cert);
						 save(dto1);
						 certId = dto1.getBaseCert().getCertId();
						 String fileCertId = certId;
						 //保存授权资质文件信息
						 saveAuthorCertFileInfo(vendorId, baseCertFiles, fileCertId);
					 }
				 }

				 for (BaseCert cert : dto.getBaseCerts()) {
					 if (0 != cert.getAgentLevel()) {
						 List<BaseCertFile> baseCertFiles = cert.getBaseCertFiles();
						 cert.setBaseCertFiles(null);
						 //保存授权资质代理信息
						 BaseAgentCertDto baseAgentCertDto = saveAgentCertInfo(certId, cert);
						 String fileCertId = baseAgentCertDto.getBaseAgentCert().getAgentCertId();
						 //保存授权资质文件信息
						 saveAuthorCertFileInfo(vendorId, baseCertFiles, fileCertId);
					 }
				 }
				 //手动提交事务
				 platformTransactionManager.commit(transactionStatus);//提交
				 SetDtoUtil.setSuccessDto(dto, "操作成功");
			 } catch (Exception e) {
				 //手动回滚事务
				 platformTransactionManager.rollback(transactionStatus);//最好是放在catch 里面,防止程序异常而事务一直卡在哪里未提交
				 logger.error(e.getMessage(), e);
				 SetDtoUtil.setFailDto(dto, "保存失败", "error");
			 }
		 } else {
			 SetDtoUtil.setFailDto(dto, "", "参数错误");
		 }
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,可以通过自定义组件来实现对应用程序的定制和扩展。下面是一些常见的自定义组件: 1. 自定义Starter:Spring Boot提供了Starter依赖的机制,可以简化依赖管理和配置。你可以创建自己的Starter,将常用的依赖、配置和自动配置打包成一个模块,方便其他项目引用和使用。 2. 自定义自动配置类:Spring Boot通过自动配置类来自动配置一些常用的组件和功能。你可以创建自己的自动配置类,并通过条件注解来控制其生效条件,从而实现对特定组件或功能的自定义配置。 3. 自定义注解:通过自定义注解,你可以实现对某些类、方法或属性的标记,从而在应用程序中实现特定的逻辑。比如,可以创建一个自定义注解来标记需要进行事务管理的方法,然后通过AOP技术实现对这些方法的事务处理。 4. 自定义内嵌容器配置:Spring Boot默认使用Tomcat作为内嵌容器,但你也可以通过自定义配置来切换到其他容器,如Jetty或Undertow。可以通过创建一个继承自`EmbeddedServletContainerCustomizer`的Bean来实现对内嵌容器的定制。 5. 自定义错误页面:Spring Boot可以根据错误状态码自动显示错误页面,但你也可以自定义错误页面,以提供更好的用户体验。可以创建一个继承自`ErrorController`的Controller来处理错误请求,并指定对应的错误页面。 这些只是自定义组件的一些常见示例,你可以根据自己的需求进一步扩展和定制。在实际开发中,你可以根据具体场景选择需要自定义的组件,并按照Spring Boot的规范进行实现和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值