Maven应用构建打包

Maven是Java应用中一种很常见的构建方式,这里记录下我们使用Maven来构建springboot应用的一次实践以及遇到的问题

springboot应用配置和脚本

在springboot中,推荐的方式是直接打包成可执行JAR,这样简单、方便,并且使应用的部署和运行更加一致和可靠,非常适用于应用容器化部署。但我们希望也能兼容旧的打包部署方式,在一些非容器化部署的环境中,可能有直接修改应用配置文件甚至替换jar包的行为。所以我们还是保持以前的打包目录结构,在应用部署之后分为bin、config、lib、log4个子目录,区别只是lib中从原来的多个jar变成了现在的一个jar。

Bean Validation对象验证标准

Java’s standard for object validation最早在Java EE6中提出,作为Bean Validation 1.0(JSR-303)。它定义了一种在Java对象上执行声明性验证的方式,提供了一个运行时的数据验证框架。更多详细内容可以参考官网:https://beanvalidation.org

Bean Validationn可以让代码变得更简洁清晰,让开发人员在定义数据模型时不必考虑实现框架的限制。当然它不止提供了一些基本的constraint,也可以自定义验证规则,在实际的开发中,可以根据自己的需要组合或开发出更加合适的constraint。

通用Admin管理系统设计

一般的管理系统都会涉及一些用户部门角色权限之类的管理,比如ERP/CRM/OA这些系统早都已经很多成熟的产品以及案例。这里目标是希望设计一套足够简单,能够方便自己进行复用和扩展的系统,主要内容也就是一些表结构设计,也参考了开源管理系统若依的一些经验,尤其是菜单权限设计。

关于代码评审的一些思考

很多团队都会面临这样的问题,开发人员水平参差不齐,代码写的不够规范,review又觉得费时费力。以下是一些关于代码质量管理与提升的思考,参考总结了网上他人的一些经验。

Netty NioEventLoop

Java Nio是对多路复用IO模型的实现,其核心在于借助操作系统提供的选择器实现对连接的监听,然后应用服务只需对就绪的连接事件进行处理即可,比如可读可写等,这样就降低了应用服务在并发场景下的线程资源压力。

Netty中设计了专门的NioEventLoop来封装对Nio事件的处理,其思路是给每个NioEventLoop初始化一个选择器Selector,然后将通道对Selector的注册转化成对NioEventLoop的注册,这样可以让每个NioEventLoop各司其职,只负责处理注册到自己身上的通道事件,从而即实现了通道事件的多线程处理,同时又避免了过程中的线程安全问题。