Java 在SpringBoot应用程序启动时捕获Hibernate异常?
我正在尝试将SpringBoot1.2.6与HibernateJPA自动配置一起使用。它工作得很好;也就是说,它“神奇地”由entityManager创建,并使用我的spring.jpa.*属性为我完成所有开箱即用的配置 但是,在DB错误的情况下(无效凭证、DB不可访问等),我无法找到一种干净的方法在启动时捕获Hibernate异常 我想我可以抓住所有BeanCreationException并检查根本原因,但这似乎是一个相当大的难题:Java 在SpringBoot应用程序启动时捕获Hibernate异常?,java,spring,hibernate,spring-boot,Java,Spring,Hibernate,Spring Boot,我正在尝试将SpringBoot1.2.6与HibernateJPA自动配置一起使用。它工作得很好;也就是说,它“神奇地”由entityManager创建,并使用我的spring.jpa.*属性为我完成所有开箱即用的配置 但是,在DB错误的情况下(无效凭证、DB不可访问等),我无法找到一种干净的方法在启动时捕获Hibernate异常 我想我可以抓住所有BeanCreationException并检查根本原因,但这似乎是一个相当大的难题: ConfigurableApplicationCo
ConfigurableApplicationContext context;
try {
SpringApplication app = new SpringApplication(Application.class);
context = app.run(args);
} catch (Exception e) {
// check if it is a DB error.
if( ExceptionUtils.getRootCause(e) instanceof( HibernateException ) ){
System.out.println( "You are having trouble with the DB: " + ExceptionUtils.getRootCauseMessage(e) );
}
}
finally{
// finished so close the context
if( context != null )
context.close();
}
是否有一种更干净/整洁的方法可以做到这一点而不丧失使用自动配置的能力?此外,除了解析错误消息之外,是否有方法确定Hibernate/DB错误是什么(即:无效的creds、DB未验证等)。您可以尝试捕获
JDBCConnectionException
而不是捕获非常通用的HibernateException。这是用于数据库连接问题(包括不正确的数据库设置)的hibernateeexception
的子类
问题出在main()级别,实际上是Spring BeanCreationException。此外,BeanCreationException的根本原因只是一个普通的HibernateeException。这就是为什么我想找到一个更好的方法。我无法捕获此级别的JDBCConnectionException。GetMostSpecificCase()方法返回什么?此方法存在于NestedRuntimeException(BeanCreationException的父级)中。GetMostSpecificCase()仍显示HibernateException:(org.hibernate.HibernateException)org.hibernate.HibernateException:未设置“hibernate.dial”时,对方言解析信息的访问不能为null
。尽管我可以在更高的堆栈跟踪中看到2015-10-30 12:12:00571错误连接池-无法创建池的初始连接。java.sql.SQLException:用户“eric”@“localhost”的访问被拒绝(使用密码:YES)
@JackTheKnife no。。。我相信我没有,只是留下了一条一般性的错误信息。糟糕的解决方案,但当时找不到更好的方法