简体   繁体   English

在 Spring Boot 中排除 Hibernate 不起作用

[英]Exclude Hibernate in Spring Boot not working

I'm trying to start JUnit tests wihout hibernate.我正在尝试在没有休眠的情况下启动 JUnit 测试。 My Application class:我的应用程序类:

@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class,
    DataSourceAutoConfiguration.class, JpaBaseConfiguration.class, WebMvcAutoConfiguration.class })
@ComponentScan("my.base.package")
public class TestContext {

  public static void main(String[] args) {
    SpringApplication.run(TestContext.class, args);
  }

}

As you can see you I excluded more and more stuff but its always the same error.如您所见,我排除了越来越多的内容,但始终是相同的错误。 My Tests:我的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = TestContext.class)
public class TestMail {
    @Autowired
    private Component c;

    public void setC(Component c) {
        this.c = c;
    }

    @Test
    public void test() {
       ...
    }

}

When I start the tests Hibernate will be configured and fails with:当我开始测试时,Hibernate 将被配置并失败:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.dataSource; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfiguration$NonEmbeddedConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.sql.DataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (the profiles "dev" are currently active).

So starting only the application or as context for the tests also starts hibernate configuration.因此,仅启动应用程序或作为测试的上下文也会启动休眠配置。 What am I doing wrong?我究竟做错了什么?

EDIT: Having only:编辑:只有:

@SpringBootApplication(exclude = { HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class}) 

Does not throw any exception until I try to use actual hibernate stuff.在我尝试使用实际的休眠内容之前不会抛出任何异常。 However it builds the database correctly...但是它正确地构建了数据库......

EDIT2: The problem was a custom config class that had @EnableJpaRepositories on. EDIT2:问题是一个自定义配置类,它有@EnableJpaRepositories。 Also this seems not possible because Beans annotated with @Component which have autowired repositories will fail because the beans cannot be created.这似乎也是不可能的,因为使用 @Component 注释的具有自动装配存储库的 Bean 将失败,因为无法创建 Bean。

Try adding DataSourceTransactionManagerAutoConfiguration.class to the exclude list.尝试将 DataSourceTransactionManagerAutoConfiguration.class 添加到排除列表中。 This did the trick for me when I needed to exclude hibernate from the auto config.当我需要从自动配置中排除休眠时,这对我有用。

Have you tried starting up the test with the --debug switch?您是否尝试过使用 --debug 开关启动测试? That would report the auto-configuration ( https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html ).这将报告自动配置( https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-auto-configuration.html )。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM