Spring Starter:缺少Bean而不是缺少值

时间:2016-08-01 09:03:19

标签: java spring-boot

我正在使用带有启动器的Spring Boot。当我错误配置启动器(缺少或错误定义的值)时,它会输出“missing bean”错误消息而不是“缺失值”。这很难找到错误。

我的首发看起来像

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

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

使用 spring.factories

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

如果缺少密钥 my.starter.value ,我希望看到一条错误消息“my.stater.value is missing”。不幸的是,只打印缺少的bean。这太不准确了。如果主应用程序缺少值,则会打印此类错误消息。

  

[...] org.springframework.beans.factory.NoSuchBeanDefinitionException:没有[com.example.MyStarterExample [...]

类型的限定bean

您能帮我配置为我的首发打印更准确的错误消息吗?

如何重现: 下载完整的来源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 / main / resources / 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 / main / resources / 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

只有关于遗漏一个bean的错误消息

  

[...] org.springframework.beans.factory.NoSuchBeanDefinitionException:没有[com.example.MyStarterExample [...]

类型的限定bean

那很尴尬。我希望看到一个像应用程序值一样的缺失值。

2 个答案:

答案 0 :(得分:1)

您明确使用@ConditionalOnProperty(name = "my.starter.value")basically means仅在属性@Configuration存在并且不等于my.starter.value时才应用此false。所以Spring启动就是这样 - 当没有my.starter.value属性(你重命名它)时,它不应用那个配置并且没有创建MyStarterExample bean,这导致NoSuchBeanDefinitionException at需要该bean的地方。

答案 1 :(得分:0)

我删除了每个

user

我收到包含错误配置值的预期错误消息。

需要查找我应该使用@ConditionOn ...

的内容