【问题标题】:Read Multiple Properties File using spring profiles in Spring Boot在 Spring Boot 中使用 spring 配置文件读取多个属性文件
【发布时间】:2021-11-27 09:08:30
【问题描述】:

我正在尝试在 Spring Boot 中加载 2 个属性文件。 其中之一包含元数据(数据库连接和其他此类属性)。另一个包含业务逻辑(上游和下游实体之间的映射。这种映射在 Dev 和 Prod 中是不同的,因此不能为这些提供单个资源文件)。

我想将 Spring Profiles 用于不同的环境(Dev、Stage、Prod)。 因此,我在 src/main/resources 1 中为每个环境创建了 3 个不同的文件夹。 使用弹簧配置文件,我知道如何拥有特定于环境的 application-env.properties 文件。但是,我无法继续讨论如何将其用于我的用例。

PS:不添加任何代码sn-p,因为问题不需要。

【问题讨论】:

    标签: java spring spring-boot spring-profiles


    【解决方案1】:

    这是来自the docs的示例:

    $ java -jar myproject.jar --spring.config.location=\
        optional:classpath:/default.properties,\
        optional:classpath:/override.properties
    

    您也可以在启动 Spring Boot 之前在代码中定义它:

    public static void main(String[] args) {
        System.setProperty("spring.config.location", "optional:classpath:/default.properties,optional:classpath:/override.properties");
        SpringApplication.run(Application.class, args);
    }
    

    要为您的应用特定属性使用自定义前缀,您可以定义 @ConfigurationProperties 类:

    @Data
    @ConfigurationProperties(prefix = "app.mapper")
    public class MapperProperties {
    
        private String foo;
    }
    

    并在任何组件中使用它:

    @Component
    @RequiredArgsConstructor
    @EnableConfigurationProperties
    public class YourComponent {
        
        private final MapperProperties properties;
    }
    

    【讨论】:

    • 我可以为每个资源使用自定义属性键,而不是使用“spring.config.location”并传递多个属性文件吗?例如:app.mapper = "dev/mapper.properties", app.config="dev/application.properties"?我问这个是因为映射器被解析并加载到一个 Properties 对象中。
    • 我不确定您要达到什么目的……来自所有位置的所有键都合并在一起形成一个配置。
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 2015-01-16
    • 2016-04-29
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多