Spring boot 在Spring Boot中使用@value注释有什么好处

Spring boot 在Spring Boot中使用@value注释有什么好处,spring-boot,Spring Boot,我是springboot新手,我正在为我的旧springboot应用程序进行代码清理。 下面的代码正在使用@Value注释从属性文件中注入字段值 @Value("${abc.local.configs.filepath}") private String LOCAL_ABC_CONFIGS_XML_FILEPATH; 我的疑问是,我们不能直接在同一个java类变量中硬编码值,而不是从属性文件中获取值吗 示例:private String LOCAL\u ABC\u CONF

我是
springboot
新手,我正在为我的旧
springboot
应用程序进行代码清理。 下面的代码正在使用
@Value
注释从属性文件中注入字段值

@Value("${abc.local.configs.filepath}")
private String LOCAL_ABC_CONFIGS_XML_FILEPATH;
我的疑问是,我们不能直接在同一个java类变量中硬编码值,而不是从属性文件中获取值吗

示例:
private String LOCAL\u ABC\u CONFIGS\u XML\u FILEPATH=“/ABC/config/ABC.txt”

对我来说,将来修改这些值会更容易,因为它将在同一个类中


从属性文件读取有什么好处,它会使代码解耦吗?

这种技术称为
外部化配置。您完全正确,可以在完全相同的类文件中定义常量。但是,有时,您的配置是不稳定的,或者可能会因部署到的环境而改变

例如:

场景1: 我有一个数据库连接细节变量,它将随着环境的变化而变化。请记住,您将在应用程序的基础上创建一个构建,并首先将其部署到开发人员,然后将同一个构建放到阶段,最后部署到生产环境

在外部定义配置有助于您在环境级别预先定义它们,并在任何地方部署相同的构建

场景2: 您已经生成并部署了一个构建,并发现常量存在错误。将这些配置外部化后,您就可以在环境级别上覆盖它并进行更改,而无需重新构建应用程序


要了解有关外部化技术的更多信息,请阅读:

此处@value用于从属性文件中读取值(它可以是任何环境,如dev、qa、prod),但我们在多个字段中写入@value,因此不建议使用@value,因此我们可以使用@configurableProperties(prefix=“somevalue>)并读取属性值`

    @configurableProperties(prefix="somevalue")
        class Foo{
        string name;
        string address;
        }

application.properties:  
somevalue.name="your name"    
somevalue.address="your address"

`

如果您希望生产机器上的文件位于不同的位置,该怎么办?您可以专门为生产重新编译代码,基本上使用未经测试的工件进行运行?将其外部化可以让您根据部署/environment/profile//..。@M.Deinum覆盖它。当您在您需要调整一些东西,跟踪更改,通过集成测试并简化回滚。