31.1 Configure a DataSource

Java의 javax.sql.DataSource인터페이스는 데이터베이스 연결 작업의 표준 방법을 제공합니다. 전통적으로 'DataSource'는 URL데이터베이스 연결을 설정하기 위해 일부 자격 증명과 함께를 사용 합니다.

일반적으로 DataSource의 구성을 완전히 제어하기위한 고급 예제는 “How-to” section을 참조하십시오.

31.1.1 내장 데이터베이스 지원

메모리 내장 데이터베이스를 사용하여 응용 프로그램을 개발하는 것이 종종 편리합니다. 분명히 in-memory databases는 영구 저장소를 제공하지 않습니다. 응용 프로그램이 시작되면 데이터베이스를 채우고 응용 프로그램이 끝나면 데이터를 버릴 준비가 필요합니다.

인메모리 데이터베이스는 데이터 스토리지의 메인 메모리에 설치되어 운영되는 방식의 데이터베이스 관리 시스템이다.

"방법"섹션에는 데이터베이스를 초기화하는 방법에 대한 섹션이 포함되어 있습니다 .

스프링 부트는 내장 된 H2 , HSQLDerby 데이터베이스를 자동 구성 할 수 있습니다 . 연결 URL을 제공 할 필요가 없습니다. 사용할 내장 데이터베이스에 빌드 종속성 만 포함하면됩니다.

테스트에서 이 기능을 사용하는 경우 사용하는 응용 프로그램 컨텍스트의 수에 관계없이 전체 테스트 묶에서 동일한 데이터베이스가 다시 사용된다는 것을 알 수 있습니다. 각 컨텍스트에 별도의 내장 데이터베이스가 있는지 확인하려면 pring.datasource.generate-unique-nametrue 로 설정해야 합니다.

예를 들어, 일반적인 POM 종속성은 다음과 같습니다.

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

내장 데이터베이스를 자동으로 구성하려면 spring-jdbc에 대한 종속성이 필요합니다. 이 예에서는 spring-boot-starter-data-jpa.를 통해 transitively 끌어 당깁니다.

어떤 이유로 든 포함 된 데이터베이스의 연결 URL을 구성한 경우 데이터베이스의 자동 종료가 비활성화되었는지 확인하십시오. H2를 사용하는 경우 DB_CLOSE_ON_EXIT=FALSE를 사용해야합니다. HSQLDB를 사용한다면, shutdown=true가 사용되지 않았는지 확인해야합니다. 데이터베이스의 자동 종료를 비활성화하면 데이터베이스가 닫힐 때 스프링 부팅을 제어 할 수 있으므로 데이터베이스 액세스가 더 이상 필요하지 않게됩니다.

31.1.2 프로덕션 데이터베이스에 대한 연결

프로덕션 데이터베이스 연결은 DataSource풀링을 사용하여 자동 구성 할 수도 있습니다. Spring Boot는 특정 구현을 선택하기 위해 다음 알고리즘을 사용합니다 :

  1. 우리는 HikariCP 의 성능과 동시성을 선호 합니다. HikariCP를 사용할 수 있다면, 우리는 항상 그것을 선택합니다.

  2. 그렇지 않으면 Tomcat 풀링 DataSource을 사용할 수있는 경우 이를 사용합니다.

  3. HikariCP 나 Tomcat 풀링 데이터 소스가 없으며 Commons DBCP2 가 사용 가능 하다면 이를 사용합니다.

히카리 커넥션풀은 빠른 속도로인해 점점 더 주목받고 있는 커넥션풀입니다.

spring-boot-starter-jdbc또는 spring-boot-starter-data-jpa를 당신이 사용하는 경우 "staters"를 사용하면 자동으로 HikariCP에 의존하게 됩니.

해당 알고리즘을 완전히 생략하고 spring.datasource.type속성 을 설정하여 사용할 연결 풀을 지정할 수 있습니다 . 이것은 tomcat-jdbc에의해 기본적으로 제공되는 Tomcat 컨테이너에서 애플리케이션을 실행하는 경우 특히 중요합니다 .

추가 연결 풀은 항상 수동으로 구성 할 수 있습니다. 자신의 DataSourcebean 을 정의하면 자동 구성이 발생하지 않습니다.

DataSource 구성은 spring.datasource.*의 외부 구성 등록 정보에 의해 제어됩니다. 예를 들어 application.properties에 다음 섹션을 다음과 같이 선언 할 수 있습니다.

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.datasource.url 속성 을 설정하여 URL을 지정해야 합니다. 그렇지 않으면, Spring Boot는 내장 된 데이터베이스를 자동 설정하려고합니다.

Spring Boot는 url로부터 대부분의 데이터베이스위해 그것을 추론 할 수 있기 때문에 종종 driver-class-name을 지정할 필요가 없습니다.

풀링 DataSource을 만들려면 유효한 Driver클래스가 사용 가능한지 확인할 수 있어야 합니다. 그래서 우리는 무엇인가하기 전에 체크합니다. 즉, 설정 spring.datasource.driver-class-name=com.mysql.jdbc.Driver하면 해당 클래스를로드 할 수 있어야합니다.

지원되는 옵션에 대한 자세한 내용은 DataSourceProperties를 참조하십시오. 이것은 실제 구현과 상관없이 작동하는 표준 옵션입니다. 구현 관련 설정을 각 접두사 ( spring.datasource.hikari.*, spring.datasource.tomcat.*spring.datasource.dbcp2.*)를 사용하여 세부 조정할 수도 있습니다. 자세한 내용은 사용중인 연결 풀 구현의 설명서를 참조하십시오.

예를 들어, Tomcat 연결 풀을 사용하는 경우 다음 예제와 같이 많은 추가 설정을 사용자 정의 할 수 있습니다.

# 사용할 수있는 연결이없는 경우 예외를 throw하기 전에 대기 할 시간 (밀리 초)입니다. 
spring.datasource.tomcat.max-wait = 10000

#이 풀에서 동시에 할당 할 수있는 최대 활성 연결 수입니다. 
spring.datasource.tomcat.max-active = 50

# 풀에서 빌리기 전에 연결을 검증하십시오. 
spring.datasource.tomcat.test-on-borrow = true

31.1.3 JNDI 데이터 소스에 연결

Spring Boot 애플리케이션을 Application Server에 배포하는 경우 Application Server의 내장 기능을 사용하여 DataSource를 구성 및 관리하고 JNDI를 사용하여 액세스 할 수 있습니다.

Spring Boot 애플리케이션을 Application Server에 배포하는 경우 Application Server의 내장 기능을 사용하여 DataSource를 구성 및 관리하고 JNDI를 사용하여 액세스 할 수 있습니다.

spring.datasource.jndi-name 속성은 spring.datasource.url, spring.datasource.usernamespring.datasource.password 속성의 대안으로 사용되어 특정 JNDI 위치에서 DataSource에 액세스 할 수 있습니다. 예를 들어 application.properties의 다음 섹션에서는 JBoss AS에 정의 된 DataSource에 액세스하는 방법을 보여줍니다.

spring.datasource.jndi-name = java : jboss / datasources / customers

Last updated