spring-boot-configuration-processor
为外部提供的与可变前缀一起使用的配置属性生成或提供元数据。我们使用配置属性功能使用不同的前缀多次绑定属性。
@ConfigurationProperties(prefix = "client-a")
@Bean
public MyClientProperties clientAproperties() {
return new MyClientProperties();
}
@ConfigurationProperties(prefix = "client-b")
@Bean
public MyClientProperties clientBproperties() {
return new MyClientProperties();
}
只要MyClientProperties
类在我的spring-boot项目中是本地的,spring-boot-configuration-processor
就可以为我使用的每个前缀生成元数据。特别是,description
元数据是从类的字段级javadoc中提取的:
public class MyClientProperties {
/**
* Web service remote endpoint url
*/
public String endpoint = "http://localhost:8080/services";
...
}
生成的元数据
{
"name": "client-a.endpoint",
"type": "java.lang.String",
"description": "Web service remote endpoint url",
"sourceType": "com.example.client.MyClientProperties",
"defaultValue": "http:\/\/localhost:8080\/services"
},
...
{
"name": "client-b.endpoint",
"type": "java.lang.String",
"description": "Web service remote endpoint url",
"sourceType": "com.example.client.MyClientProperties",
"defaultValue": "http:\/\/localhost:8080\/services"
},
一旦将类移到外部jar依赖项以便在多个
项目,spring-boot-configuration-processor
无法访问属性类型的源代码。
description
和defaultValue
元数据不再可用。
{
"name": "client-a.endpoint",
"type": "java.lang.String",
"sourceType": "com.example.client.MyClientProperties"
},
...
{
"name": "client-b.endpoint",
"type": "java.lang.String",
"sourceType": "com.example.client.MyClientProperties"
},
如果MyClientProperties
仅用于固定前缀,则可以运行spring-boot-configuration-processor
在外部jar模块中,并将生成的metatdata.json文件打包。生成的元数据将可见
在my-client
前缀下使用的spring-boot应用程序的上下文中。
@@ConfigurationProperties(prefix = "my-client")
public class MyClientProperties {
...
}
我需要一种从外部提供的访问description
和defaultValue
元数据的机制
属性类位于正在使用的spring-boot应用程序选择的动态前缀之下。
即使经过大量研究,我仍未找到使这种情况起作用的方法。我应该监督某些事情吗?还是它更适合作为增强请求而不是问题?
答案 0 :(得分:0)
请考虑在creating an issue前稍等。
如果未与MyClientProperties
一起使用,则注释处理器将无法访问@ConfigurationProperties
的源模型。如果没有源模型,则无法访问Javadoc和默认值。
答案 1 :(得分:0)
任何有兴趣的人都应该观看this spring-boot enhancement issue。