2016-09-27 9 views
1

に失敗した私は自分のアプリケーションをテストしようとするとトラブルに実行しています:以下のようにテストの実行が失敗したためコンフィグ負荷

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = MainConfiguration.class) 
public class ProductionDataRestClientTest { 

    @Test 
    public void testGetProductionDataAsync() { 

    } 

} 

MainConfigurationクラスは次のとおりです。

@Data 
@Configuration 
@Slf4j 
@PropertySource(value = { 
     "classpath:/conf/application.properties", "classpath:/conf/application.build.properties", 
     "file:${configPath}/application.properties" }, ignoreResourceNotFound = true) 
public class MainConfiguration { 

    @Value("${app.configName}") 
    private String configName; 

    @Value("${project.name}") 
    private String appName; 

    @Value("${project.version}") 
    private String appVersion; 

    @Value("${app.historySize}") 
    private int  historySize; 

    @Value("${app.processOnlyVisibleEnvironments}") 
    private Boolean processOnlyVisibleEnvironments; 

    @PostConstruct 
    private void logConfig() { 
     appName = WordUtils.capitalize(appName); 
     log.info("constructed config: " + configName); 
     log.info(this.toString()); 
    } 
} 

とアプリケーション.propertiesファイルはここにあります:

app.configName=Internal Classpath 
app.historySize=25 
app.processOnlyVisibleEnvironments=true 

client.timeout.connect=30000 
client.timeout.read=30000 

threading.pool.size.environmentProcessing=5 
threading.pool.size.webServiceRequesting=10 

私の問題は、その春はtを解決しないようです通常の処刑のように、彼値識別子、以下のスタックトレースがスローされるように:

Caused by: java.lang.NumberFormatException: For input string: "${app.historySize}" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:569) 
    at java.lang.Integer.valueOf(Integer.java:766) 
    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:194) 
    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113) 
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:464) 
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:437) 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195) 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:125) 
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:61) 
    ... 47 more 

私は、多くの異なるものを試してみました、任意の手掛かりを持っていない、何も働きました。事前に

感謝:)

+0

他の指定propertieファイル(例えば "ファイル:$ {}はconfigPath /application.properties" のいずれかがない)万が一、この設定を上書き?それが提供された情報からなぜそれが失敗しているのかを知ることは不可能です。 NumberUtils.java:194にブレークポイントを入れて、数値に変換できない特定の値を調べてから、その値をプロジェクト内で検索してみてください。 – kryger

+0

ちょっとkryger、 "$ {app.historySize}"を解析しようとしている値です。 configPathは指定されていないので、他のファイルもロードされません。残念ながら私はもっと情報を与えることはできませんが、それは非常に扱いにくく、なぜ@Valueアノテーションの文字列が解釈されないのか分かりません。 –

+0

他のすべてのプロパティを設定から削除してみます。私は@krygerに同意します。他のプロパティがあなたの最初のプロパティをオーバーライドしています。また、pathにはclasspath:conf/application.propertiesを指定する必要があります。 –

答えて

0

この問題を解決するために非常に単純な方法がありました:

// To resolve ${} in @Value 
@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

これは、ロードされたコンフィギュレーション・ファイルの方法であることがあり、プレースホルダを解決するのに役立ちます。助けるため

感謝;)

関連する問題