Spring Boot Configuration Processor@DeprecatedConfigurationProperty
为此目的提供了注解。生成的元数据文件将包含任何原因/替换说明,如果使用带注释的属性,则会记录适当的弃用警告。
有关基本示例,请参见此处。CassandraProperties.java中的以下代码段显示了一个实际用例,在该用例中spring.data.cassandra.cluster-name
已弃用spring.data.cassandra.session-name
. 通过简单地调用 getter/setter 来处理不推荐使用的属性的 getter/setter 中的替换属性来处理向后兼容性:
public String getSessionName() {
return this.sessionName;
}
public void setSessionName(String sessionName) {
this.sessionName = sessionName;
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "spring.data.cassandra.session-name")
public String getClusterName() {
return getSessionName();
}
@Deprecated
public void setClusterName(String clusterName) {
setSessionName(clusterName);
}
要为未映射到 bean 的属性实现相同的行为,@ConfigurationProperties
您可以手动指定它们META-INF/additional-spring-configuration-metadata.json
并在org.springframework.boot:spring-boot-properties-migrator
. 请参阅Spring Boot 文档以供参考。
以下来自spring-boot-autoconfigure的片段显示了一个实际用例,其中server.servlet.path
不推荐使用spring.mvc.servlet.path
. 向后兼容性由PropertiesMigrationListener处理,它“自动重命名具有匹配替换的键并记录发现的内容的报告。” :
{
"name": "server.servlet.path",
"type": "java.lang.String",
"description": "Path of the main dispatcher servlet.",
"defaultValue": "/",
"deprecation": {
"replacement": "spring.mvc.servlet.path",
"level": "error"
}
},
如果您设置 deprecated 属性server.servlet.path=/foo
,则替换属性@Value("${spring.mvc.servlet.path}")
将评估为/foo
,并且将在启动时记录弃用通知。