我正在使用带有启动器的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
那很尴尬。我希望看到一个像应用程序值一样的缺失值。
答案 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 ...
的内容