1. 개요
이 사용방법(예제)에서는 실행 중인 데이터베이스 없이 Spring Boot 애플리케이션을 시작하는 방법을 배웁니다.
기본적으로 Spring Data JPA 가 포함된 Spring Boot 애플리케이션이 있는 경우 애플리케이션은 자동으로 데이터베이스 연결을 생성하려고 합니다. 그러나 애플리케이션이 시작될 때 데이터베이스를 사용할 수 없는 상황에서는 이를 피해야 할 수도 있습니다.
2. 설정
우리는 MySQL을 사용하는 간단한 Spring Boot 애플리케이션으로 작업할 것입니다. 애플리케이션을 설정하는 단계를 살펴보겠습니다.
2.1. 의존성
Spring Data JPA 스타터 및 MySql 커넥터 의존성을 pom.xml 파일 에 추가해 보겠습니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
이렇게 하면 JPA, MySQL 커넥터 및 Hibernate가 클래스 경로에 추가됩니다.
이 외에도 응용 프로그램이 시작될 때 작업이 계속 실행되기를 원합니다. 이를 위해 웹 스타터 를 pom.xml 파일 에 추가해 보겠습니다 .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
이렇게 하면 포트 8080에서 웹 서버가 시작되고 애플리케이션이 계속 실행됩니다.
2.2. 속성
애플리케이션을 시작하기 전에 설정해야 하는 application.properties 파일에 필요한 몇 가지 필수 속성이 있습니다 .
spring.datasource.url=jdbc:mysql://localhost:3306/myDb
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
설정한 속성을 이해해 보겠습니다.
- spring.datasource.url : 서버의 URL과 데이터베이스의 이름.
- spring.datasource.driver-class-name : 드라이버 클래스 이름. MySQL 커넥터는 이 드라이버를 제공합니다.
- spring.jpa.properties.hibernate.dialect : MySQL 5로 설정했습니다. 이것은 JPA Provider에게 MySQL 5 언어를 사용하도록 지시합니다.
이 외에도 데이터베이스에 연결하는 데 필요한 사용자 이름과 암호를 설정해야 합니다 .
spring.datasource.username=root
spring.datasource.password=root
2.3. 애플리케이션 시작
애플리케이션을 시작하면 다음 오류가 표시됩니다.
HHH000342: Could not obtain connection to query metadata
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
지정된 URL에서 실행 중인 데이터베이스 서버가 없기 때문입니다. 그러나 애플리케이션의 기본 동작은 다음 두 작업을 수행하는 것입니다.
- JPA는 데이터베이스 서버에 연결을 시도하고 메타데이터를 가져옵니다.
- Hibernate는 데이터베이스가 존재하지 않는다면 생성을 시도할 것입니다. 이것은 기본적 으로 생성 하도록 설정된 spring.jpa.hibernate.ddl-auto 속성 때문입니다.
3. 데이터베이스 없이 실행
데이터베이스 없이 계속하려면 위에서 언급한 두 속성을 재정의하여 기본 동작을 수정해야 합니다.
먼저 메타데이터 가져오기 를 비활성화합니다 .
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
그런 다음 자동 데이터베이스 생성을 비활성화합니다 .
spring.jpa.hibernate.ddl-auto=none
이 속성을 설정 하여 데이터베이스 생성을 비활성화했습니다. 따라서 애플리케이션은 연결을 생성할 이유가 없습니다.
이전과 달리 이제 응용 프로그램을 시작하면 오류 없이 시작됩니다. 작업에 데이터베이스와의 상호 작용이 필요하지 않으면 연결이 시작되지 않습니다.
4. 결론
이 기사에서는 실행 중인 데이터베이스 없이 Spring Boot 애플리케이션을 시작하는 방법을 배웠습니다.
데이터베이스 연결을 찾는 애플리케이션의 기본 동작을 살펴보았습니다. 그런 다음 두 속성을 재정의하여 기본 동작을 수정했습니다.
항상 그렇듯이 이 기사에 사용된 코드 예제는 GitHub 에서 찾을 수 있습니다 .