2016-08-01 10 views
1

私はスターターでSpring Bootを使用しています。私がスターターを誤って構成した場合(欠落した値または定義されていない値が定義されている)、 "欠落値"の代わりに "欠落したBean"というエラーメッセージが表示されます。バグを見つけるのはかなり難しいです。Spring Starter:欠損値の代わりにBeanが見つからない

私のスターターは、キーmy.starter.valueが欠落している場合、私はエラーを見てみたいと思いますspring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.MyStarterConfiguration 

@ConditionalOnProperty(name = "my.starter.value") 
@Configuration 
public class MyStarterConfiguration { 

    @Bean 
    public MyStarterExample myStarterExample(@Value("${my.starter.value}") String s) { 
     return new MyStarterExample(s); 
    } 

のように見えます"my.stater.value is missing"というメッセージが表示されます。残念ながら、それは豆が欠けているだけを表示します。それはあまりにも不正確です。このようなエラーメッセージは、メインアプリケーションに値がない場合に表示されます。

[...] org.springframework.beans.factory.NoSuchBeanDefinitionException:タイプなし予選豆[com.example.MyStarterExample [...]

あなたは私を設定するために助けることができます私のスターターのためのより正確なエラーメッセージを印刷するには?


再現方法:今 ダウンロード完全なソースhttps://drive.google.com/file/d/0BzbrQ3P_g0Z3U2dxbGE0enR1ZHM/view?usp=sharing

unzip my.problem.zip 
cd my.starter/ 
mvn clean install 
cd ../my.application/ 
mvn clean package 
java -jar target/my.application-0.0.1-SNAPSHOT.jar 

メインアプリケーションの設定ミスを犯し値のsrc /メイン/リソース/ application.properties

my.starter.value=my.starter.value 
my.app.value_=my.app.value 

再起動

とりわけ、エラーメッセージがある
mvn clean package 
java -jar target/my.application-0.0.1-SNAPSHOT.jar 

java.lang.IllegalArgumentExceptionが:プレースホルダ文字列値の 'my​​.app.value' "$ {my.app.value}"

を解決できませんでした。

これは問題ありません。

は今のsrc /メイン/リソース/ application.propertiesは、Bean

が欠けについてだけ、エラーメッセージがあり、再起動

mvn clean package 
java -jar target/my.application-0.0.1-SNAPSHOT.jar 

my.starter.value_=my.starter.value 
my.app.value=my.app.value 

スターターの値を誤って設定します

[...] org.springframework.beans.factory.NoSuchBeanDefinitionException :タイプの修飾Beanはありません[...]

これは厄介です。私は、アプリケーションの価値のような欠損値を見たいと思います。

+0

この場合、それはエラーメッセージ java.lang.IllegalArgumentExceptionがを見ることが@ConditionalOnPropertyを除去するのに十分です:文字列値にプレースホルダ「my.starter.value」を解決できませんでした「$ {} my.starter.value」 生産中の私のコードはより複雑で、この「修正」は役に立ちません。私は生産的なこの単純な例の違いを再考する必要があります... –

答えて

0

Iは各

@ConditionalOnProperty 
@ConditionalOnBean 

を除去した後、私は誤って設定値を含む予想されるエラーメッセージを取得します。

必要性は、私が@ConditionOn ...

1

を使用する必要があるためにあなたが明示的に「この@Configurationプロパティmy.starter.valueが存在し、falseと等しくない場合にのみ適用されます」basically means@ConditionalOnProperty(name = "my.starter.value")を、使用しているものルックアップします。だから、春のブートは、my.starter.valueプロパティ(名前を変更したもの)がない場合、その設定は適用されず、MyStarterExample beanが作成されないため、そのbeanが必要な時点でNoSuchBeanDefinitionExceptionになります。

関連する問題