如何在Micronaut中为@OpenAPIDefinition配置动态值
@OpenAPIDefinition注解动态取值配置方案
Micronaut OpenAPI原生支持@OpenAPIDefinition注解的占位符动态取值,你当前在Application.class上配置的以下写法可正常生效,是因为注解处理阶段默认扫描openapi.properties文件完成占位符替换:
@OpenAPIDefinition( info = @Info(title = "${info.title}", description = "${info.description}",version ="${info.version}"), servers = {@Server(url ="${server.context-path}")} )
跨配置文件、构建生成属性的引用只需要调整OpenAPI插件的属性加载规则即可,两个配置目标的实现方式如下:
引用application.properties中的micronaut.server.context-path属性
直接填写${micronaut.server.context-path}被识别为普通字符串,是因为OpenAPI注解处理器默认不会加载application.properties的配置项,需要在构建脚本中显式指定要加载的额外属性文件:
- Gradle项目配置(build.gradle):
tasks.named("openApi") { propertiesFile = files( "src/main/resources/openapi.properties", "src/main/resources/application.properties" ) }
- Maven项目配置(pom.xml):
<plugin> <groupId>io.micronaut.openapi</groupId> <artifactId>micronaut-openapi-maven-plugin</artifactId> <configuration> <propertiesFile>src/main/resources/openapi.properties,src/main/resources/application.properties</propertiesFile> </configuration> </plugin>
配置完成后,在注解中直接使用${micronaut.server.context-path}占位符即可读取到实际配置值。
引用build-info.properties中的build.version属性
build-info.properties是构建阶段生成的属性文件,默认输出路径为构建产物的META-INF目录下,只需要将该文件路径加入上述propertiesFile加载列表,同时保证OpenAPI生成任务在build-info生成任务之后执行即可:
- Gradle项目补充配置:
tasks.named("openApi") { dependsOn("generateBuildInfo") propertiesFile = files( "src/main/resources/openapi.properties", "src/main/resources/application.properties", "build/resources/main/META-INF/build-info.properties" ) }
- Maven项目需要调整插件执行顺序,将micronaut-openapi插件的执行阶段绑定在
process-classes阶段之后,同时把build-info.properties的路径追加到propertiesFile配置项中。
配置完成后,在@Info的version属性中使用${build.version}占位符即可正常读取构建生成的版本号。
内容的提问来源于stack exchange,提问作者Miguel Jr. Bermundo
相关产品推荐
相关产品推荐

