31.1 Configure a DataSource
Java의 javax.sql.DataSource
인터페이스는 데이터베이스 연결 작업의 표준 방법을 제공합니다. 전통적으로 'DataSource'는 URL
데이터베이스 연결을 설정하기 위해 일부 자격 증명과 함께를 사용 합니다.
일반적으로 DataSource의 구성을 완전히 제어하기위한 고급 예제는 “How-to” section을 참조하십시오.
31.1.1 내장 데이터베이스 지원
메모리 내장 데이터베이스를 사용하여 응용 프로그램을 개발하는 것이 종종 편리합니다. 분명히 in-memory databases는 영구 저장소를 제공하지 않습니다. 응용 프로그램이 시작되면 데이터베이스를 채우고 응용 프로그램이 끝나면 데이터를 버릴 준비가 필요합니다.
"방법"섹션에는 데이터베이스를 초기화하는 방법에 대한 섹션이 포함되어 있습니다 .
스프링 부트는 내장 된 H2 , HSQL 및 Derby 데이터베이스를 자동 구성 할 수 있습니다 . 연결 URL을 제공 할 필요가 없습니다. 사용할 내장 데이터베이스에 빌드 종속성 만 포함하면됩니다.
테스트에서 이 기능을 사용하는 경우 사용하는 응용 프로그램 컨텍스트의 수에 관계없이 전체 테스트 묶에서 동일한 데이터베이스가 다시 사용된다는 것을 알 수 있습니다. 각 컨텍스트에 별도의 내장 데이터베이스가 있는지 확인하려면 pring.datasource.generate-unique-name
를 true 로
설정해야 합니다.
예를 들어, 일반적인 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는 특정 구현을 선택하기 위해 다음 알고리즘을 사용합니다 :
우리는 HikariCP 의 성능과 동시성을 선호 합니다. HikariCP를 사용할 수 있다면, 우리는 항상 그것을 선택합니다.
그렇지 않으면 Tomcat 풀링
DataSource
을 사용할 수있는 경우 이를 사용합니다.HikariCP 나 Tomcat 풀링 데이터 소스가 없으며 Commons DBCP2 가 사용 가능 하다면 이를 사용합니다.
spring-boot-starter-jdbc
또는 spring-boot-starter-data-jpa
를 당신이 사용하는 경우 "staters"를 사용하면 자동으로 HikariCP
에 의존하게 됩니.
해당 알고리즘을 완전히 생략하고 spring.datasource.type
속성 을 설정하여 사용할 연결 풀을 지정할 수 있습니다 . 이것은 tomcat-jdbc
에의해 기본적으로 제공되는 Tomcat 컨테이너에서 애플리케이션을 실행하는 경우 특히 중요합니다 .
추가 연결 풀은 항상 수동으로 구성 할 수 있습니다. 자신의 DataSource
bean 을 정의하면 자동 구성이 발생하지 않습니다.
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.username
및 spring.datasource.password
속성의 대안으로 사용되어 특정 JNDI 위치에서 DataSource
에 액세스 할 수 있습니다. 예를 들어 application.properties
의 다음 섹션에서는 JBoss AS에 정의 된 DataSource에 액세스하는 방법을 보여줍니다.
spring.datasource.jndi-name = java : jboss / datasources / customers
Last updated
Was this helpful?