1. 前言
正准备拉分支的,突然发现 swagger-ui 主页面的描述信息还是硬编码出来的,想着就是取一下对应工程版本号显示就可以了,然后就仅作为一次新的提交没必要打标签的,最后发现并不是想的那么简单…
2. 源码
完整项目地址:https://github.com/intomylife/osc-api
v1.4.5 标签地址:https://github.com/intomylife/osc-api/releases/tag/v1.4.5
v1.4.5 下载地址:zip,tar.gz
注:对于标签的说明「初学者商城」- 写在最前面 #5.1
3. 接口
注:查看更改内容:配置 swagger-ui 页面描述信息
3.1 思路
swagger-ui 页面要显示的版本信息其实就是服务工程的版本号,所以直接取到服务工程的版本号就可以了;而Java代码中无法直接获取到pom.xml文件中的属性,所以要先在配置文件中获取pom.xml中的属性值,然后再在Java代码中获取配置文件的配置信息,这样就能成功获取版本号,并显示在 swagger-ui 页面上
3.2 配置文件中获取 pom.xml 属性值
一开始,想先在 commons 工程的配置文件中取到 pom.xml 的属性值,然后在 Swagger 自定义配置类SwaggerConfig中直接读取配置信息,最后发现获取到的却是@project.name@这样的字符串
3.2.1 占位符 @@ 和 ${}
两种占位符都可以在配置文件中获取到 pom.xml 的属性值,但是有硬性条件(需要满足其一):
- 添加过滤器
- 引入spring-boot-starter-parent依赖
这就回到上面引发的问题了,为什么最后获取到的是@project.name@这样的字符串?因为 commons 工程一没有写过滤器,二没有引入spring-boot-starter-parent依赖
3.2.2 配置过滤器
<!-- 过滤资源文件 -->
<!-- 常见的场景:用来指定 Mapper 文件的位置 -->
<!-- 当设置 filtering 为 true 后,includes 中指定的文件就可以使用 @xx.xx@ 占位符方式引用到 Maven 中的属性了 -->
<!-- 而当工程中引入了 spring-boot-starter-parent 依赖时,可以直接使用 @xx.xx@ 占位符方式引用到 Maven 中的属性 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
- 当配置过滤器后,在system.properties配置文件中,使用占位符@@或${}都可以成功获取到 pom.xml 的属性值了
3.3 在Java代码中获取配置文件的属性值
使用@Value("${}")注解即可
3.4 其他
其实最后是在各自需要Swagger的服务工程中单独做的配置,因为需要Swagger的服务工程都是引入过spring-boot-starter-parent依赖;这里主要是作为一个知识点记录一下
服务工程单独的配置信息:
# swagger-ui 页面描述信息
osc:
swagger:
## 应用名称
name: @project.description@
## 版本号
version: @project.version@
4. 验证
4.1 接口
- 下载v1.4.5标签的代码或者对照本篇博客更改v1.4.4标签的代码
- 打开idea右侧工具栏中的Maven Projects
- 展开osc-commons->Lifecycle
- 先clean,再install
- 结束后打开osc-commons工程,找到刚刚打包的target -> classes -> config目录中的system.properties文件,发现源码中的@project.name@被自动替换成了osc-commons,证明成功从 pom.xml 文件中获取到了对应的属性值
- 这时再打开osc-commons工程的 pom.xml 文件,把resources节点注释掉(也就是### 3.2.2中配置的过滤器)
- 重复步骤2, 3, 4
- 结束后打开osc-commons工程,找到刚刚打包的target -> classes -> config目录中的system.properties文件,发现源码中的@project.name@依旧还是@project.name@
- 当然,由于在各自需要Swagger的服务工程中都做了配置,所以 swagger-ui 主页面是可以成功分别显示对应服务工程的描述信息的(应用名称和版本号)
- 启动所有工程,访问 http://localhost:8000/swagger-ui.html 查看效果
5. 结语
这篇过后,专门拉了一个分支,这个分支作为完整的SpringCloud全家桶基础架构,由于部分组件已经闭源了,所以不得不拥抱SpringCloudAlibaba了;当然,仅仅是把闭源的部分组件更换。
接下来,先进入一小段时间的SpringCloudAlibaba学习之旅,巴适。
希望能够帮助到你
over