首页 > 解决方案 > Spring 自动配置尝试从 application.properties 设置一些 bean 值,而我只想在其他地方使用这些信息?

问题描述

所以我在我的应用程序中使用了 keycloak,我有一些值application.properties

keycloak.auth-server-url            = http://10.10.10.10:1010/auth
keycloak.resource                   = test-client
keycloak.credentials.secret         = <very-big-secret>
keycloak.realm                      = test-realm

Spring使用这些数据配置keycloak连接,但我也在我的代码中使用它们,所以我有一个这样的配置:

@Data
@Configuration
@ConfigurationProperties(prefix = "keycloak")
public class KeycloakConfig {
    private String authServerUrl;
    private String realm;
    private String resource;
    private Credentials credentials;
}

我在 keycloak 中有一个管理员用户,我希望它是 application.properties 中的凭据,如下所示:

keycloak.admin.username=admin.admin 
keycloak.admin.password=changeit

所以我试图将我的配置类更改为:

@Data
@Configuration
@ConfigurationProperties(prefix = "keycloak")
public class KeycloakConfig {
    private String authServerUrl;
    private String realm;
    private String resource;
    private Credentials credentials;
    private Admin admin;
}

@Data
public class Admin {
    private String username;
    private String password;
}

但是当我尝试像这样运行应用程序时,我认为 spring 尝试设置 keycloak 的值(.admin 部分)并且它没有启动:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target [Bindable@1cd5e41 type = org.keycloak.adapters.springboot.KeycloakSpringBootProperties, value = 'provided', annotations = array<Annotation>[@org.springframework.boot.context.properties.ConfigurationProperties(ignoreInvalidFields=false, ignoreUnknownFields=false, prefix=keycloak, value=keycloak)]] failed:

    Property: keycloak.admin.password
    Value: changeit
    Origin: "keycloak.admin.password" from property source "applicationConfig: [classpath:/application.properties]"
    Reason: The elements [keycloak.admin.password,keycloak.admin.username] were left unbound.
    Property: keycloak.admin.username
    Value: admin.admin
    Origin: "keycloak.admin.username" from property source "applicationConfig: [classpath:/application.properties]"
    Reason: The elements [keycloak.admin.password,keycloak.admin.username] were left unbound.

Action:

Update your application's configuration

是否可以将.admin零件放在下面,keycloak或者我必须创建一个新课程,例如:

@Data
@Configuration
@ConfigurationProperties(prefix = "my-keycloak")
public class MyKeycloakConfig {
    private Admin admin;
}

和:

my-keycloak.admin.username=admin.admin 
my-keycloak.admin.password=changeit

标签: spring-boot

解决方案


我不熟悉 KeyCloak,但您可以注入由 KeyCloak 初始化的读取属性的 bean。


推荐阅读