Java springCloud项目bug全记录

1. 一般情况下,如果我们有多个controller,我们会在control类要加个path,区分不同的服务。

2. resource service虽然会直接对用户提供服务,但是用户token验证还有其他系统参数验证应该不需要每个微服务都做一遍,这个应该是在一个端口那边统一处理的。所以正常的话,controller每个函数不需要再加上httprequest参数了

3. 你可以了解一下 有关restful的一些知识,我们现在各个微服务都不是按照Restful风格来定义的接口。

4. 变量名以小写字母开始, 类名以大写开头,所有命名规则遵循驼峰。

5. 我们定义的数据结构,尽量都重载一下toString函数,否则打印出来的时候只是个地址,没有意义,toString函数除非必须要,不要自己拼接,一般使用

 public String toString{reflectionToString(this,ToStringStyle.SIMPLE_STYLE);}

7. 如果用swagger来定义接口的话,在返回值的数据结构上加上注解,说明每个字段。swagger需要使用config内SpringForConfig代码完成swagger加载,同时pom中的依赖分别是springfox-swagger2,springfox-swagger-ui,springfox-bean-validators,jackson-datatype-threetenbp,com.google.guava(注意如果不加这个依赖会一直报错nested exception is java.lang.illegalStateException: Mutiple Dockets with the same group name are not supported)

8.errorCode errorDec有规范的输出,当输出object的时候,可以用一个切面函数去过滤所有的controller方法,com.hisense.hitv.cl.aspect.CLControllerAspect。如果返回的不是object类而是自己定义的话,就需要自己写自已filter(可参考ResourceService-ControllerExceptionHandleAdvice,他会将所有的exception错误进行处理,以合适的方式返回出来)


9.service加接口imp。如果某个类实现了某个接口,他需要实现这个接口下的所有函数,除非它本身是个abstract的类。在定义接口的时候,你需要考虑哪些函数是在一个接口里的,一般情况下,都是根据功能来定义接口,比如:同一个种类的数据的不同操作都放在一个接口里。如果操作的是不相干的数据,可以定义多个接口。还有就是在定义的时候,根据需要可以对数据进行抽象,比如:都是读取数据,大家读取的数据只是类型不一样,其他操作都一样,完全可以定义一个函数,加个参数叫类型就可以了

10.传入参数不必要一个一个去抛异常 controller方法内一个@valid 加BindingResult就可以了

11.build_rpm.sh 

dos2unix build_rpm.sh 表示要设置下dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的,否则windows下和linux下的空格编码不用,会导致识别出错。

chmod +x build_rpm.sh  表示给sh文件赋予权限,详见博文linux下chmod +x的意思?为什么要进行chmod +x_chmod -x_yunlive的博客-CSDN博客

jenkinsfile_dev&pro  

XX.spec:设置版本号

bootstrap.properties

12.sql语句规范

13.supervisor是个守护软件,在里面配置好服务之后,它会负责监控程序是不是还在工作,如果发现程序停掉了,就会自动启动程序。但是需要告诉这个软件,是怎么判断程序还在工作,又是怎么启动的。而且我们的程序不能 用root用户来启东,否则supervisor自动启动会出错的。

14.网元配置文件在海外有两部分, 1. bootstrap.properties是最基本的,网元启动的时候最新加载这个配置文件,从中读取config server(配置中心)的地址,Eureka Server(注册中心)的地址,还有程序的名称之类的最基本信息。 2. 还有一部分是我们在git(单独搭建的,只是用于存储配置文件)里面提交的,config server那边会配置这个git的访问方式,程序加载bootstrap.properties之后,会发现我们已经配置了配置中心,并且要从配置中心读取配置,就会调用接口到配置中心读取配置信息。config server收到 请求后,看下如果本地有就返回,没有就去git拿然后返回。这个localconf的配置文件,说的是bootstrap.properties,没有这些基本信息,你都不知道自己需要去哪里进一步读取配置文件,又是读取的哪个配置文件

根据springboot结构规定,最先读取的是配置中心localconf里的bootstrap.properties ——>读取gitlab中的项目名.properties——>如果拿不到配置文件就去服务器本地读取项目名.properties,同时spring自带合并功能,可以取gitlab和本地的properties的并集。

15.网元版本号,那个地方只是个说明,告诉你要装那个版本。你说版本号自动加载是说的用yum安装,那个自动维护版本号,安装的时候自动下载了最新版本。这个地方是自己下载的rpm包,也就是系统里同一个服务会有不同版本的好几个rpm包,用yum安装不加版本说明就是默认是最新的,但是自己copy rpm包,那就是个文件,你得明确要copy的是哪个文件。

16.缓存:依赖加上,在启动类要加声明,enablecache,然后代码里要有地方和cache交互数据的。比如,读数据的时候,加cacheable注解,就会自动缓存了。有的还需要写代码实现缓存的读取和刷新。缓存你可以理解为在内存里存储了一个类似map的数据结构,读取数据的时候,先去缓存里面读(比如根据Key去map里面找数据),如果缓存里面没有数据,就会从数据库读,读完以后,自动把数据存到缓存里。我们还可以手动或者自动的从map里面把对应这个key的数据删除,下回再用就又去数据库重新加载了

17.关于线程异常:

可参考博文:Java捕获线程异常的几种方式_潘建南的博客-CSDN博客

在Java中,线程中的异常是不能抛出到调用该线程的外部方法中捕获的。

所以除了博文中的使用UncaughtExceptionHandler处理外,这里介绍另一种简单的方法,即线程内只打印日志,线程的参数正常返回(或固定返回空),线程外(即主线程中)识别参数是否为空,如果为空则异常报错。

18. springboot Multiple Dockets with the same group name are not supported

网上说属于bean重复,需要根据错误提示剔除多于的Bean引用。但素,这里其实会因为swagger的引用导致,所以在springboot项目中补上漏掉的依赖:com.google.guava <artifactId>guava</artifactId> <version>20.0</version>之后就不会出现这样的问题了。

另一种可能的错误来源是此博文所述:https://www.cnblogs.com/afraidToForget/p/11466193.html,Swagger配置重复定义

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值