Sitio web oficial: https://www.codingapi.com/docs/home/
principio:
Ven al sitio web oficial
usar:
Un eureka.
Una TM y dos RM son servicio de pedido y servicio de pago respectivamente.
Para obtener una configuración detallada, visite el sitio web oficial.
Controlador de servicio de pedidos:
@PostMapping("/add-order")
@Transactional(rollbackFor = Exception.class)
@LcnTransaction
public String add(@RequestBody TblOrder bean){
JSONObject date = new JSONObject();
date.put("payName",bean.getOrderName()+"pay");
restTemplate.postForEntity("http://lcn-pay/add-pay",date,String.class);
int i = 1/0;
tblOrderDao.insert(bean);
return "新增订单成功";
}
Controlador de servicios de pago:
@PostMapping("/add-pay")
@Transactional(rollbackFor = Exception.class)
@LcnTransaction
public String addPay(@RequestBody TblPay bean){
tblPayDao.insert(bean);
// int i = 1/0;
return "新增支付成功";
}
Simplemente agregue @LcnTransaction
código fuente
1 entrada:
Use la clase de aspecto aop para interceptar
TransactionAspect
para obtener mensajes de transacción:
Proceso de ejecución:
determine si hay un contexto de transacción,
obtenga el contexto principal si existe
, créelo si no,
y determine si es el iniciador de la transacción
Coloque la información de contexto en el caché,
haga clic en y será un Map<String, Object> singlePropCache ¿
Cuál es el marco general de startxx?
La mayoría de ellos tendrán
endXX
clearXX
cleanXX
destoryXX
Despliegue el código:
encuentre el método de destrucción
Después de la ejecución, elimine la información de contexto en finalmente
y obtenga la información de contexto, establezca un montón de parámetros, bla, bla, ingrese el punto clave:
DTXServiceExecutor # transactionRunning
Obtener el estado de propagación de la transacción
Iniciar la operación de transacción
previa a la ejecución previa El
iniciador de la transacción inicializa el grupo de transacciones
Los participantes de la transacción no ejecutan nada La
ejecución del negocio
es para ejecutar el contenido del método modificado por la anotación @LcnTransaction
La ejecución se completó correctamente:
iniciador de la transacción:
establecer el estado en 1
participante de la transacción:
unirse al grupo de transacciones
Ejecución fallida:
iniciador de la transacción:
establezca el estado en 0
participante de la transacción:
elimine la información de la transacción
Ejecución completada:
notifique a TM
para que haga clic dentro:
2 ¿Cómo obtiene LCN la conexión a la base de datos de operaciones?
DataSourceAspect
intercepta al adquirir conexiones de base de datos:
realice proxy y empaquete conexiones de base de datos de diferentes tipos de transacciones usted mismo. Tome
LCN como ejemplo:
devuelva sus propios datos y conecte la clase de proxy:
realice su propio procesamiento . El proceso general es
casi así .
Echemos un vistazo al modo TCC nuevamente.
Si está interesado, pueden discutirlo juntos.