一个transitional中操作两个不同的数据源的service

ops/2024/10/18 23:55:24/

问题

问题就是使用了transitional注解之后会让DS注解失效。

解决办法

业务逻辑主入口这里正常使用@Transactional注解。

java">package org.springblade.wlw.service.impl;import com.baomidou.dynamic.datasource.annotation.DS;
import org.springblade.wlw.pojo.entity.waterdata.WaterDevice;
import org.springblade.wlw.pojo.entity.waterdata.WaterDistanceDeviceEx;
import org.springblade.wlw.pojo.vo.WaterDistanceDevice;
import org.springblade.wlw.service.IWaterDeviceService;
import org.springblade.wlw.service.IWaterDistanceDeviceExService;
import org.springblade.wlw.service.IWaterDistanceDeviceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Service
public class WaterDistanceDeviceServiceImpl implements IWaterDistanceDeviceService {@Autowiredprivate IWaterDeviceService waterDeviceService;@Autowiredprivate IWaterDistanceDeviceExService waterDistanceDeviceExService;@Override@Transactional(propagation = Propagation.REQUIRED)public void insertFullRecored(WaterDistanceDevice waterDistanceDevice) {WaterDevice waterDevice = WaterDevice.fromWaterDistanceDevice(waterDistanceDevice);WaterDistanceDeviceEx deviceEx = WaterDistanceDeviceEx.fromWaterDistanceDevice(waterDistanceDevice);if (waterDevice == null || deviceEx == null) {return;}waterDeviceService.insertFullRecored(waterDevice);waterDistanceDeviceExService.insertFullRecored(deviceEx);}
}

两个单独的service也要声明事务,不过要指定为Propagation.REQUIRED_NEW. 每个Service上面要通过@DS注解指定数据源(这是一个正常的操作). 个人的一个建议:DS注解要么全部声明在service类上面, 要么全部生命在mapper接口上面, 避免到处都是。 虽然DS可以声明在方法上面, 但是还是避免吧,最好就是一个service控制一张表,是对一个表的增删改查, 没有必要声明在方法上面。

java">	@Override@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertFullRecored(WaterDevice device) {this.waterDeviceMapper.insertFullRecord(device);}
java">	@Override@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertFullRecored(WaterDistanceDeviceEx deviceEx) {this.waterDistanceDeviceExMapper.insertFullRecord(deviceEx);}

参考

[1] https://blog.csdn.net/qq_16159433/article/details/120951554


http://www.ppmy.cn/ops/126588.html

相关文章

【工具篇】MLU运行XInference部署手册

文章目录 前言一、平台环境准备二、代码下载三、安装部署1.正常pip 安装 四、运行结果展示1.如果界面404或没有东西请这样做2.运行效果 前言 Xorbits Inference(Xinference)是一个功能强大、用途广泛的库,旨在为语言、语音识别和多模态模型提…

如何将本地磁盘镜像包部署到docker中(以mysql5_7.tar.gz为例)

1.复制文件到宿主机 2.找到对应目录,docker load docker images就可以看到该镜像啦

尚硅谷rabbitmq2024 集群篇 流式队列 第54节 答疑

二、负载均衡 在文件/etc/haproxy/haproxy.cfg末尾追加: frontend rabbitmq_stream_frontendbind 192.168.200.100:33333mode tcp default_backend rabbitmg_stream_backend backend rabbitmg_stream_backendmode tcp balance roundrobin server rabbitmg1 192.168.200.100:555…

ArcGIS 最新底图服务地址

ArcGIS 最新底图服务地址 说明 先上地址: 地形图: https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer深色地形图:https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hi…

Kotlin基本语法

kotlin基本语法官网 1. 变量 ‘val’ 声明 仅被赋值一次的变量,初始化后不能重新赋值。 ‘var’ 声明 可以重新分配的变量,可以在初始化后更改其值。 Kotlin 支持类型推断,可以省略变量名后的类型。 val x: Int 5 var x: Int 5 val x 5变量只有在…

OpenCVSharp实现文档扫描功能详解

文章目录 简介1. 图像读取和预处理2. 查找轮廓3. 轮廓逼近与验证4. 透视变换5. 保存与显示结果总结简介 实现文档扫描功能是一个涉及多个处理步骤的过程,通过OpenCVSharp可以高效完成。以下是实现文档扫描的五个主要步骤,每个步骤包含详细的解释及示例代码。 1. 图像读取和预…

基于微博评论的自然语言处理情感分析

本文将介绍一个基于自然语言处理技术对微博评论文本(simplifyweibo_4_moods.csv)进行情感分析的项目。 一、项目概述 本文将介绍一个基于自然语言处理技术对微博评论文本(simplifyweibo_4_moods.csv)进行情感分析的项目。 本项目…

CesiumJS 案例 P4:Entity 点击事件(圆点、矩形、三角形、多边形、折线、盒子、圆柱)

CesiumJS CesiumJS API&#xff1a;https://cesium.com/learn/cesiumjs/ref-doc/index.html CesiumJS 是一个开源的 JavaScript 库&#xff0c;它用于在网页中创建和控制 3D 地球仪&#xff08;地图&#xff09; 一、Entity 点击事件 - 圆点 <!DOCTYPE html> <html…