GithubHelp home page GithubHelp logo

spring-best-practices's Introduction

spring 最佳实践

总结了本人多年Java开发中的一些开发经验以及工具类和Spring框架的应用
采用了Spring项目的模式来最简单直观的呈现,直接拿来作为初始化项目也是不错的选择
该项目还在打磨中,仍有很多需要完善和优化的地方

项目持续更新中

Spring Boot版本 :2.1.7 , 兼容的Spring Cloud版本为 Greenwich ,版本对照参考官网Overview

概要

  • 如何配置拦截器:interceptor、filter、@RestControllerAdvice
  • bean的初始化: InitializingBean接口、@conditionXXX 注解
  • 如何获取applicationContext上下文: ApplicationContextAware
  • 枚举的优雅使用: 1、如何把枚举作为接口的交互参数:@JsonCreator、@JsonValue ,要注意fastjson和spring采用的jackson 对注解的支持 2、valueOfByXX
  • 缓存的优雅使用: @Cacheable 、CaffeineCacheManager、请求级别的缓存RequestScopedCacheManager,注意防止副作用操作污染缓存数据
  • 配置文件配置时间属性:java.time.Duration
  • 正确的报错方式,message的国际化: 参考
  • 接口参数校验:@Validated、javax.validation.constraints
  • 日志的优雅配置:log4j与logback的基础、使用MDC增加tractId跟踪日志
  • AOP的应用:自定义注解、方法拦截

第三方工具的使用

  • RestTemplate的优雅使用:工具类的封装、header的注入
  • 借助Mybatis-Plus实现零SQL开发
  • 借助MapStruct实现po、bo、vo等对象之间的转换
  • 健康接口,项目部署版本检查: buildnumber-maven-plugin
  • 如何深度复制对象:json复制、mapStruct、BeanUtils
  • apache-common 系列、hutool等基本工具类
  • 自定义的时间格式化工具类、jackson的封装工具

运维

  • 数据库版本维护 flyway
  • Jenkins的常用配置方式

在项目中的实践

  • 项目必备的工具包:apache-common系列、gson 等
  • 借助@RestControllerAdvice实现全局统一的response返回,方法直接通过抛异常来返回
  • 更好的实现项目的初始化相关操作

代码之道

  • 如何干掉if-else

导航

健康接口

web/src/main/java/top/rizon/springbestpractice/web/controller/ServerHealthController.java

健康接口是项目必备接口
基本的ping-pong:接口作为最基本的服务存活检测
服务器信息接口:可以打印服务常用信息的接口,比如服务器时间等
git版本信息的接口:接口打印了git版本号和build时间,在开发联调期间是非常重要的一个运维参考
ps. 要从auth认证拦截中排除

接口参数校验

web/src/main/java/top/rizon/springbestpractice/web/controller/UserController.java
错误提示配置:web/src/main/resources/ValidationMessages.properties

示例方法:top.rizon.springbestpractice.web.controller.UserController.list

通过注解实现参数校验, 错误提示信息可以使用配置文件实现国际化处理

缓存的几种写法

web/src/main/java/top/rizon/springbestpractice/web/controller/CacheExampleController.java

登陆认证的简单实现方式

web/src/main/java/top/rizon/springbestpractice/web/config/auth/AuthWebConfig.java

全局异常拦截处理

common/src/main/java/top/rizon/springbestpractice/common/handler/ExceptionHandlers.java

http请求工具RestTemplate的简单封装使用

common/src/main/java/top/rizon/springbestpractice/common/utils/http/SimpleRestTemplateUtils.java
RestTemplate拦截器:RestTemplateAuthConfig、BaseAuthHeaderHttpRequestInterceptor

封装的一些简单工具类

common/src/main/java/top/rizon/springbestpractice/common/utils/

第三方工具类相关

MapStruct java对象映射工具
web/src/main/java/top/rizon/springbestpractice/web/model/WebObjMapper.java
ps. 某些场景下用于deepClone也是一个不错的选择

AOP的应用案例

common/src/main/java/top/rizon/springbestpractice/common/aspect/

分页页码自动修复

web/src/main/java/top/rizon/springbestpractice/web/controller/UserController.java
top.rizon.springbestpractice.web.controller.UserController.list
当页码大于数据真实页码时会纠正为最后一页的数据,这可以解决前端分页展示删除最后一页的最后一条数据时刷新后为无数据的空白页的问题

打印方法执行时间

web/src/main/java/top/rizon/springbestpractice/web/controller/DemoController.java top.rizon.springbestpractice.web.service.AopExampleService.sleepMethod
打印方法执行时间,这在优化代码,排查耗时过高的方法时有一定的帮助

spring-best-practices's People

Contributors

othorizon avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.