Spring Boot 项目打包完美实践

1.基本介绍 前文中有两篇《Spring Boot 项目assembly打包实践》和《Spring Boot 项目打包静态资源分离实践》的文章来实践项目打包,本篇文章主要是来集二者所长,汇总实践出来一版本更加易于打包部署的实现,如果对打包部署缺乏较多的了解不妨先关注一下前面的两篇文章,本文则是回顾一下两种方式的优缺点,在此基础之上再整合出一版较为科学的实践结果,如前面两篇文章的优缺点如下。 1.1 Spring Boot 项目assembly打包实践 优点 (1)使用了强大的assembly插件,使得打包后的文件夹比较独立统一,也可利用插件将打包后的文件夹压缩等; (2)打包按文件夹归类不同的文件夹(bin/conf/logs/runtime/lib),提供了简单的启停脚本; (3)打包后的jar文件夹按类型归类,区分哪些是第三方开源的jar,哪些是本地jar,哪些是项目内部不同模块的ja...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 打包 远程执行代码

Spring Boot 项目assembly打包实践

1.打包插件依赖 曾经花费好多时间的各种折腾关于打包的实践,主要侧重于三种实现:spring-boot-maven-plugin、appassembler-maven-plugin和maven-assembly-plugin,最终由于几个原因选择了assembly进行实践,在打包本站博客系统时也遇到了一些问题,最终也是友好的解决,在打包时也使用到了maven的其它插件,参考如下: (1)maven-resources-plugin:在打包或build资源文件时,项目的各种文件会被重新复制生成,某些文件在重新生成的过程中会被改写,追加一些其它的东西后重新生成新文件,如此就导致原有文件的MD5发生了变化,如本站打包时https的证书文件后缀名为“pfx”(证数文件名称为www.chendd.cn.pfx)就被追加生成新文件,所以解决该类问题特增加该插件,排除一些需要过滤的文件,此处的排除并不是...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 打包 远程执行代码

Spring Boot 模板引擎Thymeleaf使用介绍

背景介绍 博客2.0建站之初对于Spring官方推荐的模板引擎Thymeleaf还一点没有使用过,虽然看过一些视频教程,但是并没有实际的取实践过,但是不要紧,对于同类模板引擎的JSP则非常熟悉,而且对于FreeMarker也略有使用(Velocity同样非常浅的略有使用),于是本着可以学习深入的年头选择了并不熟悉的Thymeleaf,克难攻坚迎难而上。 为什么Spring Boot官方推荐使用Thymeleaf呢,或者说简单的给大家扫个盲,Thymeleaf最大的区别在于它的模板标记全是依靠自定义属性的方式来实现模板标记的循环、判断、属性输出覆盖等,它(基本上)不增加新的标签,所有的模板交互全是依仗属性,即它的动态输出全部绑定在一些原生的html标签上,与原生的html属性不冲突,所以使用Thymeleaf构建的模板引擎可以直接在浏览器中预览,特别是配合IDEA在开发过程中,可以常规启动项...

文章分类:后端一部分 Spring Boot 本站技术点

Thymeleaf

Spring Boot 枚举转换器

在Spring Boot中枚举转换器只是很小的一部分知识点,自定义枚举转换器可以在项目中简化枚举类型参数的传递,同时处理枚举类型参数传递为null值的逻辑,实现的过程比较简单但起到的作用却不小,参考实现代码逻辑如下: packagecn.chendd.base.spring.components; import...; /** *Webmvc配置 * *@authorchendd *@date2019/10/1711:03 */ @Configuration publicclassWebMvcRegistrationsConfigextendsWebMvcConfigurationSupport{ @Override protectedvoidaddFormatters(FormatterRegistryregistry){ //增加自定义枚举类型转换 registry.addCo...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 优雅的配置拦截器

拦截器一直都是Spring项目中重要的组成部分,很多场景我们都需要对请求URL地址进行过滤和拦截,而在于Spring Boot中增加一个拦截器也是比较方便的,但是经过实践时发现全是以编程式的将一些需要过滤的URL和排除的URL路径以代码的形式进行硬编码,作为一枚自认为非常专业的选手来说,这种写法用于URL的权限过滤是必须要去解决的,必须要实现一个可在xml中配置的拦截器参数配置,即所谓优雅的配置拦截器的实现,所以先来看下一个简单的拦截器的具体实现,详见如下。 拦截器的实现 (1)增加拦截器的实现类,此处方法的拦截等实现均为输入一行warn日志,参考代码如下: packagecn.chendd.base.spring.interceptors; import... /** *ApiVersionVaildator拦截器 * *@authorchendd *@date2022/5/2910...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 载入yaml配置文件

前文中说到过对于properties和yaml这两种格式的配置文件,由于properties格式已经使用过无数次了,在博客建站之初处于学习了解的实践的目的选择了相对不太熟悉的yaml格式,现又将此格式的参数配置实践整理汇总,围绕一些常规格式和与常规应用契合度高的场景,本次将提供3个案例来实现具体的参数配置,具体参考如下。 读取application.yaml文件 参数定义 #swagger-ui-bootstrap swagger: markdowns:classpath*:markdown/* basic: enable:true username:chendd password:chendd 参数映射类 packagecn.chendd.modules.yaml.config; importio.swagger.annotations.ApiModelProperty; import...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 启动输出一句话

案例实践 在Spring Boot启动过程中做一些程序初始化的动作是一个比较常规的事情,这里就以程序启动输出一句话作为实际监听启动过程中的业务逻辑。总共整理了几种常见的实现方式来分别实现(未使用Web环境依赖的Servlet、Filter),主要以Java和Spring环境相关的实现方式,参考实现方式如下: (1)启动类输出,这种输出方式拥有绝对的最先触发和最后触发,实现参考如下: /** *启动类 * *@authorchendd *@date2022/5/820:09 */ @SpringBootApplication @Import(value=ContextConfiguration.class) publicclassBootstrap{ /** *服务器启动 *@paramargs启动参数 */ publicstaticvoidmain(String[]args){ Sout...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 统一异常处理

基本介绍 正如Spring Boot 统一接口输出格式一样,对于系统的异常处理也需要站在全局的层面来封装异常的逻辑处理,本站的全局异常处理逻辑主要考虑以下几个层面: (1)是否是用于提示或参数校验类型的异常逻辑,若是则不记录日志堆栈,将异常的描述信息返回至接口输出的结果中; (2)是否是Ajax类型的请求类型,若是则响应结果为ErrorResult结构的JSON类型,供Ajax请求接收,否则若不为Ajax类型的请求则直接抛出异常,由底层系统的实现处理; (3)是否为特殊类型的异常,即系统内置了一些类型的异常提示,若符合对应的异常类型则直接提示出对应的响应结果; (4)若以上全不满足时,返回默认的异常提示处理,即获取当前异常堆栈的最里层错误信息直接响应给用户; 参考代码 /** *全局异常处理 *@paramex异常对象 *@paramrequestrequest *@return操作结果 ...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 统一定义Resutful接口输出结构

背景介绍 在前面一篇文章《Spring Boot 定义公共结果集输出对象》时列举了Spring Boot内置的统一错误的JSON结构和阿里编码规范中提供的统一JSON结构,同时也提供了本站系统的统一结果集输出的对象类型和数据结构,本次将使用编码来的形式来接管全局的统一JSON格式输出,达到统一输出的目的,即无论在Controller中使用任何类型的返回值,均会被使用内置的输出类型进行包装输出。 在项目中也有实现HandlerMethodReturnValueHandler接口来统一接管Response响应输出的实现,本次提供本站博客系统的实现ResponseBodyAdvice接口来统一输出JSON结构(建站初期时的实现选型),详细介绍如下: (1)使用@ControllerAdvice和@RestControllerAdvice处理@RestController和@ResponseBod...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot 定义公共结果集输出对象

背景介绍 任何系统都应该是有一个统一的结果集作为接口请求的输出对象,SpringBoot内置了两个DefaultErrorAttributes类来统一处理接口输出(报错时的场景),默认情况接管了我们程序中的接口输出结果,它定义的属性为:timestamp、status、error、message、path(若请求结果输出为@ResponseBody时输出这5个属性,若输出至model页面时,还会输出更多的异常属性),在阿里编码规范中也声明了应定义响应信息,比如说必须包含 HTTP 状态码,errorCode、errorMessage、用户提示信息四个部分。说明:四个部分的涉众对象分别是浏览器、前端开发、错误排查人员、用户。其中输出给用户的提示信息要求:简短清晰、提示友好,引导用户进行下一步操作或解释错误原因,提示信息可以包括错误原因、上下文环境、推荐操作等。errorMessage:简要描...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot ApiVersion版本增强

背景介绍 最初见到ApiVersion还是在拉取了swagger-bootstrap-ui项目源代码后查看了其中的示例代码,发现了有个@ApiVersion的东西,搁现在已经记不起当时到底是发现了什么新大陆,反正是在一番好奇的想法中去百科了一大堆资料,东拼西凑的各种组合,最终就有了本文的实践结果。所以本次所讲的ApiVersion是指通过注解参数来给Controller的请求地址前缀增加版本编号的实现,请注意通过代码注解实现,并非采用手动编写地址的方式(实际上在工作的项目代码中也有遇到类似的场景,但是都是手动/v1的形式编写),毕竟专业的人采用专业的方式做专业的事情。 本文所述的ApiVersion的实现是通过覆盖webmvc的ApiRequestMappingHandlerMapping来实现扩展RequestMapping路径的目的,提供@ApiVersion注解来编写具体的Api版本...

文章分类:后端一部分 Spring Boot 本站技术点

Spring Boot Swagger整合和增强

背景介绍 Swagger相关的网站推荐为https://swagger.io/和https://github.com/swagger-api和http://springfox.github.io/springfox/,更多的了解可以翻阅相关网站的第一手介绍。本文主要讲述的是基于springfox-swagger项目的一款ui组件swagger-bootstrap-ui,该项目提供的swagger-ui主题界面与国人行为习惯并不十分相符,由业内大神萧明提供的基于bootstrap主题的风格重构,一开始是一个增强swagger-ui的皮肤项目,后来经过持续的集成完善就用了swagger-bootstrap-ui项目。注意了,该项目的最终版本1.9.6已经停止更新,作者在2017年重启的knife4j项目作为持续更新与维护的swagger项目,后续的应用应该基于knife4j进行集成与应用(该项...

文章分类:后端一部分 Spring Boot 本站技术点

本站信息

 运营时间: 天

 用户数量: 人

 文章数量: 篇

 评论数量: 条

 点赞个数: 个

 最后更新:

标签云