简单地说:当我将spring-boot-starter-security添加到build.gradle中时,会发生奇怪的事情。这是我的蒸馏代码(根本没有其他代码):
public class App {
public static void main(String[] args) {
try {
SpringApplication.run(AppConfiguration.class, args);
} catch(BeanCreationException e) {
System.out.printf("HURRAY: %s\n", e.getBeanName());
}
}
@Configuration
@EnableAutoConfiguration
@ComponentScan // !!! NOTE: extends WebMvcConfigurerAdapter !!!
public static class AppConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private MyService myService;
}
@Component
public static class MyService {
public MyService() {
throw new RuntimeException("Error");
}
}
}这是我的build.gradle
dependencies {
testCompile group: "junit", name: "junit", version: "4.11"
compile group: "org.springframework.boot", name: "spring-boot-starter-web", version: "1.0.0.RC5"
// compile group: "org.springframework.boot", name: "spring-boot-starter-security", version: "1.0.0.RC5" // HERE
}我期望的行为是BeanCreationException将被抛出,catch将打印HURRAY。它是这样工作的。当我试图在spring-boot-starter-security中添加build.gradle依赖项时,会发生奇怪的事情。一旦我取消注释这一行,抛出的异常是ApplicationContextException。如果我递归地调用getCause(),结果如下:
org.springframework.context.ApplicationContextException
org.springframework.boot.context.embedded.EmbeddedServletContainerException
org.apache.catalina.LifecycleException
org.apache.catalina.LifecycleException
org.apache.catalina.LifecycleException你可以看到,根本没有BeanCreationException。
当我运行这个应用程序时,日志上清楚地显示说在某个地方有一个BeanCreationException。
有可靠的方法来捕获BeanCreationException吗?
发布于 2014-03-29 07:09:39
BeanCreationException在另一个线程中被抛出( Security是一个过滤器,过滤器以一种特殊的方式在嵌入式容器中初始化)。我不确定我们能不能强迫Tomcat使用主线程(我试过一次,但这不一定意味着这是不可能的)。如果您可以改进它,请在github中提出建议。
https://stackoverflow.com/questions/22722653
复制相似问题