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

Was this helpful?