복붙노트

[SPRING] 스프링 부트에서 모든 데이터베이스 관련 자동 구성 해제

SPRING

스프링 부트에서 모든 데이터베이스 관련 자동 구성 해제

저는 Spring Boot를 사용하여 두 개의 응용 프로그램을 개발했습니다. 하나는 서버 역할을하고 다른 하나는 클라이언트 응용 프로그램입니다. 그러나 둘 다 활성 프로필에 따라 다르게 작동하는 앱과 동일합니다. Spring Boot의 자동 구성 기능을 사용하여 응용 프로그램을 구성하고 있습니다.

데이터베이스 연결이 필요하지 않으므로 클라이언트 응용 프로그램에서 모든 데이터베이스 관련 자동 구성을 사용하지 않도록 설정하려고합니다. 응용 프로그램은 데이터베이스와의 연결을 시도하거나, Spring 데이터 또는 Hibernate 기능을 사용하려고 시도해서는 안됩니다. 데이터베이스 자동 구성의 활성화 또는 비활성화는 조건부이며 응용 프로그램의 활성 프로파일을 기반으로해야합니다.

각 프로필에 대해 두 개의 서로 다른 application.properties 파일을 만들어이 작업을 수행 할 수 있습니까?

나는 이것을 내 속성 파일에 추가하려고 시도했다.

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
  org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

그러나 응용 프로그램은 시작시 데이터베이스에 여전히 연결을 시도합니다. 이러한 예외 사항은 나의 요구 사항을 충족시키기에 충분한가요?

해결법

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

    1.비슷한 일을하는 방법은 다음과 같습니다.

    비슷한 일을하는 방법은 다음과 같습니다.

    @Configuration
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
    @Profile ("client_app_profile_name")
    public class ClientAppConfiguration {
        //it can be left blank
    }
    

    서버 앱과 비슷한 것을 씁니다 (제외하지 않음).

    마지막 단계는 기본 스프링 부트 클래스에서 자동 구성을 비활성화하는 것입니다.

    @SpringBootApplication
    public class SomeApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(SomeApplication.class);
        }
    
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(SomeApplication.class);
        }
    }
    

    변경 : @SpringBootApplication에 :

    @Configuration 
    @ComponentScan
    

    이 일을해야합니다. 이제 예제에서 제외 된 종속성이 불완전 할 수 있습니다. 그것들은 저에게는 충분했지만 데이터베이스 관련 라이브러리를 완전히 비활성화시키지 않을지 확실하지 않았습니다. 확인하려면 아래 목록을 확인하십시오.

    http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes

    희망은 도움이됩니다.

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

    2.모든 데이터베이스 관련 자동 구성을 비활성화하고 다음을 종료하려면 :

    모든 데이터베이스 관련 자동 구성을 비활성화하고 다음을 종료하려면 :

    1. 주석 사용 :

    @SpringBootApplication
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(PayPalApplication.class, args);
        }
    }
    

    2. Application.properties 사용 :

    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
    
  3. ==============================

    3.방금 쉼표를 잊어 버린 것처럼 보입니다. 따라서 구성에 따라 다음과 같이 작동합니다.

    방금 쉼표를 잊어 버린 것처럼 보입니다. 따라서 구성에 따라 다음과 같이 작동합니다.

    spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
        org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
        org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
        org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
    

    또는 다음과 같이 정의 할 수도 있습니다.

    spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
    spring.autoconfigure.exclude[1]=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
    spring.autoconfigure.exclude[2]=org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
    spring.autoconfigure.exclude[3]=org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
    
  4. ==============================

    4.나를 위해 길을 추가하는 것이 었습니다.

    나를 위해 길을 추가하는 것이 었습니다.

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

    Spring 부트를 실행하는 클래스에 대한 주석 (`@SpringBootApplication으로 표시).

    마지막으로 다음과 같이 보입니다.

    @SpringBootApplication
    @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
    public class Application{
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
     }
    
  5. ==============================

    5.@SpringBootApplication 주석을 사용하여 특정 자동 구성 클래스를 제외하는 방법이 있습니다.

    @SpringBootApplication 주석을 사용하여 특정 자동 구성 클래스를 제외하는 방법이 있습니다.

    @Import(MyPersistenceConfiguration.class)
    @SpringBootApplication(exclude = {
            DataSourceAutoConfiguration.class, 
            DataSourceTransactionManagerAutoConfiguration.class,
            HibernateJpaAutoConfiguration.class})
    public class MySpringBootApplication {         
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApplication.class, args);
        }
    }
    

    @ SpringBootApplication # exclude 속성은 @ EnableAutoConfiguration # exclude 속성의 별칭이므로 다소 편리하고 유용합니다. @Import (MyPersistenceConfiguration.class)를 예제에 추가하여 사용자 지정 데이터베이스 구성을 적용하는 방법을 보여줍니다.

  6. ==============================

    6.위에서 언급 한 모든 솔루션을 수행하더라도이 오류가 발생했습니다.

    위에서 언급 한 모든 솔루션을 수행하더라도이 오류가 발생했습니다.

     by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfig ...
    

    어떤 시점에서 POM을 조회 할 때이 종속성이있었습니다.

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    

    그리고 Pojo 학급에는 다음과 같은 수입이있었습니다.

    import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;

    어떤 명확하게 응용 프로그램이 데이터 소스를 기대하고 있었는지 보여줍니다.

    내가 한 것은 pom에서 JPA 종속성을 제거하고 pojo의 가져 오기를 다음과 같이 한 번 교체 한 것입니다

    org.springframework.data.annotation.Id를 가져 오십시오; import org.springframework.data.mongodb.core.mapping.Document;

    마지막으로 SUCCESSFUL 빌드를 얻었습니다. 같은 문제가 생겼는지 확인해보십시오.

  7. from https://stackoverflow.com/questions/36387265/disable-all-database-related-auto-configuration-in-spring-boot by cc-by-sa and MIT license