spring-configuration-metadata 无法正常生成properties 问题记录

今天碰到一个很奇葩的问题。在使用spring-boot-configuration-processor生成spring-configuration-metadata.json文件的时候发现properties域没有正常生成。如下:

{
  "groups": [
    {
      "name": "wall",
      "type": "cn.twh.wall.config.WallConfig",
      "sourceType": "cn.twh.wall.config.WallConfig"
    }
  ],
  "properties": [],
  "hints": []
}

问题排查步骤:

1、排查pom文件是否依赖了

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

2、排查pom的build域是否使用了插件:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<proc>none</proc><!-- 该配置必须存在 --> 
		<source>${jdk.version}</source>
		<target>${jdk.version}</target>
		<encoding>utf-8</encoding>
	</configuration>
</plugin>

3、排查配置类:

package cn.twh.wall.config;

import java.util.HashMap;
import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

@RefreshScope
@Configuration
@ConfigurationProperties(prefix = "wall", ignoreUnknownFields = true)
public class WallConfig {
	/** 
	 * 默认失败率
	 */
	private int failRate;
	
	/** 
	 * 默认超时率
	 */
	private int timeOutRate;
	
	/** 
	 * 接口失败率
	 */
	private Map<String,Integer> interfaceFailRate = new HashMap<>();
	
	/** 
	 * 接口失败率
	 */
	private Map<String,Integer> interfaceTimeOutRate = new HashMap<>();
	
	/** 
	 * 接口失败标志
	 */
	private Map<String,String> interfaceFailFlag = new HashMap<>();
	
	/** 
	 * 接口超时标志
	 */
	private Map<String,String> interfaceTimeOutFlag = new HashMap<>();

	public void setFailRate(int failRate) {
		this.failRate = failRate;
	}

	public void setTimeOutRate(int timeOutRate) {
		this.timeOutRate = timeOutRate;
	}

	public void setInterfaceFailRate(Map<String, Integer> interfaceFailRate) {
		this.interfaceFailRate = interfaceFailRate;
	}

	public void setInterfaceTimeOutRate(Map<String, Integer> interfaceTimeOutRate) {
		this.interfaceTimeOutRate = interfaceTimeOutRate;
	}

	public void setInterfaceFailFlag(Map<String, String> interfaceFailFlag) {
		this.interfaceFailFlag = interfaceFailFlag;
	}

	public void setInterfaceTimeOutFlag(Map<String, String> interfaceTimeOutFlag) {
		this.interfaceTimeOutFlag = interfaceTimeOutFlag;
	}
	/**
	 * 获取api的失败权重
	 * @param api
	 * @return
	 */
	public int getFaildRate(String api) {
		if(interfaceFailRate.containsKey(api)) {
			return interfaceFailRate.get(api);
		}else {
			return failRate;
		}
	}
	/**
	 * 获取api的超时权重
	 * @param api
	 * @return
	 */
	public int getTimeOutRate(String api) {
		if(interfaceTimeOutRate.containsKey(api)) {
			return interfaceTimeOutRate.get(api);
		}else {
			return timeOutRate;
		}
	}
	
	public boolean containsTimeOutFlag(Map<?,?> data) {
		// TODO 
		return false;
	}
}

问题分析:

spring-configuration-metadata.json有生成说明插件配置无误,properties没有生成说明肯定问题在于配置类的写法有问题。

百度无果,查官方文档,发现有如下描述:

Properties are discovered through the presence of standard getters and setters with special handling for collection types (that is detected even if only a getter is present). 
The annotation processor also supports the use of the @Data, @Getter, and @Setter lombok annotations.

翻译:通过标准的Get和Set发现Properties属性,并且特殊处理了集合类。同时它支持了lombok的 @Data,@Getter,@Setter注解方式获取。

由此可见,我这边的问题是由于没有写标准Get方法导致的,用Ide加上Get方法,成功生成出对应Properties。

其他小伙伴可以尝试下lombok。或许会简单很多

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值