복붙노트

[SPRING] 봄 부팅 - Exclude가 작동하지 않는 EnableAutoConfiguration

SPRING

봄 부팅 - Exclude가 작동하지 않는 EnableAutoConfiguration

최신 스프링 부트 버전을 사용하고 있으며 응용 프로그램을 설치하려고하는데 DataSource 구성을 비활성화하려고합니다. 구성 클래스는 다음과 같습니다.

@Configuration
@ComponentScan
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class ApiApplicationConfig { }

하지만 응용 프로그램을 실행하면 다음과 같은 스택 추적을 얻게됩니다.

Caused by: org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.getDriverClassName(DataSourceProperties.java:137)
at org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$NonEmbeddedConfiguration.dataSource(DataSourceAutoConfiguration.java:116)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 31 more

내 구성에서 데이터 소스 구성을 완전히 비활성화하는 데 필요한 것이 누락 되었습니까? 나는 DataSource를 수동으로 설정할 것이므로 스프링이 나를 위해 이것을 처리하지 못하게해야한다.

해결법

  1. ==============================

    1.이것은 DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition이 DataSource 클래스 로더를 발견하지만 DataSource가없는 이상한 상황 인 것 같습니다. 통합 테스트를 실행하는 동안 spring-boot 1.2.2에서이 문제가 발생했습니다.

    이것은 DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition이 DataSource 클래스 로더를 발견하지만 DataSource가없는 이상한 상황 인 것 같습니다. 통합 테스트를 실행하는 동안 spring-boot 1.2.2에서이 문제가 발생했습니다.

    어쨌든, 우리는 gradble-dependency를 실행하여 tomcat-jdbc에서 무엇이 당겨지고 있는지 확인하고 spring-jdbc 종속성을 일반 spring-jdbc로 대체했습니다. 종속성에 tomcat-jdbc가 없으면 DataSourceAutoConfiguration.NonEmbeddedDataSourceCondition.getDataSourceClassLoader ()에 중단 점을 설정하여 발견 한 드라이버를 찾으십시오.

  2. ==============================

    2.데이터 소스를 수동으로 구성 할 때 Spring은 사용자의 구성을 사용하며 내장 된 데이터 소스를 초기화하지 않습니다.

    데이터 소스를 수동으로 구성 할 때 Spring은 사용자의 구성을 사용하며 내장 된 데이터 소스를 초기화하지 않습니다.

    BTW, 스프링 부트는 기본적으로 application.properties의 다음 등록 정보를 사용하여 데이터 소스 bean을 만듭니다.

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    데이터 소스 자동 설정에 대한 자세한 내용은 Spring Boot 문서의이 섹션을 살펴보십시오.

  3. ==============================

    3.내 제외 문제를 도운 유일한 것은 봄 구성에서 tomcat jdbc 종속성을 제외하는 것이 었습니다.

    내 제외 문제를 도운 유일한 것은 봄 구성에서 tomcat jdbc 종속성을 제외하는 것이 었습니다.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcat</groupId>
                    <artifactId>tomcat-jdbc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    
  4. ==============================

    4.@Configuration, @EnableAutoConfiguration 및 @ComponentScan을 사용할 때 특정 구성 클래스를 제외하려고 할 때 문제가 발생했습니다. 문제는 작동하지 않습니다!

    @Configuration, @EnableAutoConfiguration 및 @ComponentScan을 사용할 때 특정 구성 클래스를 제외하려고 할 때 문제가 발생했습니다. 문제는 작동하지 않습니다!

    결국 스프링 문서에 따라 하나의 주석에서 위의 세 가지 기능과 동일한 기능을 수행하는 @SpringBootApplication을 사용하여 문제를 해결했습니다.

    @SpringBootApplication(exclude= {Foo.class})
    public class MySpringConfiguration {}
    
  5. ==============================

    5.

    @Configuration
    
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
    

    이것을 사용하여 스프링 부트 내장 데이터베이스 구성을 비활성화 할 수 있습니다.

  6. from https://stackoverflow.com/questions/28158094/spring-boot-enableautoconfiguration-with-exclude-not-working by cc-by-sa and MIT license