我正在尝试修改我的微服务,以维护单个应用程序,而不是维护多个配置文件。最初,我维护不同的配置文件,并且在不同的环境中重复通用配置。现在的策略是把一切都转移到价值观上。在配置映射中维护特定于环境的值。我面临的问题是,我的应用程序yml现在看起来非常通用,带有占位符,并且由于同样的原因,测试运行失败,因为我无法为application.yml中的每个配置提供默认值。原因是,例如:mongodb集群端点格式在本地与其他环境中不同。我设法将本地特定的yaml文件放在test/resources下,但不确定这是正确的方法。无论如何,我需要在main/resources下维护本地特定的yaml以便在本地运行。实际上我在测试资源下也复制了它。有没有更好的方法指向测试来加载应用程序本地。yml下的主要资源,这样我就可以避免重复,或者有更好的方式做这个作为一个整体?
1。在一个文件中使用多个配置
您可以将所有配置添加到一个属性文件中,如下所示
spring.application.name: test. ## Used for all profiles
---
spring.config.active.on-profile:dev
spring.database.host: localhost
spring.database.name: testing
---
spring.config.active.on-profile:prod. ##You can use spring.profiles:prod
spring.database.host: localhost
spring.database.name: testing
---
---
标记yml文档的分割位置,而#---
标记属性文件的分割位置。
多文档属性文件通常与以下激活属性一起使用
spring.config.activate.on-profile
spring.config.activate.on.on-cloud-platform
未指定概要文件名称的所有属性定义将在所有概要文件上使用。在上面的例子中,spring.application.name
将在所有配置文件dev or prod
上使用。
运行应用程序时,您可以手动指定配置文件,也可以在yml或属性中设置整个应用程序中使用的属性。
spring.application.name: test
spring.profiles.active: prod
2。测试应用程序
当运行需要访问yml(property)file
中的属性的测试时,
不需要重新定义配置。只需添加@ActiveProfile("profile-name")
你的测试
例如:
@ActiveProfiles("dev")
@SpringBootTest(webEnvironmentSpringBootTest.WebEnvironment.RANDOM_PORT)