Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改Spring引导外部化配置时的向后兼容性_Java_Spring Boot_Backwards Compatibility_Spring Boot Configuration - Fatal编程技术网

Java 更改Spring引导外部化配置时的向后兼容性

Java 更改Spring引导外部化配置时的向后兼容性,java,spring-boot,backwards-compatibility,spring-boot-configuration,Java,Spring Boot,Backwards Compatibility,Spring Boot Configuration,是否有一种推荐的方法可以在外部化配置中引入重组/重命名,同时为仍然依赖旧配置结构的使用者保持向后兼容性 例如,给定一个库,该库在过去使用了通过@ConfigurationProperties定义的以下配置结构: 旧物业: 安: 旧财产:真实 另一个: 自定义属性:1234 该库的新版本将配置重新定义为以下内容: 我的图书馆: a-属性:true 另一处房产:1234 有没有一种好方法可以在保留现有用户兼容性一段时间的同时弃用旧结构?使用新版本库的使用者应该仍然能够使用old-properties

是否有一种推荐的方法可以在外部化配置中引入重组/重命名,同时为仍然依赖旧配置结构的使用者保持向后兼容性

例如,给定一个库,该库在过去使用了通过@ConfigurationProperties定义的以下配置结构:

旧物业: 安: 旧财产:真实 另一个: 自定义属性:1234 该库的新版本将配置重新定义为以下内容:

我的图书馆: a-属性:true 另一处房产:1234 有没有一种好方法可以在保留现有用户兼容性一段时间的同时弃用旧结构?使用新版本库的使用者应该仍然能够使用old-properties.an.old-property,并将其自动映射到my-library.a-property


我知道将属性标记为不推荐使用的功能,但我正在明确寻找一种方法来支持这两个版本以简化迁移。

Spring Boot Configuration Processor为此提供了一个注释。生成的元数据文件将包含任何原因/替换说明,如果使用带注释的属性,则会导致记录相应的弃用警告

有关基本示例或实际用例,请参见。
要为未映射到@ConfigurationProperties bean的属性实现相同的行为,您可以在META-INF/additional-spring-configuration-metadata.json中手动指定它们,请参阅参考和示例。

spring Boot configuration Processor为此提供了注释。生成的元数据文件将包含任何原因/替换说明,如果使用带注释的属性,则会导致记录相应的弃用警告

有关基本示例或实际用例,请参见。
要为未映射到@ConfigurationProperties bean的属性实现相同的行为,可以在META-INF/additional-spring-configuration-metadata.json中手动指定它们,请参阅以获取参考,还有一个例子。

我研究了Spring Boot如何处理被logging.file.name替换的属性,当他们直接在代码中实现回退时,我决定尝试类似的方法,在@Bean方法中创建新的@ConfigurationProperties,该方法处理从旧属性名称设置值(如果可用)

为简洁起见,使用Lombok的新配置结构如下所示:

导入龙目数据; @资料 公共类MyLibraryConfigurationProperties{ 私有财产; 私有财产; } @Bean方法现在负责读取旧值并将其应用于属性:

导入org.springframework.boot.context.properties.ConfigurationProperties; 导入org.springframework.context.annotation.Bean; 导入org.springframework.context.annotation.Configuration; 导入org.springframework.core.env.Environment; @配置 公共类MyLibrary配置{ @豆子 @ConfigurationPropertiesprefix=我的库 公共MyLibrary配置属性MyLibrary配置属性环境{ MyLibraryConfigurationProperties配置=新建MyLibraryConfigurationProperties; //回退到旧属性(如果可用) 如果environment.contains属性old-properties.an.old-property{ //在这里,我们还可以记录有关弃用的警告 config.setAPropertyenvironment.getPropertyLD-properties.an.old-property; } 返回配置; } }
如果新值也是通过配置设置的,它将覆盖旧属性中的值集。

我研究了Spring Boot如何处理被logging.file.name替换的,当他们直接在代码中实现回退时,我决定尝试类似的方法,在@Bean方法中创建新的@ConfigurationProperties,该方法处理旧属性中的值设置姓名(如有)

为简洁起见,使用Lombok的新配置结构如下所示:

导入龙目数据; @资料 公共类MyLibraryConfigurationProperties{ 私有财产; 私有财产; } @Bean方法现在负责读取旧值并将其应用于属性:

导入org.springframework.boot.context.properties.ConfigurationProperties; 导入org.springframework.context.annotation.Bean; 导入org.springframework.context.annotation.Configuration; 导入org.springframework.core.env.Environment; @配置 公共类MyLibrary配置{ @豆子 @ConfigurationPropertiesprefix=我的库 公共MyLibrary配置属性MyLibrary配置属性环境{ MyLibraryConfigurationProperties配置=新建MyLibraryConfigurationProperties; //回退到旧属性(如果可用) 如果environment.contains属性old-properties.an.old-property{ //在这里,我们还可以记录有关弃用的警告 config.setAPropertyenvironment.getPropertyLD-properties.an.old-property; } 返回配置; } }
如果新值也是通过配置设置的,它将覆盖旧属性中的值集。

我应该提到,我知道并且已经使用附加元数据将这些属性标记为不推荐的属性,我关心的是在一段时间内只支持这两个版本以简化迁移。感谢@DeprecatedConfiguration属性的提示,我只知道额外的-spring-configuration-metadata.json方式。我应该提到,我知道并且已经使用额外的元数据将这些属性标记为不推荐的,我关心的是在一段时间内只支持这两个版本以简化迁移。感谢@DeprecatedConfiguration属性的提示,我只知道额外的-spring-configuration-metadata.json方式。