2016-10-12 6 views
1

自動設定から特定のプロパティを除外することができますが、私はエラー以下のように得た:は私が春ブートを使用して、ファイルシステム、 から外部のプロパティファイルをロードするために「PropertySourcesPlaceholderConfigurer」を使用しようとしている

Binding to target [email protected]1999 failed: 

    Property: server.environment 
    Value: BETA 
    Reason: Failed to convert property value of type [java.lang.String] to required type [org.springframework.core.env.Environment] for property 'environment'; ... 

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true) 
public class ServerProperties 
     implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered { 

    ... 
    private Environment environment; 
    ... 
} 

だから、「サーバー」接頭辞で任意のプロパティを「解析」しようとします:春ブートがに自動設定「ServerProperties」しようとすると「ServerPropertiesは」のように見えるからです。

残念ながら、私たちのレガシープロパティファイルは

server.environment=BETA 

と呼ばれる無関係なプロパティが含まれているために起こるので、スプリングブートは、「環境」のオブジェクトに文字列「BETA」を変換しようとします。

spring-bootの自動設定から「server.environment」を除外できる方法はありますか?

+0

私的環境環境を除外できます。またはこれを改名したか? –

答えて

1

私はあなたが単一のプロパティを除外することはできませんが、StringEnvironmentに変換しながらオリジナルのEnvironmentオブジェクトを保存するようにトリックブートを作ることはできます。

@Component 
@ConfigurationPropertiesBinding 
class OriginalEnvironmentPreservingStringToEnvironmentConverter implements GenericConverter { 
    private static final Set<ConvertiblePair> CONVERTIBLE_TYPES; 

    static { 
     Set<ConvertiblePair> types = new HashSet<>(); 
     types.add(new ConvertiblePair(String.class, Environment.class)); 
     CONVERTIBLE_TYPES = Collections.unmodifiableSet(types); 
    } 

    private final Environment environment; 

    public OriginalEnvironmentPreservingStringToEnvironmentConverter(Environment environment) { 
     this.environment = environment; 
    } 

    @Override 
    public Set<ConvertiblePair> getConvertibleTypes() { 
     return CONVERTIBLE_TYPES; 
    } 

    @Override 
    public Object convert(final Object o, final TypeDescriptor typeDescriptor, final TypeDescriptor typeDescriptor1) { 
     return environment; 
    } 
} 

でも、私はどんな副作用がないかどうかわかりません。簡単なシナリオでは正常に動作します。

関連する問題