在SpringBoot中何处定义所有环境都通用的属性?

时间:2018-11-09 16:01:31

标签: java spring-boot

我几乎没有所有环境(例如spring.jpa.properties.hibernate.ejb.interceptor)共有的属性,这些属性保存在资源目录下的application.properties中。

我在基于环境的属性文件中定义了数据库属性,该属性在启动应用程序时通过命令行从外部传递:

java -jar -Dspring.config.location=<path-to-file> mySpringBootProject.jar

但是,当我从外部传递属性文件时,未设置spring.jpa.properties.hibernate.ejb.interceptor

即使在外部文件中,我也需要定义通用属性吗? 还是有一种方法可以在一个地方定义它们,而在不覆盖它们的情况下可以重用?

3 个答案:

答案 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相关技术的文件的文件扩展名,用于存储应用程序的可配置参数。使用属性文件的优点是,我们可以配置特定于环境(或在一段时间内易于更改)的东西,而无需更改代码。因此,继承公共属性不是一种好方法如果某个属性对于所有对象似乎都是静态的,例如环境,那么它不应该是属性。

但是,可能是我们拥有多个开发环境和生产环境,在这些环境中,我们将在用于开发目的的环境中共享相同的属性,并在生产环境中共享不同的属性。在这种情况下,我们可以创建一个公共属性文件,并在我们所有环境特定的属性文件中继承它。另一种情况可能是,在开发时,该属性在所有环境中都是相同的,但是我们希望将来可以根据需要提供更改属性的选项。