Springboot疑难杂症(一) --关于自定义stater的yml无法提示的问题

1.前言

博主在以前在搭建架构的时候就碰到了类似的情况,就是在使用@EnableConfigurationProperties注解的时候,不管怎样,在项目中引入了该starter的情况下依然不发自动的提示properties里面的属性,以至于造成了特别大的麻烦,对于我们程序员来说,记忆属性方法这些东西是异常痛苦的事情。

@Data
@ConfigurationProperties(prefix = "properties")
public class DefaultProperties {

    @NestedConfigurationProperty
    public SwaggerProperties swagger;
}
--------以上为properties
properties:
  swagger:
    type: service
    packages: com.szfy.notice.controller
    api-tittle: '尚志逢源公告模块 swagger文档'
    service-url:
    writer-name: '王乐'
    api-des: '更多请关注石墨文档'
    version: '1.0.0'
------无法识别,只能一个个的敲击,异常痛苦

2.解决方案

网上的解决方案大多由头无尾,甚至直接搜索yml无法提示根本搜索不要有效的解决方案。
原因如下:

  • Eclipse不会出现这类的问题,只有idea或者其他的ide才会有无法识别的情况。博主之前用eclipse开发的时候没出现无法提示的情况(很坑)。
  • 导入spring-boot-configuration-processor依然无法解决(能解决个鬼!!!)
  • 网上有介绍创建spring-configuration-metadata.json文件的方式(网上大多是开发大牛,根本不介绍细节,以至于不会创建)
    综合锁上,博主会基于第三种解决方案给出最详细的解答

3.引入依赖包

<dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-configuration-processorartifactId>
			<optional>trueoptional>
		dependency>

这个包必须有,不然其他的无法做。

4.配置idea

网上讲解的创建spring-configuration-metadata.json,这个文件过于繁琐,手动写基本是不可能,所以这里有简单的生成方式,生成后只需要加以修改就行。

setting>Build,execution,deployment>Compiker>Annotation Processors,勾选Enable annotation processing

Springboot疑难杂症(一) --关于自定义stater的yml无法提示的问题_第1张图片

5.打包编译starter(重点)

  • 首先作为一个老鸟,在编译的时候必须得maven clean,不然上次你编译打包的东西有误你自己还认为是正确的。
  • 然后maven compile(切记,starter的类型必须为jar,不能为pom,不然你根本找不到为什么会有问题!!!)
  • maven install,老鸟必须要将项目打包到本地服务,别问为什么,问就是经验。

在target目录下,会生成一个spring-configuration-metadata.json文件,看吧,不需要手动创建了,有的你在starter创建了,没有打包仍然无效。
Springboot疑难杂症(一) --关于自定义stater的yml无法提示的问题_第2张图片

6.additional-spring-configuration-metadata.json文件创建

这个文件是对上一个文件的补充说明,创建方式也很简单

  • 1.将target目录下的spring-configuration-metadata.json文件复制到resource目录下的META-INF下,有人问没有咋办,问的人都不会boot,开个玩笑,没有直接创建就行。
  • 将文件改成标题的名字,继续maven clean ,compile,install。
  • target目录下会生成一个additional-spring-configuration-metadata.json文件,这样补充文件就完成了。

7.总结

写博文不易,期望给个赞或者关注。

你可能感兴趣的:(springboot)