Spring Boot 配置处理器为此提供了@DeprecatedConfigurationProperty 注解。生成的元数据文件将包含任何原因/替换说明,如果使用带注释的属性,则会记录相应的弃用警告。
有关基本示例,请参阅here。以下来自CassandraProperties.java 的 sn-p 显示了一个实际用例,其中 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);
}
要为未映射到@ConfigurationProperties bean 的属性实现相同的行为,您可以在META-INF/additional-spring-configuration-metadata.json 中手动指定它们,并在org.springframework.boot:spring-boot-properties-migrator 上添加运行时依赖项。参考Spring Boot docs。
spring-boot-autoconfigure 中的以下 sn-p 显示了一个实际用例,其中 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"
}
},
如果您设置了已弃用的属性server.servlet.path=/foo,替换属性@Value("${spring.mvc.servlet.path}") 将评估为/foo,并且将在启动时记录弃用通知。