簡體   English   中英

如何在 Spring Boot 中使用 @ConfigurationProperties 注解

[英]How to use @ConfigurationProperties annotation in Spring Boot

我正在嘗試應用@ConfigurationProperties注釋來從application.yml文件中獲取一個映射到我需要它的代碼位置。

這是我到目前為止的代碼:

應用程序.yml

repository:
    type:
      big: big
      small: small
      medium: medium
    to:
     database:
      something: "STRING"

配置文件

@Configuration
@EnableConfigurationProperties
public class SnowflakeRepositoryConfig {

        @Bean
        @ConfigurationProperties(prefix = "repository.type")
        public DatabaseTypeMapping databaseTypeMapping() {
            return new DatabaseTypeMapping();
        }
    
        public static class DatabaseTypeMapping {
            public Map<Type, Type> typeMappingMigration;
    
            public void setMapping(Map<Type, Type> typeMappingMigration) {
                this.typeMappingMigration = typeMappingMigration; }
        }

@Bean
@ConfigurationProperties(prefix = "repository.to.database")
public BrandToDatabaseProperties brandToDatabaseProperties() {
    return new BrandToDatabaseProperties();
}

public static class BrandToDatabaseProperties {
    public Map<Brand, String> mapping;

    public void setMapping(Map<Brand, String> mapping) {
        this.mapping = mapping;
    }
}

在配置文件中,我將它應用到 serviceImpl 類,如下所示:

    @Bean
    public UserDataService getUserData(BrandToDatabaseProperties brandToDatabaseProperties, DatabaseTypeMapping databaseTypeMapping){
       return new UserDataServiceImpl(brandToDatabaseProperties.mapping, databaseTypeMapping.typeMappingMigration);
    }

serviceImpl.java類中,我像這樣包含它:

    public class UserDataServiceImpl implements UserDataService {
    
        private final Map<Type, Type> typeMappingMigration;
        private final Map<Brand, String> brandToDatabaseMapping;
    
        public UserDataServiceImpl(Map<Brand, String> brandToDatabaseMapping, Map<Type, Type> typeMappingMigration) {
this.brandToDatabaseMapping = Collections.unmodifiableMap(brandToDatabaseMapping);    
            this.typeMappingMigration = Collections.unmodifiableMap(typeMappingMigration);    
        }

當我嘗試啟動我的應用程序時,出現以下錯誤:

Failed to instantiate [service.UserDataService]: Factory method 'getUserData' threw exception; nested exception is java.lang.NullPointerException

我在這里缺少什么?

您不需要聲明DatabaseTypeMapping類型的 bean。 ConfigurationProperties注釋移動到類,並讓組件掃描拾取它。 或者,您可以在EnableConfigurationProperties注釋中指定類名。

我不能確定,但​​我認為ConfigurationProperties不應該在方法上聲明,它在邏輯上沒有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM