我是Spring boot的新手。
我正在为旧的Spring启动应用程序执行代码清理。
下面的代码使用@Value
注释从属性文件中注入字段值。
@Value("${abc.local.configs.filepath}")
private String LOCAL_ABC_CONFIGS_XML_FILEPATH;
我怀疑是不是从属性文件中获取值,我们不能直接硬编码同一java类变量中的值。
像(private String LOCAL_ABC_CONFIGS_XML_FILEPATH="/abc/config/abc.txt"
)
我将来更容易修改这些值,因为它将在同一个类中。
从属性文件中读取的优点是什么,它是否使代码解耦?。
答案 0 :(得分:1)
这里@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"
`
答案 1 :(得分:0)
此技术称为externalising configurations
。你完全可以在同一个类文件中定义常量。但是,有时,您的配置是不稳定的,或者可能会根据部署的环境而发生变化。
例如:
场景1: 我有一个DB连接细节的变量,这些变量会随环境而变化。请记住,您将从应用程序中创建一个构建并首先将其部署到Dev,然后将相同的构建部署到阶段,最后再进行生产。
在外部定义您的配置,可帮助您在环境级别预定义它们,并在任何地方部署相同的构建。
场景2: 您已经生成了一个构建并进行了部署,并发现常量不正确。将这些配置外部化后,您可以自由地在环境级别上覆盖它并在不重建应用程序的情况下进行更改。
要了解有关外部化技术的更多信息,请阅读:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html