스프링 부트 시 모든 데이터베이스 관련 자동 구성 사용 안 함
Spring Boot을 사용하여 2개의 어플리케이션을 개발하고 있습니다.하나는 서버, 다른 하나는 클라이언트 어플리케이션입니다.그러나 두 앱 모두 활성 프로필에 따라 다르게 작동하는 동일한 앱입니다.Spring Boot의 자동 설정 기능을 사용하여 어플리케이션을 설정하고 있습니다.
클라이언트 앱의 모든 데이터베이스 관련 자동 구성을 해제하고 싶습니다. 데이터베이스 연결이 필요하지 않기 때문입니다.애플리케이션은 데이터베이스와의 접속을 확립하거나 스프링 데이터 또는 휴지 상태 기능을 사용하지 마십시오.데이터베이스 자동 구성의 활성화 또는 비활성화는 앱의 활성 프로필을 기반으로 조건부여야 합니다.
각 프로파일에 대해 2개의 다른 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
그러나 응용 프로그램은 시작 시 여전히 데이터베이스에 연결을 시도합니다.이러한 제외사항으로 요건을 충족하기에 충분한가?
비슷한 방법으로 하면 다음과 같습니다.
@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Profile ("client_app_profile_name")
public class ClientAppConfiguration {
//it can be left blank
}
서버 앱에 대해 유사한 내용을 작성합니다(제외하지 않음).
마지막 단계는 메인스프링 부트클래스에서 Auto Configuration을 디세블로 하는 것입니다.
@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/ # 자동 설정 변경
데이터베이스와 관련된 모든 자동 설정을 해제하고 다음을 종료하려면:
데이터베이스 유형 NONE에 대한 내장형 데이터베이스 드라이버 클래스를 확인할 수 없습니다.
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
반을 나누기 위해 쉼표를 까먹은 것 같네요.따라서 구성에 따라 다음 기능이 작동합니다.
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
주석을 사용하여 특정 자동 구성 클래스를 제외하는 방법이 있습니다.
@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
는 attribute의 @EnableAutoConfiguration#exclude
편리하고 편리하다고 생각합니다.
나는 덧붙였다.@Import(MyPersistenceConfiguration.class)
를 사용하여 사용자 지정 데이터베이스 구성을 적용하는 방법을 보여 줍니다.
나에게 탈출구는 추가되는 것이었다.
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
Spring Boot을 실행하는 클래스에 주석을 붙입니다('@Spring Boot Application'으로 표시).
마지막으로 다음과 같습니다.
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
사용하는 경우application.yml
:
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
프로파일을 사용하여 제어하는 또 다른 방법은 다음과 같습니다.
// note: no @SpringApplication annotation here
@Import(DatabaseConfig.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Configuration
@Import({DatabaseConfig.WithDB.class, DatabaseConfig.WithoutDB.class})
public class DatabaseConfig {
@Profile("!db")
@EnableAutoConfiguration(
exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class})
static class WithoutDB {
}
@Profile("db")
@EnableAutoConfiguration
static class WithDB {
}
}
나도 같은 문제가 있었는데 이렇게 해결됐어.
하나 더 추가해 주세요.application-{yourprofile}.yml
여기서 "your profile"은 "client"일 수 있습니다.
제 경우 Dev 프로파일에서 Redis를 삭제하고 싶어서application-dev.yml
간선 옆에application.yml
그 일을 해냈죠
이 파일에는 다음과 같이 입력합니다.
spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration
이것은 속성 파일에서도 동작합니다.
그러기 위해 어플리케이션 코드를 변경할 필요가 없다는 점이 마음에 듭니다.
@Spring Boot Application 뒤에 myApp.java를 추가합니다.
@EnableAutoConfiguration(제외= {DataSourceAutoConfiguration.class, DataSourceTransactionManager)AutoConfiguration.class, hibernateJpaAutoConfiguration.class)
그리고 바뀌었다
@Spring Boot Application => @설정
메인 클래스(myApp.java)에 있습니다.
package br.com.company.project.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class SomeApplication {
public static void main(String[] args) {
SpringApplication.run(SomeApplication.class, args);
}
}
그리고 날 위해 일해!=)
저 같은 경우에는spring-boot-starter-jpa
다른 종속성에서 종속성을 로드하고 있었습니다.데이터 소스를 비활성화하기 위해 다음을 수행했습니다.
- 의존관계 트리를 확인합니다.
[INFO] com.backend.app:crud-manager:jar:0.1-SNAPSHOT
[INFO] +- ...
[INFO] \- com.backend.app:crud-libraries:jar:0.1-SNAPSHOT:compile
[INFO] +- org.springframework.boot:spring-boot-starter.data-jpa:jar:2.1.6.RELEASE:compile
[INFO] +- ....
- 종속성이 있었습니다.제외 추가
<dependency>
<groupId>com.backend.app</groupId>
<artifactId>crud-libraries</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusion>
</exclusions>
</dependency>
- 응용 프로그램 파일에서 DataSourceAutoConfiguration.class 제외
import org.springframework.boot.autoconfigure.jdbc. DataSourceAutoConfiguration;
// add exclude
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ...
- 없는 것을 확인하다
spring-boot-starter-jpa
pom.xml로
** 별개로, 이 기능을 사용할 필요가 있는 경우
BatchConfig 파일에서 다음을 수행합니다.
// add extends DefaultBatchConfig
public class BatchConfig extends DefaultBatchConfig {
//add override
@Override
public void setDataSource(DataSource dataSource) {}
위의 해결 방법을 모두 사용했는데도 이 오류가 발생하였습니다.
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의 수입품을 아래와 같이 교체한 것입니다.
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
마침내 나는 성공적인 체격을 얻었다.같은 문제에 부딪혔을 수도 있습니다.
또한 스프링 액추에이터를 사용하는 경우org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthContributorAutoConfiguration
데이터 소스를 초기화하고 있을 수도 있습니다.
기본적으로는 봄에는 어플리케이션콘텍스트가 작성될 때 정의된 모든 콩과 그 의존관계가 작성됩니다.
반면 초기화가 느린 빈을 구성하면 빈이 생성되고 필요한 경우에만 종속성이 주입됩니다.
spring:
main:
lazy-initialization: true
jpa:
properties:
hibernate: # lazy-initialization works with this dialect property to avoid run issues if DB is Down
dialect: org.hibernate.dialect.Oracle10gDialect
언급URL : https://stackoverflow.com/questions/36387265/disable-all-database-related-auto-configuration-in-spring-boot
'source' 카테고리의 다른 글
Spring Boot에서 '로그아웃' 기능 구현 (0) | 2023.04.02 |
---|---|
Oracle SQL Developer를 사용하여 데이터를 내보내는 방법 (0) | 2023.04.02 |
스프링 부팅과 함께 React App을 사용할 때 React-Router 문제 발생 (0) | 2023.04.02 |
AngularJS - $q 약속을 올바르게 해결하기 위해 $apply가 필요한 이유는 무엇입니까? (0) | 2023.04.02 |
리액트 라우터를 사용하여 페이지를 리디렉션하는 가장 좋은 방법은 무엇입니까? (0) | 2023.04.02 |