Java 在SpringBoot应用程序启动时捕获Hibernate异常?

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

我正在尝试将SpringBoot1.2.6与HibernateJPA自动配置一起使用。它工作得很好;也就是说,它“神奇地”由entityManager创建,并使用我的spring.jpa.*属性为我完成所有开箱即用的配置

但是,在DB错误的情况下(无效凭证、DB不可访问等),我无法找到一种干净的方法在启动时捕获Hibernate异常

我想我可以抓住所有BeanCreationException并检查根本原因,但这似乎是一个相当大的难题:

    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。。。我相信我没有,只是留下了一条一般性的错误信息。糟糕的解决方案,但当时找不到更好的方法