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 项目启动脚本实践

1.基本描述 Spring Boot 项目默认内置了Tomcat,打包可以直接是jar和war两种形式,若是打包jar的形式可以直接使用Java命令直接启动,但是受参数的多样和复杂等特性制约,命令在使用的过程中记忆成本较大,更多的时候是将日常应用的脚本整理待具体使用时复制粘贴,所以推荐的实现方法是以脚本文件的形式来对部署程序的启动和停止实现高度的定制化,如同Tomcat的启动和停止脚本的使用(毫无疑问无法与Tomcat的脚本实现水平相媲美),将常见的参数以变量的形式编写,启动时一键启动或者一个命令启动即可,同时一些场景也只需要传递容易记忆的参数值。一般来说启动脚本的具体实现是需要与项目代码打包紧密结合的,不妨先了解一下前篇文章的打包实现和打包效果。 2.Windows脚本介绍 本篇文章主要分享两个脚本,分别是Windows和Linux的Java程序启动脚本,Windows脚本比较简单,使用...

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

Spring Boot 项目打包静态资源分离实践

1.基本介绍 前面一篇《Spring Boot 项目assembly打包实践》介绍了非常高端的企业级打包实战,自以为是非常完美的,然而最终还是被水平限制了,其中重要的一点是没有将静态资源给剥离出来,当时属实不知道剥离出来后可以起到热更新的作用,所以也就没有认识到有非常高的必要性,直到前天在友链站点看到了《spring boot项目使用maven插件将项目和jar包依赖以及静态资源分离打包》这篇文章(实际之前也看到过几次),专门留言问了一下是否能够支持资源文件的热更新,得到博主的肯定回复,不禁又来了兴趣,所以就有了关于项目打包的本篇文章和后续一篇。 实际在前三四年前最初体验到Spring Boot项目工程的部署运行时,当时的所有资源文件均在于一个jar(并不是仅一个jar包),当时提出了一个意见就是前台的项目打个war包要比这种jar包要合理啊,毕竟war包中的前端资源文件更改了可以立即生效...

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

Spring Boot 打包 远程执行代码

Spring Boot 请求包装器的实现

基本介绍 对于请求包装器的定义也许不是很准确,这里所谓的请求包装器是将所有URL的请求参数进行拦截过滤,将参数中的特殊字符进行拦截转换,来提升系统安全与稳定性,想要实现这一目的的方法是多样的但是基于本文所述的实现方式个人认为还是比较优雅的。早在2011年的时候写了一篇Struts2的请求包装器的文章,当时主要的实现是在Struts项目架构下,配合使用JSP的后台渲染开发模式,所有的请求无论是基于Form的表单提交还是使用Ajax请求的交互均是仅使用了GET/POST两种提交方式,所以在请求的包装实现也仅仅是重写request的getParameter、getParameterValues和getParameterMap即可,而本次的博客2.0系统中对于请求包装器的功能同样是不能少,所以在实现的过程中主要拓展的实现除了要在Spring MVC架构下使用以外,还要考虑更多的请求交互方式(PUT...

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

请求包装器

Spring Boot 配置http与https

本站博客1.0的实现有使用到了基于https安全协议访问,大概的实现是从阿里云申请免费的https证数(有效期一年,过期可继续申请),加上外置的Tomcat进行的参数配置,实现的https访问支持(当访问的是http协议时自动跳转至https)。那么本站2.0基于Spring Boot技术架构实现的,自然需要考虑这一特性,所以本篇文章主要实现的是让example项目同时支持http和https两种协议的支持,详细实现如下。 https证数下载 关于https证数的下载可从阿里云免费下载,同时也可以使用JDK bin目录中的命令行工具keytool自行生成证数。本次选择稍微熟悉点的阿里云证数,所以跳过具体证数的下载(本站的全局搜索功能能够搜到到关于https文章试提到的免费证数下载及配置相关的文章)。 配置http和https application.yaml #server server:...

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

Spring Boot 自定义错误页面处理

前面已经实现了对全局RestController的JSON格式的统一输出,然而在实际应用中并不是所有的请求都响应为JSON数据,某些应用场景下还是需要使用HTML页面(或JSP)进行响应的,所以本篇文章则是将本站博客系统中的自定义错误页面的实现进行整理实践,也许它们仅是Spring MVC环境的解决方案,但由于身处Spring Boot架构程序中,允许我称之为Spring Boot 的自定义错误页面处理。 1.Controller定义 定义一个Controller,包含两个方法,分别是抛出500的服务器端错误和找不到页面的404错误,代码较为简单,500错误则是简单的除数为0;404则是随意重定向至一个不存在的路径,参考实现如下: packagecn.chendd.modules.error.controller; import...; /** *全局异常验证管理 *@authorch...

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

Spring Boot 线程池使用

在Spring Contex依赖的Scheduling包中存在Async注解和AsyncConfigurer接口,前者注解标记在方法上表示此方法为线程异步的方式调用,后者接口若被扩展则表示将项目环境中的默认线程池进行了覆盖实现,所有基于@Async默认的方法都将由此线程池托管,即Spring Boot架构的项目中若要实现某个功能模块的线程池时不建议去扩展此接口以至于覆盖默认的线程池(顺便提一下默认线程池的参数可在参数中使用spring.task.execution进行设置),而是依照此包路径中也提供的ThreadPoolTaskExecutor类,声明应用即可,简单示例参考如下所示: packagecn.chendd.core.spring.pool; import...; /** *简单线程参数配置类 * *@authorchendd *@date2020/8/1618:27 */ ...

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

Spring Boot 集成Quartz定时任务

前几年还写了关于Quartz的纯Java使用和Spring集成的使用,今天特将本站博客系统使用Spring Boot集成的Quartz框架实现的定时任务整理出来,以实现功能的界面介绍和实现步骤的描述和截图为主,完整的代码可在博客系统的实现源码中自行下载查看。博客中的定时管理功能包含两个功能页面,分别是定时任务的功能管理和定时任务的执行历史记录查询管理,简单概括就是使用Spring Boot整合Quartz框架,并使用其自带的数据库持久化实现将定时任务写入表中,同时将自定义定时实现的Job统一封装,具体分解如下文详细所示。 1.创建数据库表 本次使用MySQL数据库来实现,所以需要拿到MySQL数据库对应的创建表语句和初始化数据脚本,具体的脚本可见quartz-2.3.2.jar!\org\quartz\impl\jdbcjobstore包中,找到对应数据库版本的脚本文件执行创建表即可,参考...

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

quartz定时任务

Spring Boot 内置定时任务使用

在Spring Boot中内置了一套定时任务的实现(TaskSchedulingAutoConfiguration)在spring-context.jar中的scheduling包下,可以很方便的实现定时任务的实现,本篇文章主要围绕定时任务的常规应用和动态增加与删除定时任务的具体实践而来,详细实现与过程如下。 1.定时任务简单应用 packagecn.chendd.modules.quartz.job; importlombok.extern.slf4j.Slf4j; importorg.springframework.scheduling.annotation.Async; importorg.springframework.scheduling.annotation.EnableScheduling; importorg.springframework.scheduling.anno...

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

quartz定时任务

Spring Boot 纯FreeMarker模板引擎使用

基本介绍 在Spring Boot项目的页面技术选型可以是JSP,也可以是前面说过的Thymeleaf,同样也可以是FreeMarker等其它模板技术,由于前面的页面编写已经应用了Thymeleaf,所以在页面这一块毫不犹豫的会考虑使用了多年的JSP或Thymeleaf,但是绝不会使用FreeMarker作为页面显示层,只是多年来也算是多次使用FreeMarker作为一些模板去实际应用(作为doc格式的word导出;作为Email邮件发送的富文本等),本站系统功能后期也使用到了邮件发送,所以考虑使用FreeMarker来作为模板动态生成待发送邮件的html文本。 为何在使用Thymeleaf页面模板后,还要使用FreeMarker作为模板技术呢,这点就源于个人对Thymeleaf掌握的深度不够导致,主要是并未掌握在无框架整合的项目环境中使用纯Thymeleaf如何去实现模板页面的访问以及传...

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

Spring Boot 模板引擎Thymeleaf自定义标签

背景介绍 章接前文,自定义标签一直都是个人非常喜欢的一个技术点,它可以与实际需要相结合来简化我们功能的实现,本站就较多的JSP自定义标签的文章介绍,所以在本站建站初期在使用Thymeleaf的时候,也层花了一些时间专门用于它的自定义标签实现,但是也许是时间花的不够吧,一些知识细节属于云里雾里的,一些应用的深度不够,比如它的自定义标签如何获取内容体等,并未掌握,所以本篇所谓的自定义标签则是提供几个属性值处理的标签实现,详细实现过程如下。 自定义标签方言 packagecn.chendd.base.thymeleaf.dialects; import...; /** *自定义标签方言类 * *@authorchendd *@date2020/5/3121:51 */ @Component publicclassDdDialectextendsAbstractProcessorDialect...

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

Thymeleaf
本站信息

 运营时间: 天

 用户数量: 人

 文章数量: 篇

 评论数量: 条

 点赞个数: 个

 最后更新:

标签云