个人工作项目总结记录2

  目前参与的项目也已经上线了,业务性比较复杂并且涉及的系统比较多,但是单说技术,没什么亮点,SpringBoot、Elastic-Job(还是未分布式部署)、Shiro等,但是在开发期间还遇到了很多问题,比如:报文如何实现统一加解密并且验签?还有一个让我头疼很久的问题:Transactional注解失效以及wget命令来验证网络的连通性,以上几个问题值得记录一下

  涉及到的技术点,均在该Demo中体现,代码地址:https://github.com/Simple-Coder/mt-demo

  Maven项目结构如下:

一、报文实现加解密

  一开始想的是写一个工具类,在每一个接口中进行加解密,后来觉得这个想法太蠢了……还有RestControllerAdvice注解,实现很简单:RestControllerAdvice注解+RequestBodyAdvice/ResponseBodyAdvice(2个对应接口即可),并重写接口方法,官方接口方法名通俗易通

1、请求解密逻辑

 2、响应加密加签逻辑

二、AOP实现验签

  由于工作项目要求必须验签,自然而然可以想到使用AOP来实现验签,验签通过则执行方法,未通过则重新组装报文返回;切面中也实现了非空字段校验的功能

三、多线程中事务控制(@Transactional实现)

  在项目由于业务性比较复杂,需要在异步线程中添加事务的处理,我开始的处理方法就是在线程的run方法添加@Transactional注解,发现失效了,后来才发现@Transactional使用没那么简单,所以还是写了一些功夫看了看这个注解,属性说明:https://docs.spring.io/spring/docs/5.0.4.BUILD-SNAPSHOT/javadoc-api/org/springframework/transaction/annotation/Transactional.html

1、初始解决方案①

2、初始解决方案②

 3、解决方案

 新类代码如下:

 较好的解决方案:

 4、总结

   ①线程不属于Spring托管,故而线程也不能使用Spring的事务,也不能获取Spring注入的bean在声明式事务管理的方法内开启多线程,多线程内的方法不被事务控制

  ②线程的run方法,它不会抛出异常,但异常会导致线程终止运行,在线程中抛出的异常无法在主线程中通过try/catch来捕获(可用线程的UnCaughtExceptionHandler进行异常处理)

四、wget验证网络连通性(http协议)

1、如果访问的目的地址为https协议则使用如下命令

wget --no-check-certificate "目的连接地址" -e use_proxy=yes -e https_proxy=代理设备IP:端口

2、如果访问的目的地址为http协议则使用如下命令

wget "目的连接地址" -e use_proxy=yes -e http_proxy=代理设备IP:端口

3、结果分析

  (1)如果结果显示 “正在保存至index.html 100%[==================================]”说明网络策略是可用的

  (2)如果显示其他错误码可根据以下错误码排查:

    ①1xx:处理信息,服务器收到请求,需要请求者继续执行操作

    ②2xx:请求成功,操作被成功接收并处理

    ③3xx:重定向,需要进一步的操作以完成请求

    ④4xx:客户端错误,请求包含语法错误或无法完成请求

    ⑤5xx:服务器错误,服务器在处理请求的过程中发生了错误 

原文地址:https://www.cnblogs.com/rmxd/p/12186480.html