我几乎没有所有环境(例如spring.jpa.properties.hibernate.ejb.interceptor
)共有的属性,这些属性保存在资源目录下的application.properties中。
我在基于环境的属性文件中定义了数据库属性,该属性在启动应用程序时通过命令行从外部传递:
java -jar -Dspring.config.location=<path-to-file> mySpringBootProject.jar
但是,当我从外部传递属性文件时,未设置spring.jpa.properties.hibernate.ejb.interceptor
。
即使在外部文件中,我也需要定义通用属性吗? 还是有一种方法可以在一个地方定义它们,而在不覆盖它们的情况下可以重用?
答案 0 :(得分:1)
您可以使用多个配置文件执行此操作。例如,创建属性文件:
application-dev.properties
application-prod.properties
application.properties
将特定于环境的属性放在application-${env}.properties
文件中,并将常用属性放在application.properties
中。
有多种方法可以告诉spring使用哪些配置文件,例如--spring.profiles.active
标志。
有关属性文件搜索顺序的更多详细信息,请参见Spring Boot documentation。
答案 1 :(得分:0)
application.properties
通常会被Boot项目覆盖。相反,您可以在不冲突的位置(例如src/main/resources/my/package/foo.properties
)添加属性文件,并在自动配置文件上使用@PropertySource
来添加它。
答案 2 :(得分:0)
属性是主要用于Java相关技术的文件的文件扩展名,用于存储应用程序的可配置参数。使用属性文件的优点是,我们可以配置特定于环境(或在一段时间内易于更改)的东西,而无需更改代码。因此,继承公共属性不是一种好方法。 如果某个属性对于所有对象似乎都是静态的,例如环境,那么它不应该是属性。
但是,可能是我们拥有多个开发环境和生产环境,在这些环境中,我们将在用于开发目的的环境中共享相同的属性,并在生产环境中共享不同的属性。在这种情况下,我们可以创建一个公共属性文件,并在我们所有环境特定的属性文件中继承它。另一种情况可能是,在开发时,该属性在所有环境中都是相同的,但是我们希望将来可以根据需要提供更改属性的选项。