一些代码和部署规范问题

最近在维护历史项目的时候碰到了不少问题,总结一下:

 

1、session问题,session用的是tomcat的session

影响:导致多个pod的时候有问题,无法扩展pod

解决:用spring-session 基于redis

 

2、配置文件没区分环境,用不同分支发不同环境

影响:分支间的代码不一致,无法互相合并代码,基本要手动合并,很多手动操作,效率低并且容易出错

解决:环境用profile区分,dev test prod等,不同分支可以互相合并,一般发版的时候测试和正式的分支是一样的

 

3、前后端分离时代码不在一个项目,靠手动打包前端代码到后端

影响:效率低且容易出错

解决:前后端代码做好目录规划和jenkins任务自动构建,利用shell脚本等自动打包部署

 

4、本地开发环境不能快速启动

比如本地中间件的配置是本地的,而不是和开发环境保持一致,地址配置有问题,是svc等,本地根本无法启动

影响:每次启动都要修改一些文件,或者需要本地独立启动中间件等,本身效率低,新人进来熟悉也慢

解决:本地开发环境要能快速启动和使用

 

5、本地开发环境sso等登陆之类的没做好,靠在代码hardcode等跳过一些验证等机制

影响:无法跟正常测试环境一样使用,代码也不能保证本地没问题上线就没问题

解决:开发环境跟测试环境的配置和验证机制等应该都是一样的,不要hardcode来区分

 

6、日志配置问题,正式站出现了debug或者控制台等打印,代码中各种System.out.print() e.printStackTree()

影响:正式站排查问题不便,一堆无用日志,用System.out.print等经验证有可能会出现锁导致进程假死问题

解决:代码一律用文件logger,测试站可以是debug和控制台打印,正式一定是info或以上级别,并且不打印控制台输出

 

7、Transaction注解配置问题,如在一个类上,这个类只有少数方法或者一个方法都用不到

影响:Transaction会基于整个方法增强,获取数据库连接,开启事务,提交,关闭连接等一系列数据库操作的,会影响系统性能和占用资源

解决:在有必要开启事务的时候用,用在类的方法上,并且方法范围尽可能小,涵盖事务范围就好

 

8、synchronized 等同步使用问题,锁粒度很大,基于整个controller方法

影响:同步对性能影响特别大,会导致程序并发很低

解决:尽量缩小同步的范围和同步的对象区分,比如针对一张表单同步,并且只同步会有并发冲突的部分

 

9、java普通锁和分布式锁的使用问题

多个pod同步数据库等操作用的是java的synchronized机制

影响:java的同步机制只针对单个jvm进程,不会影响到其他pod,所以这种同步有时候是无效的

解决:用分布式锁机制解决

 

9、Thread的使用问题

在代码中使用new Thread的机制,或者在局部方法中使用Executors.newFixedThreadPool()等方法

影响:会造成线程泄露

解决:不允许用new Thread()的方式创建线程,统一用线程池管理,主要用ThreadPoolExecutor,注意其中的参数配置,线程池都是类的变量,不会在局部方法构建线程池

 

10、池化方法非正常关闭

包括redis连接池,数据库连接池等

影响:导致连接池满,业务异常

解决:用通用的框架,一般像spring等框架已经封装好连接池处理,自己声明的时候注意要在finlly里面关闭或返回,或者用jdk1.7之后的try with resource

 

11、redis的序列化问题

使用spring的redisTemplate的时候,默认是用jdk的序列化方式,这个时候key和value是没有可读性的

解决:key统一用string value看情况用string或者json方式

 

12、tomcat和jvm的参数问题

一般应用都要配置tomcat的线程数,jvm的-Xms -Xmx参数,其他参数可看情况配置

 

13、gitignore问题

提交了本地log和.class文件等

解决:注意配置gitignore文件,避免提交没用的文件

 

14、方法过长问题

嵌套多层判断和循环,一个方法几百上千行

影响:无法阅读和维护

解决:抽取多个方法或类等

 

15、方法入参和回参问题

方法入参和回参使用map等参数

影响:难以阅读和重用

解决:用具体参数或者类作为入参和回参,map一般只在controller层返回或局部方法少量key的情况

 

16、使用存储过程和触发器

影响:存储过程难以调试和维护,并且容易使用不当影响数据库

解决:禁用存储过程和触发器

 

17、可以本地存储的文件用了第三方网站的文件

如jquery.js 文件,用的是官网的jquery地址链接

影响:网络会影响文件的获取

解决:统一改成本地文件

 

18:for continue out使用

影响:不便于阅读,容易出错

 

19、http post参数方式问题

复杂对象的参数用application/x-www-form-urlencoded 方式,导致无法接收,比如特殊符号[] {}等

解决:复杂参数统一用application/json 方式,参数都放在body里面

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值