当前位置: 首页 > 知识库问答 >
问题:

Spring Boot的不可变配置

宋高扬
2023-03-14

我正试图找到一种方法,使用Immutables库创建数据类来保存Spring Boot应用程序的配置。

我的数据配置类是:

@Value.Immutable
@JsonDeserialize(as = ImmutableAuthConfig.class)
public interface AuthConfig {
    String domain();
    String clientId();

    @Value.Redacted
    String clientSecret();
}

而主配置类设置为

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
    private ImmutableAuthConfig auth;

    public AuthConfig getAuth() {
        return auth;
    }

    public void setAuth(ImmutableAuthConfig auth) {
        this.auth = auth;
    }
}

我尝试过使用ImmutableAuthConfig或仅使用AuthConfig作为字段的一些变体,但没有任何改进。未拾取配置,并且在应用程序启动后,配置的auth字段保持为null

用传统的POJO替换AuthConfig类的内容可以解决这个问题,但是我更喜欢不可变的对象。有没有办法说服Spring与不可变库生成的类接口?

共有1个答案

易骁
2023-03-14

该库对可修改类的支持提供了一种非常接近我所搜索的方法。

@Value.Modifiable
public interface AuthConfig {
    String domain();
    String clientId();

    @Value.Redacted
    String clientSecret();
}

这将创建类ModifiableAuthConfig,该类提供满足Spring的JavaBeanBinder的接口,该接口用于反序列化配置。

此外,还需要提供可变AuthConfig类的实例,然后Spring可以填充该类:

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class Config {
    private ImmutableAuthConfig auth = ModifiableAuthConfig.create();

    public AuthConfig getAuth() {
        return auth;
    }
}

随后,可以通过AuthConfig接口使用加载的配置,该接口不提供变异方法。

 类似资料:
  • 本文向大家介绍SpringBoot+docker环境变量配置详解,包括了SpringBoot+docker环境变量配置详解的使用技巧和注意事项,需要的朋友参考一下 项目中遇到springBoot+docker需要配置不同环境变量的问题,做个简单的总结: 1.开发环境ide中启动项目 可以通过ide的环境变量参数配置,启动之后使用哪个配置,比如 这样就使用application-test.yml中的

  • 刚开始学习shiro, 实现的效果非常简单,首页点击添加(/user/add),应该能直接访问. 而点击更新(/user/update),应该提示登录.但是实际都可以直接点开,不知道哪里出问题了,shiro的配置没生效,请高手赐教,谢谢 环境:java 17 springboot 3.1.1 shiro 1.11.0 pom.xml controller/MyController.java res

  • 问题内容: 我指的是Apple的Swift编程指南,以了解如何用Swift语言创建可变/不可变对象(数组,字典,集合,数据)。但是我不明白如何在Swift中创建一个不可变的集合。 我希望在Objective-C中看到以下Swift中的等效项 不变数组 可变数组 不变字典 可变字典 问题答案: 创建不可变数组 第一种方式: 第二种方式: 创建可变数组 将对象追加到数组 辞典 创建不可变字典 创建可变

  • 下面是我的pom.xml文件:

  • <dependencyManagement> <dependencies> <dependency> <!--Import dependency management from SpringBoot--> <groupId>org.springframework.boot</groupId>

  • 本文向大家介绍python不可变变量?相关面试题,主要包含被问及python不可变变量?时的应答技巧和注意事项,需要的朋友参考一下 不可变对象是指不可以被引用改变的对象,如字符串 #