본문 바로가기

SPRING/SPRING BOOT V3.0.6 REFERENCE

[Spring Boot Reference V3.0.6] Spring Boot Data

반응형

Spring Boot는 SQL 및 NoSQL과 같은 여러 데이터 기술과 통합됩니다.

1. SQL 데이터베이스

Spring Framework는JdbcTemplate 직접 JDBC 액세스 에서 Hibernate와 같은 완전한 "객체 관계형 매핑" 기술에 이르기까지 SQL 데이터베이스 작업에 대한 광범위한 지원을 제공합니다 . Spring Data는 추가 수준의 기능을 제공합니다. Repository인터페이스에서 직접 구현을 생성하고 규칙을 사용하여 메서드 이름에서 쿼리를 생성합니다.

1.1. 데이터 소스 구성

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

  일반적으로 DataSource의 구성을 완전히 제어하기 위한 고급 예제는 "How-to" 섹션을 참조하세요 .

1.1.1. 임베디드 데이터베이스 지원

메모리 내장형 데이터베이스를 사용하여 애플리케이션을 개발하는 것이 편리한 경우가 많습니다. 분명히 메모리 내 데이터베이스는 영구 스토리지를 제공하지 않습니다. 애플리케이션이 시작될 때 데이터베이스를 채우고 애플리케이션이 종료될 때 데이터를 버릴 준비를 해야 합니다.

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

Spring Boot는 임베디드 H2 , HSQL  Derby 데이터베이스를 자동 구성할 수 있습니다 . 연결 URL을 제공할 필요가 없습니다. 사용하려는 임베디드 데이터베이스에 대한 빌드 종속성만 포함하면 됩니다. 클래스 경로에 포함된 데이터베이스가 여러 개 있는 경우 spring.datasource.embedded-database-connection사용할 데이터베이스를 제어하도록 구성 속성을 설정합니다. 이 속성을 설정하면 none임베디드 데이터베이스의 자동 구성이 비활성화됩니다.

 
테스트에서 이 기능을 사용하는 경우 사용하는 애플리케이션 컨텍스트의 수에 관계없이 전체 테스트 스위트에서 동일한 데이터베이스가 재사용된다는 것을 알 수 있습니다. 각 컨텍스트에 별도의 내장 데이터베이스가 있는지 확인하려면 spring.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.
  어떤 이유로든 내장 데이터베이스에 대한 연결 URL을 구성하는 경우 데이터베이스의 자동 종료가 비활성화되어 있는지 확인하십시오. H2를 사용하는 경우 DB_CLOSE_ON_EXIT=FALSE그렇게 해야 합니다. HSQLDB를 사용하는 경우 shutdown=true사용하지 않는지 확인해야 합니다. 데이터베이스의 자동 종료를 비활성화하면 데이터베이스가 닫힐 때 Spring Boot 제어가 가능하므로 데이터베이스에 대한 액세스가 더 이상 필요하지 않은 경우 발생합니다.

1.1.2. 프로덕션 데이터베이스에 연결

풀링을 사용하여 프로덕션 데이터베이스 연결을 자동으로 구성할 수도 있습니다 DataSource.

1.1.3. 데이터 소스 구성

DataSource 구성은 의 외부 구성 속성에 의해 제어됩니다 spring.datasource.*. 예를 들어 에서 다음 섹션을 선언할 수 있습니다 application.properties.

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
 
  속성 을 설정하여 최소한 URL을 지정해야 합니다 spring.datasource.url. 그렇지 않으면 Spring Boot는 임베디드 데이터베이스를 자동 구성하려고 시도합니다.
  Spring Boot는 URL에서 대부분의 데이터베이스에 대한 JDBC 드라이버 클래스를 추론할 수 있습니다. 특정 클래스를 지정해야 하는 경우 spring.datasource.driver-class-name속성을 사용할 수 있습니다.
  풀링을 DataSource생성하려면 유효한 클래스가 사용 가능한지 확인할 수 있어야 하므로 Driver작업을 수행하기 전에 이를 확인합니다. 즉, 를 설정하면 spring.datasource.driver-class-name=com.mysql.jdbc.Driver해당 클래스를 로드할 수 있어야 합니다.

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

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

spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
 

이렇게 하면 연결을 사용할 수 없는 경우 예외를 발생시키기 전에 풀이 10000ms 대기하도록 설정하고 최대 연결 수를 50으로 제한하고 연결을 풀에서 차용하기 전에 유효성을 검사합니다.

1.1.4. 지원되는 연결 풀

Spring Boot는 특정 구현을 선택하기 위해 다음 알고리즘을 사용합니다.

  1. 우리는 성능과 동시성 때문에 HikariCP를 선호합니다. HikariCP를 사용할 수 있으면 항상 선택합니다.
  2. 그렇지 않고 Tomcat 풀링을 DataSource사용할 수 있으면 사용합니다.
  3. 그렇지 않으면 Commons DBCP2를 사용할 수 있으면 사용합니다.
  4. HikariCP, Tomcat, DBCP2 중 어느 것도 사용 가능하지 않고 Oracle UCP가 사용 가능한 경우 사용합니다.
  spring-boot-starter-jdbc또는 "스타터"를 사용하면 spring-boot-starter-data-jpa자동으로 에 종속됩니다 HikariCP.

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

추가 연결 풀은 를 사용하여 항상 수동으로 구성할 수 있습니다 DataSourceBuilder. 자신의 빈을 정의하면 DataSource자동 구성이 발생하지 않습니다. 다음 연결 풀은 다음에서 지원됩니다 DataSourceBuilder.

  • 히카리CP
  • 톰캣 풀링Datasource
  • 커먼즈 DBCP2
  • 오라클 UCP &OracleDataSource
  • 스프링 프레임워크의SimpleDriverDataSource
  • H2JdbcDataSource
  • PostgreSQLPGSimpleDataSource
  • C3P0

1.1.5. JNDI 데이터 소스에 연결

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

이 특성은 특정 JNDI 위치에서 에 액세스하기 위해 , 및 특성 spring.datasource.jndi-name의 대안으로 사용할 수 있습니다 . 예를 들어, 다음 섹션은 정의된 JBoss AS에 액세스하는 방법을 보여줍니다 .spring.datasource.urlspring.datasource.usernamespring.datasource.passwordDataSourceapplication.propertiesDataSource

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

1.2. JdbcTemplate 사용

Spring JdbcTemplate과 NamedParameterJdbcTemplate클래스는 자동 구성되며 @Autowire다음 예제와 같이 자신의 bean으로 직접 구성할 수 있습니다.

@Component
public class MyBean {

    private final JdbcTemplate jdbcTemplate;

    public MyBean(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void doSomething() {
        this.jdbcTemplate ...
    }

}
 

spring.jdbc.template.*다음 예제와 같이 속성을 사용하여 템플릿의 일부 속성을 사용자 지정할 수 있습니다 .

spring.jdbc.template.max-rows=500
 
  장면 뒤에서 NamedParameterJdbcTemplate동일한 인스턴스를 재사용합니다 . JdbcTemplate둘 이상이 JdbcTemplate정의되고 기본 후보가 없으면 가 NamedParameterJdbcTemplate자동 구성되지 않습니다.

1.3. JPA 및 스프링 데이터 JPA

Java Persistence API는 개체를 관계형 데이터베이스에 "매핑"할 수 있는 표준 기술입니다. POM spring-boot-starter-data-jpa은 시작하는 빠른 방법을 제공합니다. 다음과 같은 주요 종속성을 제공합니다.

  • 최대 절전 모드: 가장 널리 사용되는 JPA 구현 중 하나입니다.
  • Spring Data JPA: JPA 기반 리포지토리 구현을 도와줍니다.
  • Spring ORM: Spring Framework의 핵심 ORM 지원.
  여기서는 JPA 또는 Spring Data 에 대해 너무 자세히 다루지 않습니다 . spring.io 에서 "Accessing Data with JPA" 가이드를 따라 Spring Data JPA  Hibernate 참조 문서를 읽을 수 있습니다 .

1.3.1. 엔티티 클래스

전통적으로 JPA "엔티티" 클래스는 파일에 지정됩니다 persistence.xml. Spring Boot에서는 이 파일이 필요하지 않으며 대신 "Entity Scanning"이 사용됩니다. 기본적으로 기본 구성 클래스 아래의 모든 패키지( @EnableAutoConfiguration또는 로 주석이 달린 패키지 @SpringBootApplication)가 검색됩니다.

@Entity, @Embeddable또는 주석이 달린 모든 클래스가 @MappedSuperclass고려됩니다. 일반적인 엔터티 클래스는 다음 예제와 유사합니다.

@Entity
public class City implements Serializable {

    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String state;

    // ... additional members, often include @OneToMany mappings

    protected City() {
        // no-args constructor required by JPA spec
        // this one is protected since it should not be used directly
    }

    public City(String name, String state) {
        this.name = name;
        this.state = state;
    }

    public String getName() {
        return this.name;
    }

    public String getState() {
        return this.state;
    }

    // ... etc

}
 
  주석 을 사용하여 개체 검색 위치를 사용자 지정할 수 있습니다 @EntityScan. " howto.html " 사용법을 참조하십시오.

1.3.2. 스프링 데이터 JPA 저장소

Spring Data JPA 리포지토리는 데이터에 액세스하기 위해 정의할 수 있는 인터페이스입니다. JPA 쿼리는 메서드 이름에서 자동으로 생성됩니다. 예를 들어, 인터페이스는 지정된 상태에 있는 모든 도시를 찾는 메서드를 CityRepository선언할 수 있습니다 .findAllByState(String state)

더 복잡한 쿼리의 경우 Spring Data의 주석으로 메소드에 주석을 달 수 있습니다 Query.

스프링 데이터 리포지토리는 일반적으로 Repository또는 CrudRepository인터페이스에서 확장됩니다. @EnableAutoConfiguration자동 구성을 사용하는 경우 기본 구성 클래스( 또는 주석이 달린 클래스)가 포함된 패키지에서 리포지토리가 검색됩니다 @SpringBootApplication.

다음 예제는 일반적인 Spring Data 리포지토리 인터페이스 정의를 보여줍니다.

public interface CityRepository extends Repository<City, Long> {

    Page<City> findAll(Pageable pageable);

    City findByNameAndStateAllIgnoringCase(String name, String state);

}
 

Spring Data JPA 리포지토리는 기본, 지연 및 지연의 세 가지 부트스트래핑 모드를 지원합니다. 지연 또는 지연 부트스트래핑을 활성화하려면 속성을 또는 각각 spring.data.jpa.repositories.bootstrap-mode으로 설정합니다 . 지연 또는 지연 부트스트래핑을 사용하는 경우 자동 구성은 컨텍스트의 를 부트스트랩 실행자로 사용합니다. 둘 이상이 존재하는 경우 이름이 지정된 항목이 사용됩니다.deferredlazyEntityManagerFactoryBuilderAsyncTaskExecutorapplicationTaskExecutor

 
지연 또는 지연 부트스트랩을 사용하는 경우 애플리케이션 컨텍스트 부트스트랩 단계 후에 JPA 인프라에 대한 모든 액세스를 지연해야 합니다. SmartInitializingSingletonJPA 인프라가 필요한 모든 초기화를 호출하는 데 사용할 수 있습니다 . Spring Bean으로 생성된 JPA 구성 요소(예: 변환기)의 경우 ObjectProvider종속성 해결을 지연하는 데 사용합니다(있는 경우).
  우리는 Spring Data JPA의 표면을 거의 긁지 않았습니다. 자세한 내용은 Spring Data JPA 참조 문서를 참조하세요 .

1.3.3. Spring Data Envers 리포지토리

Spring Data Envers를 사용할 수 있는 경우 JPA 리포지토리는 일반적인 Envers 쿼리를 지원하도록 자동 구성됩니다.

RevisionRepositorySpring Data Envers를 사용하려면 다음 예제와 같이 리포지토리가 확장되는지 확인하십시오 .

 

public interface CountryRepository extends RevisionRepository<Country, Long, Integer>, Repository<Country, Long> {

    Page<Country> findAll(Pageable pageable);

}
 
  자세한 내용은 Spring Data Envers 참조 문서를 확인하세요 .

1.3.4. JPA 데이터베이스 생성 및 삭제

기본적으로 JPA 데이터베이스는 임베디드 데이터베이스(H2, HSQL 또는 Derby)를 사용하는 경우 에만 자동으로 생성됩니다. 특성을 사용하여 JPA 설정을 명시적으로 구성할 수 있습니다 spring.jpa.*. 예를 들어 테이블을 만들고 삭제하려면 다음 줄을 추가할 수 있습니다 application.properties.

spring.jpa.hibernate.ddl-auto=create-drop
 
  이것에 대한 Hibernate의 자체 내부 속성 이름은 (당신이 그것을 더 잘 기억한다면) 입니다 hibernate.hbm2ddl.auto. 다른 Hibernate 기본 속성과 함께 다음을 사용하여 설정할 수 있습니다 spring.jpa.properties.*(접두사는 엔터티 관리자에 추가하기 전에 제거됨). 다음 줄은 Hibernate에 대한 JPA 속성 설정의 예를 보여줍니다.
spring.jpa.properties.hibernate[globally_quoted_identifiers]=true
 

true이전 예제의 라인은 속성에 대한 값을 hibernate.globally_quoted_identifiersHibernate 엔티티 관리자에게 전달합니다.

기본적으로 DDL 실행(또는 유효성 검사)은 가 ApplicationContext시작될 때까지 연기됩니다. 플래그 도 있지만 Hibernate 자동 구성이 활성화된 경우에는 설정이 더 세밀하기 spring.jpa.generate-ddl때문에 사용되지 않습니다 .ddl-auto

1.3.5. 보기에서 EntityManager 열기

웹 애플리케이션을 실행 중인 경우 Spring Boot는 기본적으로 OpenEntityManagerInViewInterceptor"Open EntityManager in View" 패턴을 적용하도록 등록하여 웹 보기에서 지연 로딩을 허용합니다. 이 동작을 원하지 않으면 에서 로 spring.jpa.open-in-view설정 해야 합니다 .falseapplication.properties

1.4. 스프링 데이터 JDBC

Spring Data는 JDBC에 대한 리포지토리 지원을 포함하며 NET의 메서드에 대한 SQL을 자동으로 생성합니다 CrudRepository. 고급 쿼리의 경우 @Query주석이 제공됩니다.

Spring Boot는 필요한 종속성이 클래스 경로에 있을 때 Spring Data의 JDBC 리포지토리를 자동 구성합니다. 에 대한 단일 종속성으로 프로젝트에 추가할 수 있습니다 spring-boot-starter-data-jdbc. 필요한 경우 애플리케이션에 @EnableJdbcRepositories주석 또는 하위 클래스 를 추가하여 Spring Data JDBC의 구성을 제어할 수 있습니다 .AbstractJdbcConfiguration

  Spring Data JDBC에 대한 자세한 내용은 참조 문서를 참조하십시오 .

1.5. H2의 웹 콘솔 사용

H2 데이터베이스는 Spring Boot가 자동 구성할 수 있는 브라우저 기반 콘솔을 제공합니다 . 다음 조건이 충족되면 콘솔이 자동으로 구성됩니다.

  • 서블릿 기반 웹 애플리케이션을 개발하고 있습니다.
  • com.h2database:h2클래스 경로에 있습니다.
  • Spring Boot의 개발자 도구를 사용하고 있습니다 .
  Spring Boot의 개발자 도구를 사용하지 않지만 여전히 H2의 콘솔을 사용하려는 경우 spring.h2.console.enabled값을 사용하여 속성을 구성할 수 있습니다 true.
  H2 콘솔은 개발 중에만 사용하기 위한 것이므로 프로덕션에서 spring.h2.console.enabled로 설정되지 않도록 주의해야 합니다 .true

1.5.1. H2 콘솔의 경로 변경

기본적으로 콘솔은 에서 사용할 수 있습니다 /h2-console. 속성을 사용하여 콘솔의 경로를 사용자 지정할 수 있습니다 spring.h2.console.path.

1.5.2. 보안 애플리케이션에서 H2 콘솔에 액세스

H2 콘솔은 프레임을 사용하며 개발 전용이므로 CSRF 보호 조치를 구현하지 않습니다. 애플리케이션이 Spring Security를 ​​사용하는 경우 다음과 같이 구성해야 합니다.

  • 콘솔에 대한 요청에 대한 CSRF 보호 비활성화,
  • 헤더를 콘솔의 응답 X-Frame-Options으로 설정하십시오.SAMEORIGIN

CSRF 및 헤더 X-Frame-Options 에 대한 자세한 내용은 Spring Security Reference Guide에서 찾을 수 있습니다.

간단한 설정에서는 SecurityFilterChain다음과 같은 것을 사용할 수 있습니다.

@Profile("dev")
@Configuration(proxyBeanMethods = false)
public class DevProfileSecurityConfiguration {

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    SecurityFilterChain h2ConsoleSecurityFilterChain(HttpSecurity http) throws Exception {
        http.securityMatcher(PathRequest.toH2Console());
        http.authorizeHttpRequests(yourCustomAuthorization());
        http.csrf((csrf) -> csrf.disable());
        http.headers((headers) -> headers.frameOptions().sameOrigin());
        return http.build();
    }


}
 
  H2 콘솔은 개발 중에만 사용할 수 있습니다. 프로덕션에서 CSRF 보호를 비활성화하거나 웹 사이트에 대한 프레임을 허용하면 심각한 보안 위험이 발생할 수 있습니다.
  PathRequest.toH2Console()콘솔의 경로가 사용자 정의된 경우에도 올바른 요청 매처를 반환합니다.

1.6. jOOQ 사용

jOOQ Object Oriented Querying( jOOQ )은 Data Geekery 의 인기 있는 제품으로 데이터베이스에서 Java 코드를 생성하고 유창한 API를 통해 유형이 안전한 SQL 쿼리를 작성할 수 있습니다. 상용 버전과 오픈 소스 버전 모두 Spring Boot와 함께 사용할 수 있습니다.

1.6.1. 코드 생성

jOOQ 형식 안전 쿼리를 사용하려면 데이터베이스 스키마에서 Java 클래스를 생성해야 합니다. jOOQ 사용자 설명서 의 지침을 따를 수 있습니다 . 플러그인을 사용하면서 "상위 POM" jooq-codegen-maven도 사용한다면 spring-boot-starter-parent안전하게 플러그인의 <version>태그를 생략할 수 있습니다. Spring Boot 정의 버전 변수(예: h2.version)를 사용하여 플러그인의 데이터베이스 종속성을 선언할 수도 있습니다. 다음 목록은 예를 보여줍니다.

<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <executions>
        ...
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <jdbc>
            <driver>org.h2.Driver</driver>
            <url>jdbc:h2:~/yourdatabase</url>
        </jdbc>
        <generator>
            ...
        </generator>
    </configuration>
</plugin>
 

1.6.2. DSLContext 사용

jOOQ가 제공하는 유창한 API는 org.jooq.DSLContext인터페이스를 통해 시작됩니다. Spring Boot는 Spring Bean으로 자동 구성 DSLContext하고 애플리케이션에 연결합니다 DataSource. 를 사용하려면 DSLContext다음 예와 같이 주입할 수 있습니다.

@Component
public class MyBean {

    private final DSLContext create;

    public MyBean(DSLContext dslContext) {
        this.create = dslContext;
    }


}
 
  createjOOQ 매뉴얼은 DSLContext.

DSLContext그런 다음 다음 예제와 같이 를 사용하여 쿼리를 구성할 수 있습니다.

public List<GregorianCalendar> authorsBornAfter1980() {
    return this.create.selectFrom(AUTHOR)
            .where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1)))
            .fetch(AUTHOR.DATE_OF_BIRTH);
 

1.6.3. jOOQ SQL 언어

속성이 구성되지 않은 경우 spring.jooq.sql-dialectSpring Boot는 데이터 소스에 사용할 SQL 언어를 결정합니다. Spring Boot가 방언을 감지하지 못하면 DEFAULT.

  Spring Boot는 jOOQ의 오픈 소스 버전에서 지원하는 방언만 자동 구성할 수 있습니다.

1.6.4. jOOQ 커스터마이징

. DefaultConfigurationCustomizer_ org.jooq.Configuration @Bean_ 이는 자동 구성에 의해 적용되는 모든 항목에 우선합니다.

org.jooq.Configuration @BeanjOOQ 구성을 완전히 제어하려는 경우 직접 만들 수도 있습니다 .

1.7. R2DBC 사용

R2DBC (Reactive Relational Database Connectivity ) 프로젝트는 반응형 프로그래밍 API를 관계형 데이터베이스에 제공합니다. R2DBC는 io.r2dbc.spi.Connection비차단 데이터베이스 연결 작업의 표준 방법을 제공합니다. ConnectionFactory연결은 jdbc와 유사한 a를 사용하여 제공됩니다 DataSource.

ConnectionFactory구성은 의 외부 구성 속성에 의해 제어됩니다 spring.r2dbc.*. 예를 들어 에서 다음 섹션을 선언할 수 있습니다 application.properties.

spring.r2dbc.url=r2dbc:postgresql://localhost/test
spring.r2dbc.username=dbuser
spring.r2dbc.password=dbpass
 
  Spring Boot는 R2DBC의 연결 팩토리 검색에서 드라이버를 가져오므로 드라이버 클래스 이름을 지정할 필요가 없습니다.
  적어도 URL은 제공되어야 합니다. URL에 지정된 정보는 개별 속성, 즉 name, username및 password풀링 옵션보다 우선합니다.
  "How-to" 섹션에는 데이터베이스를 초기화하는 방법에 대한 섹션이 포함되어 있습니다 .

에 의해 생성된 연결을 사용자 정의하기 위해 ConnectionFactory, 즉 중앙 데이터베이스 구성에서 구성하지 않으려는(또는 구성할 수 없는) 특정 매개변수를 설정하려면 를 사용할 수 있습니다 ConnectionFactoryOptionsBuilderCustomizer @Bean. 다음 예에서는 애플리케이션 구성에서 나머지 옵션을 가져오는 동안 데이터베이스 포트를 수동으로 재정의하는 방법을 보여줍니다.

@Configuration(proxyBeanMethods = false)
public class MyR2dbcConfiguration {

    @Bean
    public ConnectionFactoryOptionsBuilderCustomizer connectionFactoryPortCustomizer() {
        return (builder) -> builder.option(ConnectionFactoryOptions.PORT, 5432);
    }

}
 

다음 예는 몇 가지 PostgreSQL 연결 옵션을 설정하는 방법을 보여줍니다.

@Configuration(proxyBeanMethods = false)
public class MyPostgresR2dbcConfiguration {

    @Bean
    public ConnectionFactoryOptionsBuilderCustomizer postgresCustomizer() {
        Map<String, String> options = new HashMap<>();
        options.put("lock_timeout", "30s");
        options.put("statement_timeout", "60s");
        return (builder) -> builder.option(PostgresqlConnectionFactoryProvider.OPTIONS, options);
    }

}
 

Bean을 사용할 수 있으면 ConnectionFactory일반 JDBC DataSource자동 구성이 백오프됩니다. JDBC 자동 구성을 유지하고 DataSource반응형 애플리케이션에서 차단 JDBC API를 사용할 위험이 있는 경우 애플리케이션에 클래스를 추가하여 @Import(DataSourceAutoConfiguration.class)다시 @Configuration활성화하십시오.

1.7.1. 임베디드 데이터베이스 지원

JDBC 지원 과 유사하게 Spring Boot는 반응형 사용을 위해 임베디드 데이터베이스를 자동으로 구성할 수 있습니다. 연결 URL을 제공할 필요가 없습니다. 다음 예제와 같이 사용하려는 임베디드 데이터베이스에 대한 빌드 종속성만 포함하면 됩니다.

<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-h2</artifactId>
    <scope>runtime</scope>
</dependency>
 
 
테스트에서 이 기능을 사용하는 경우 사용하는 애플리케이션 컨텍스트의 수에 관계없이 전체 테스트 스위트에서 동일한 데이터베이스가 재사용된다는 것을 알 수 있습니다. 각 컨텍스트에 별도의 내장 데이터베이스가 있는지 확인하려면 spring.r2dbc.generate-unique-name로 설정해야 합니다 true.

1.7.2. 데이터베이스 클라이언트 사용

 DatabaseClient은 자동 구성되며 @Autowire다음 예제와 같이 자신의 빈으로 직접 구성할 수 있습니다.

@Component
public class MyBean {

    private final DatabaseClient databaseClient;

    public MyBean(DatabaseClient databaseClient) {
        this.databaseClient = databaseClient;
    }

    // ...

}
 

1.7.3. 스프링 데이터 R2DBC 리포지토리

Spring Data R2DBC 리포지토리는 데이터에 액세스하기 위해 정의할 수 있는 인터페이스입니다. 쿼리는 메서드 이름에서 자동으로 생성됩니다. 예를 들어, 인터페이스는 지정된 상태에 있는 모든 도시를 찾는 메서드를 CityRepository선언할 수 있습니다 .findAllByState(String state)

더 복잡한 쿼리의 경우 Spring Data의 주석으로 메소드에 주석을 달 수 있습니다 Query.

스프링 데이터 리포지토리는 일반적으로 Repository또는 CrudRepository인터페이스에서 확장됩니다. @EnableAutoConfiguration자동 구성을 사용하는 경우 기본 구성 클래스( 또는 주석이 달린 클래스)가 포함된 패키지에서 리포지토리가 검색됩니다 @SpringBootApplication.

다음 예제는 일반적인 Spring Data 리포지토리 인터페이스 정의를 보여줍니다.

public interface CityRepository extends Repository<City, Long> {

    Mono<City> findByNameAndStateAllIgnoringCase(String name, String state);

}
 
  우리는 Spring Data R2DBC의 표면을 거의 긁지 않았습니다. 자세한 내용은 Spring Data R2DBC 참조 문서를 참조하세요 .

2. NoSQL 기술 사용

Spring Data는 다음을 포함하여 다양한 NoSQL 기술에 액세스하는 데 도움이 되는 추가 프로젝트를 제공합니다.

Spring Boot는 Redis, MongoDB, Neo4j, Elasticsearch, Cassandra, Couchbase, LDAP 및 InfluxDB에 대한 자동 구성을 제공합니다. 또한 Apache Geode용 Spring Boot는 Apache Geode에 대한 자동 구성을 제공합니다 . 다른 프로젝트를 사용할 수 있지만 직접 구성해야 합니다. spring.io/projects/spring-data 에서 적절한 참조 문서를 참조하십시오 .

2.1. 레디스

Redis 는 캐시, 메시지 브로커 및 풍부한 기능을 갖춘 키-값 저장소입니다. Spring Boot는 Lettuce  Jedis 클라이언트 라이브러리 에 대한 기본 자동 구성 과 Spring Data Redis 에서 제공하는 추상화를 제공합니다 .

spring-boot-starter-data-redis편리한 방법으로 종속성을 수집하기 위한 "스타터"가 있습니다 . 기본적으로 Lettuce 를 사용합니다 . 이 스타터는 기존 애플리케이션과 반응형 애플리케이션을 모두 처리합니다.

  spring-boot-starter-data-redis-reactive또한 사후 지원을 통해 다른 매장과의 일관성을 위해 "스타터"를 제공합니다 .

2.1.1. 레디스에 연결

다른 Spring Bean과 마찬가지로 자동 구성된 RedisConnectionFactory, StringRedisTemplate또는 바닐라 인스턴스를 주입할 수 있습니다. RedisTemplate다음 목록은 이러한 빈의 예를 보여줍니다.

@Component
public class MyBean {

    private final StringRedisTemplate template;

    public MyBean(StringRedisTemplate template) {
        this.template = template;
    }

    // ...

}
 

기본적으로 인스턴스는 에서 Redis 서버에 연결을 시도합니다 localhost:6379. spring.data.redis.*다음 예제와 같이 속성을 사용하여 사용자 지정 연결 세부 정보를 지정할 수 있습니다 .

 
  LettuceClientConfigurationBuilderCustomizer고급 사용자 정의를 위해 구현하는 임의 개수의 bean을 등록할 수도 있습니다 . ClientResources를 사용하여 사용자 정의할 수도 있습니다 ClientResourcesBuilderCustomizer. Jedis를 사용하는 경우 JedisClientConfigurationBuilderCustomizer에도 사용할 수 있습니다. RedisStandaloneConfiguration또는 , RedisSentinelConfiguration또는 유형의 빈을 등록하여 RedisClusterConfiguration구성을 완전히 제어할 수 있습니다.

@Bean자동 구성된 유형 중 하나를 추가하면 기본값을 대체합니다( RedisTemplate제외가 해당 유형이 아닌 bean 이름을 기반으로 하는 경우 제외 redisTemplate).

기본적으로 풀링된 연결 팩토리는 commons-pool2클래스 경로에 있는 경우 자동으로 구성됩니다.

2.2. 몽고DB

MongoDB 는 기존의 테이블 기반 관계형 데이터 대신 JSON과 유사한 스키마를 사용하는 오픈 소스 NoSQL 문서 데이터베이스입니다. spring-boot-starter-data-mongodbSpring Boot는 및 "Starters" 를 포함하여 MongoDB 작업을 위한 몇 가지 편리한 기능을 제공합니다 spring-boot-starter-data-mongodb-reactive.

2.2.1. MongoDB 데이터베이스에 연결

MongoDB 데이터베이스에 액세스하려면 자동 구성된 org.springframework.data.mongodb.MongoDatabaseFactory. 기본적으로 인스턴스는 에서 MongoDB 서버에 연결을 시도합니다 mongodb://localhost/test. 다음 예에서는 MongoDB 데이터베이스에 연결하는 방법을 보여줍니다.

@Component
public class MyBean {

    private final MongoDatabaseFactory mongo;

    public MyBean(MongoDatabaseFactory mongo) {
        this.mongo = mongo;
    }

    // ...

}
 

자신의 를 정의한 경우 MongoClient적합한 를 자동 구성하는 데 사용됩니다 MongoDatabaseFactory.

자동 구성은 bean을 MongoClient사용하여 생성됩니다 MongoClientSettings. 자신의 를 정의한 경우 MongoClientSettings수정 없이 사용되며 spring.data.mongodb속성은 무시됩니다. 그렇지 않으면 a가 MongoClientSettings자동 구성되고 spring.data.mongodb속성이 적용됩니다. MongoClientSettingsBuilderCustomizer두 경우 모두 구성 을 미세 조정하기 위해 하나 이상의 bean을 선언할 수 있습니다 MongoClientSettings. MongoClientSettings.Builder각각 은 를 빌드하는 데 사용되는 순서대로 호출됩니다 MongoClientSettings.

다음 예제와 같이 속성을 설정하여 URL을 변경하고 복제 세트spring.data.mongodb.uri 와 같은 추가 설정을 구성 할 수 있습니다.

spring.data.mongodb.uri=mongodb://user:secret@mongoserver1.example.com:27017,mongoserver2.example.com:23456/test
 

또는 불연속 속성을 사용하여 연결 세부 정보를 지정할 수 있습니다. 예를 들어 에서 다음 설정을 선언할 수 있습니다 application.properties.

spring.data.mongodb.host=mongoserver1.example.com
spring.data.mongodb.port=27017
spring.data.mongodb.additional-hosts[0]=mongoserver2.example.com:23456
spring.data.mongodb.database=test
spring.data.mongodb.username=user
spring.data.mongodb.password=secret
 
 
를 지정하지 않으면 spring.data.mongodb.port기본값인 가 27017사용됩니다. 이전에 표시된 예에서 이 줄을 삭제할 수 있습니다.
구문 을 사용하여 포트를 호스트 주소의 일부로 지정할 수도 있습니다 host:port. 항목의 포트를 변경해야 하는 경우 이 형식을 사용해야 합니다 additional-hosts.
  MongoClientSpring Data MongoDB를 사용 하지 않는다면 MongoDatabaseFactory. MongoDB 연결 설정을 완전히 제어하려면 자체 MongoDatabaseFactory또는 MongoClientbean을 선언할 수도 있습니다.
  반응형 드라이버를 사용하는 경우 SSL에 Netty가 필요합니다. 자동 구성은 Netty를 사용할 수 있고 사용할 팩토리가 아직 사용자 정의되지 않은 경우 이 팩토리를 자동으로 구성합니다.

2.2.2. 몽고템플릿

Spring Data MongoDB  MongoTemplateSpring의 JdbcTemplate. 와 마찬가지로 JdbcTemplateSpring Boot는 다음과 같이 템플릿을 삽입할 빈을 자동으로 구성합니다.

@Component
public class MyBean {

    private final MongoTemplate mongoTemplate;

    public MyBean(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    // ...

}
 

자세한 내용은 MongoOperationsJavadoc을 참조하십시오 .

2.2.3. 스프링 데이터 MongoDB 리포지토리

Spring Data에는 MongoDB에 대한 리포지토리 지원이 포함됩니다. 앞에서 설명한 JPA 저장소와 마찬가지로 기본 원칙은 쿼리가 메서드 이름을 기반으로 자동으로 구성된다는 것입니다.

실제로 Spring Data JPA와 Spring Data MongoDB는 모두 동일한 공통 인프라를 공유합니다. 이전의 JPA 예제를 사용할 수 있으며 City이제 JPA가 아닌 MongoDB 데이터 클래스라고 가정하면 @Entity다음 예제와 같이 동일한 방식으로 작동합니다.

public interface CityRepository extends Repository<City, Long> {

    Page<City> findAll(Pageable pageable);

    City findByNameAndStateAllIgnoringCase(String name, String state);

}
 
  주석 을 사용하여 문서 스캔 위치를 사용자 정의할 수 있습니다 @EntityScan.
  풍부한 객체 매핑 기술을 포함하여 Spring Data MongoDB에 대한 자세한 내용은 참조 문서를 참조하세요 .

2.3. Neo4j

Neo4j 는 오픈 소스 NoSQL 그래프 데이터베이스로, 일급 관계로 연결된 노드의 풍부한 데이터 모델을 사용하며, 기존 RDBMS 접근 방식보다 연결된 빅 데이터에 더 적합합니다. Spring Boot는 "Starter"를 포함하여 Neo4j 작업을 위한 몇 가지 편리한 기능을 제공합니다 spring-boot-starter-data-neo4j.

2.3.1. Neo4j 데이터베이스에 연결

Neo4j 서버에 액세스하려면 자동 구성된 org.neo4j.driver.Driver. localhost:7687기본적으로 인스턴스는 Bolt 프로토콜을 사용하여 Neo4j 서버에 연결을 시도합니다 . 다음 예제는 Driver다음에 대한 액세스 권한을 제공하는 Neo4j를 주입하는 방법을 보여줍니다 Session.

@Component
public class MyBean {

    private final Driver driver;

    public MyBean(Driver driver) {
        this.driver = driver;
    }

    // ...

}
 

속성을 사용하여 드라이버의 다양한 측면을 구성할 수 있습니다 spring.neo4j.*. 다음 예에서는 사용할 uri 및 자격 증명을 구성하는 방법을 보여줍니다.

spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
 

자동 구성은 를 Driver사용하여 생성됩니다 ConfigBuilder. 구성을 미세 조정하려면 하나 이상의 ConfigBuilderCustomizerBean을 선언하십시오. ConfigBuilder각각 은 를 빌드하는 데 사용되는 순서대로 호출됩니다 Driver.

2.3.2. 스프링 데이터 Neo4j 리포지토리

Spring Data에는 Neo4j에 대한 리포지토리 지원이 포함되어 있습니다. Spring Data Neo4j에 대한 자세한 내용은 참조 문서를 참조하세요 .

Spring Data Neo4j는 다른 많은 Spring Data 모듈과 마찬가지로 Spring Data JPA와 공통 인프라를 공유합니다. 이전의 JPA 예제를 가져와 JPA가 아닌 CitySpring Data Neo4j로 정의할 수 있으며 저장소 추상화는 다음 예제와 같이 동일한 방식으로 작동합니다.@Node@Entity

public interface CityRepository extends Neo4jRepository<City, Long> {

    Optional<City> findOneByNameAndState(String name, String state);

}
 

" 스타터 spring-boot-starter-data-neo4j"는 리포지토리 지원 및 트랜잭션 관리를 가능하게 합니다. Spring Boot는 Neo4jTemplate또는 ReactiveNeo4jTemplate빈을 사용하여 클래식 및 반응형 Neo4j 리포지토리를 모두 지원합니다. Project Reactor가 클래스 경로에서 사용 가능한 경우 반응형 스타일도 자동으로 구성됩니다.

@EnableNeo4jRepositories-bean에서 및 @EntityScan각각을 사용하여 저장소 및 엔티티를 찾기 위해 위치를 사용자 정의할 수 있습니다 @Configuration.

 
반응형 스타일을 사용하는 애플리케이션에서 a는 ReactiveTransactionManager자동 구성되지 않습니다. 트랜잭션 관리를 활성화하려면 구성에서 다음 빈을 정의해야 합니다.
 

2.4. 엘라스틱서치

Elasticsearch 는 오픈 소스, 분산형 RESTful 검색 및 분석 엔진입니다. Spring Boot는 Elasticsearch 클라이언트에 대한 기본 자동 구성을 제공합니다.

Spring Boot는 여러 클라이언트를 지원합니다.

  • 공식 저수준 REST 클라이언트
  • 공식 자바 API 클라이언트
  • ReactiveElasticsearchClientSpring Data Elasticsearch에서 제공 하는

Spring Boot는 전용 "스타터", spring-boot-starter-data-elasticsearch.

2.4.1. REST 클라이언트를 사용하여 Elasticsearch에 연결

Elasticsearch는 클러스터를 쿼리하는 데 사용할 수 있는 두 가지 다른 REST 클라이언트, 즉 모듈  하위 수준 클라이언트org.elasticsearch.client:elasticsearch-rest-client 와 모듈  Java API 클라이언트를co.elastic.clients:elasticsearch-java 제공합니다 . 또한 Spring Boot는 모듈에서 반응형 클라이언트에 대한 지원을 제공합니다 org.springframework.data:spring-data-elasticsearch. 기본적으로 클라이언트는 를 대상으로 합니다 localhost:9200. spring.elasticsearch.*다음 예제와 같이 속성을 사용하여 클라이언트 구성 방법을 추가로 조정할 수 있습니다 .

spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
 
RestClient를 사용하여 Elasticsearch에 연결

클래스 경로에 있는 경우 elasticsearch-rest-clientSpring Boot는 빈을 자동 구성하고 등록합니다 RestClient. 이전에 설명한 속성 외에도 고급 사용자 지정을 위해 RestClient구현하는 임의의 수의 bean을 등록할 수 있습니다 . RestClientBuilderCustomizer클라이언트 구성을 완전히 제어하려면 RestClientBuilderbean을 정의하십시오.

또한 elasticsearch-rest-client-sniffer클래스 경로에 있는 경우 a는 Sniffer실행 중인 Elasticsearch 클러스터에서 노드를 자동으로 검색하고 빈에 설정하도록 자동 구성됩니다 RestClient. Sniffer다음 예와 같이 구성 방법을 추가로 조정할 수 있습니다 .

spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
 
ElasticsearchClient를 사용하여 Elasticsearch에 연결

클래스 경로에 있는 경우 co.elastic.clients:elasticsearch-javaSpring Boot는 빈을 자동 구성하고 등록합니다 ElasticsearchClient.

 ElasticsearchClient이전에 설명한 에 의존하는 전송을 사용합니다 RestClient. 따라서 앞에서 설명한 속성을 사용하여 를 구성할 수 있습니다 ElasticsearchClient. 또한 TransportOptions전송 동작을 추가로 제어하기 위해 bean을 정의할 수 있습니다.

ReactiveElasticsearchClient를 사용하여 Elasticsearch에 연결

Spring Data Elasticsearch는ReactiveElasticsearchClient 반응형 방식으로 Elasticsearch 인스턴스를 쿼리하기 위해 제공됩니다 . 클래스 경로에 Spring Data Elasticsearch 및 Reactor가 있는 경우 Spring Boot는 ReactiveElasticsearchClient.

 ReactiveElasticsearchclient이전에 설명한 에 의존하는 전송을 사용합니다 RestClient. 따라서 앞에서 설명한 속성을 사용하여 를 구성할 수 있습니다 ReactiveElasticsearchClient. 또한 TransportOptions전송 동작을 추가로 제어하기 위해 bean을 정의할 수 있습니다.

2.4.2. Spring 데이터를 사용하여 Elasticsearch에 연결

Elasticsearch에 연결하려면 ElasticsearchClientBean을 정의하거나 Spring Boot에서 자동 구성하거나 애플리케이션에서 수동으로 제공해야 합니다(이전 섹션 참조). 이 구성을 사용하면 ElasticsearchTemplate다음 예제와 같이 다른 Spring 빈처럼 삽입할 수 있습니다.

@Component
public class MyBean {

    private final ElasticsearchTemplate template;

    public MyBean(ElasticsearchTemplate template) {
        this.template = template;
    }

    // ...

}
 

Reactor 가 있는 경우 Spring Boot는 ReactiveElasticsearchClient 및 a를 bean으로 spring-data-elasticsearch자동 구성할 수도 있습니다 . 다른 REST 클라이언트와 반응적으로 동일합니다.ReactiveElasticsearchTemplate

2.4.3. 스프링 데이터 Elasticsearch 리포지토리

Spring Data에는 Elasticsearch에 대한 리포지토리 지원이 포함됩니다. 앞에서 설명한 JPA 리포지토리와 마찬가지로 기본 원칙은 쿼리가 메서드 이름을 기반으로 자동으로 구성된다는 것입니다.

실제로 Spring Data JPA와 Spring Data Elasticsearch는 모두 동일한 공통 인프라를 공유합니다. 이전의 JPA 예제를 사용할 수 있으며 이제 JPA가 아닌 CityElasticsearch 클래스라고 가정하면 동일한 방식으로 작동합니다.@Document@Entity

  Spring Data Elasticsearch에 대한 자세한 내용은 참조 문서를 참조하십시오 .

Spring Boot는 ElasticsearchRestTemplate또는 ReactiveElasticsearchTemplate빈을 사용하여 클래식 및 반응형 Elasticsearch 리포지토리를 모두 지원합니다. 필요한 종속성이 있는 경우 이러한 빈은 Spring Boot에 의해 자동 구성될 가능성이 높습니다.

Elasticsearch 리포지토리를 지원하기 위해 고유한 템플릿을 사용하려는 경우 이름이 이면 고유한 ElasticsearchRestTemplate또는 를 추가할 수 있습니다 . 빈 이름이 있는  에도 동일하게 적용됩니다 .ElasticsearchOperations @Bean"elasticsearchTemplate"ReactiveElasticsearchTemplateReactiveElasticsearchOperations"reactiveElasticsearchTemplate"

다음 속성을 사용하여 리포지토리 지원을 비활성화하도록 선택할 수 있습니다.

spring.data.elasticsearch.repositories.enabled=false
 

2.5. 카산드라

Cassandra 는 많은 상용 서버에서 대량의 데이터를 처리하도록 설계된 오픈 소스 분산 데이터베이스 관리 시스템입니다. Spring Boot는 Cassandra에 대한 자동 구성과 Spring Data Cassandra 에서 제공하는 추상화를 제공합니다 . spring-boot-starter-data-cassandra편리한 방법으로 종속성을 수집하기 위한 "스타터"가 있습니다 .

2.5.1. 카산드라에 연결

다른 Spring Bean과 마찬가지로 자동 구성 CassandraTemplate또는 Cassandra 인스턴스를 주입할 수 있습니다. CqlSession속성 spring.cassandra.*을 사용하여 연결을 사용자 지정할 수 있습니다. 일반적 으로 다음 예와 같이 로컬 데이터 센터 이름도 keyspace-name제공 합니다 .contact-points

spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1:9042,cassandrahost2:9042
spring.cassandra.local-datacenter=datacenter1
 

포트가 모든 접점에 대해 동일한 경우 다음 예와 같이 바로 가기를 사용하고 호스트 이름만 지정할 수 있습니다.

spring.cassandra.keyspace-name=mykeyspace
spring.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.cassandra.local-datacenter=datacenter1
 
  이 두 가지 예는 기본 포트가 9042. 포트를 구성해야 하는 경우 를 사용하십시오 spring.cassandra.port.
 
Cassandra 드라이버에는 application.conf클래스 경로의 루트에서 로드하는 자체 구성 인프라가 있습니다.
Spring Boot는 기본적으로 이러한 파일을 찾지 않지만 spring.cassandra.config. 속성이 spring.cassandra.*및 구성 파일에 모두 있는 경우 값이 spring.cassandra.*우선합니다.
고급 드라이버 사용자 지정을 위해 DriverConfigLoaderBuilderCustomizer. CqlSession유형의 bean으로 사용자 정의할 수 있습니다 CqlSessionBuilderCustomizer.
  CqlSessionBuilder여러 빈을 생성하는 데 사용하는 경우 CqlSession빌더는 변경 가능하므로 각 세션에 대해 새로운 복사본을 주입해야 합니다.

다음 코드 목록은 Cassandra 빈을 주입하는 방법을 보여줍니다.

@Component
public class MyBean {

    private final CassandraTemplate template;

    public MyBean(CassandraTemplate template) {
        this.template = template;
    }

    // ...

}
 

@Bean고유 한 type 을 추가하면 CassandraTemplate기본값을 대체합니다.

2.5.2. 스프링 데이터 카산드라 리포지토리

Spring Data에는 Cassandra에 대한 기본 리포지토리 지원이 포함되어 있습니다. 현재 이것은 이전에 논의된 JPA 리포지토리보다 더 제한적이며 @Query주석이 달린 파인더 메서드가 필요합니다.

  Spring Data Cassandra에 대한 자세한 내용은 참조 문서를 참조하세요 .

2.6. Couchbase

Couchbase 는 대화식 애플리케이션에 최적화된 오픈 소스 분산 다중 모델 NoSQL 문서 지향 데이터베이스입니다. Spring Boot는 Couchbase에 대한 자동 구성과 Spring Data Couchbase 에서 제공하는 추상화를 제공합니다 . 편리한 방법으로 종속성을 수집하기 위한 "스타터" spring-boot-starter-data-couchbase가 있습니다 .spring-boot-starter-data-couchbase-reactive

2.6.1. Couchbase에 연결하기

ClusterCouchbase SDK 및 일부 구성을 추가하여 얻을 수 있습니다 . 속성 spring.couchbase.*을 사용하여 연결을 사용자 지정할 수 있습니다. 일반적으로 다음 예제와 같이 연결 문자열 , 사용자 이름 및 암호를 제공합니다 .

spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret
 

일부 설정을 사용자 지정할 수도 있습니다 ClusterEnvironment. 예를 들어 다음 구성은 새 파일을 열도록 제한 시간을 변경 Bucket하고 SSL 지원을 활성화합니다.

spring.couchbase.env.timeouts.connect=3s
spring.couchbase.env.ssl.key-store=/location/of/keystore.jks
spring.couchbase.env.ssl.key-store-password=secret
 
  spring.couchbase.env.*자세한 내용은 속성을 확인하십시오 . 더 많은 제어를 위해 하나 이상의 ClusterEnvironmentBuilderCustomizer빈을 사용할 수 있습니다.

2.6.2. 스프링 데이터 Couchbase 리포지토리

Spring Data에는 Couchbase에 대한 리포지토리 지원이 포함되어 있습니다. Spring Data Couchbase에 대한 자세한 내용은 참조 문서를 참조하십시오 .

CouchbaseTemplatebean을 사용할 수 있는 경우 다른 Spring Bean과 마찬가지로 자동 구성 인스턴스를 주입할 수 있습니다 CouchbaseClientFactory. 이는 Cluster위에서 설명한 대로 a를 사용할 수 있고 버킷 이름이 지정된 경우에 발생합니다.

spring.data.couchbase.bucket-name=my-bucket
 

다음 예는 CouchbaseTemplate빈을 주입하는 방법을 보여줍니다.

@Component
public class MyBean {

    private final CouchbaseTemplate template;

    public MyBean(CouchbaseTemplate template) {
        this.template = template;
    }

    // ...

}
 

자동 구성에서 제공하는 것을 재정의하기 위해 자신의 구성에서 정의할 수 있는 몇 가지 빈이 있습니다.

  • A CouchbaseMappingContext @Bean이 couchbaseMappingContext.
  • A CustomConversions @Bean이 couchbaseCustomConversions.
  • A CouchbaseTemplate @Bean이 couchbaseTemplate.

자신의 구성에서 해당 이름을 하드 코딩하지 않으려면 BeanNamesSpring Data Couchbase에서 제공하는 것을 재사용할 수 있습니다. 예를 들어 다음과 같이 사용할 변환기를 사용자 정의할 수 있습니다.

@Configuration(proxyBeanMethods = false)
public class MyCouchbaseConfiguration {

    @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
    public CouchbaseCustomConversions myCustomConversions() {
        return new CouchbaseCustomConversions(Arrays.asList(new MyConverter()));
    }

}
 

2.7. LDAP

LDAP (Lightweight Directory Access Protocol)는 IP 네트워크를 통해 분산 디렉토리 정보 서비스에 액세스하고 유지 관리하기 위한 개방적이고 공급업체 중립적인 산업 표준 애플리케이션 프로토콜입니다. Spring Boot는 호환되는 모든 LDAP 서버에 대한 자동 구성을 제공할 뿐만 아니라 UnboundID 의 내장 메모리 내 LDAP 서버에 대한 지원을 제공합니다 .

LDAP 추상화는 Spring Data LDAP 에서 제공합니다 . spring-boot-starter-data-ldap편리한 방법으로 종속성을 수집하기 위한 "스타터"가 있습니다 .

2.7.1. LDAP 서버에 연결

LDAP 서버에 연결하려면 다음 예제와 같이 spring-boot-starter-data-ldap"스타터" 에 대한 종속성을 선언한 다음 application.properties에서 서버의 URL을 선언해야 합니다 .spring-ldap-core

spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret
 

spring.ldap.base연결 설정을 사용자 지정해야 하는 경우 및 속성을 사용할 수 있습니다 spring.ldap.base-environment.

An은 LdapContextSource이러한 설정을 기반으로 자동 구성됩니다. 빈이 사용 가능한 경우 DirContextAuthenticationStrategy자동 구성된 에 연결됩니다 LdapContextSource. 예를 들어 를 사용하기 위해 사용자 지정해야 하는 경우 PooledContextSource자동 구성된 를 계속 삽입할 수 있습니다 LdapContextSource. 자동 구성에서 ContextSource사용 하도록 사용자 지정 플래그를 지정해야 합니다 .@PrimaryLdapTemplate

2.7.2. 스프링 데이터 LDAP 저장소

Spring Data에는 LDAP에 대한 리포지토리 지원이 포함됩니다. Spring Data LDAP에 대한 자세한 내용은 참조 문서를 참조하세요 .

LdapTemplate다음 예제와 같이 다른 Spring Bean과 마찬가지로 자동 구성된 인스턴스를 주입할 수도 있습니다 .

@Component
public class MyBean {

    private final LdapTemplate template;

    public MyBean(LdapTemplate template) {
        this.template = template;
    }

    // ...

}
 

2.7.3. 임베디드 메모리 내 LDAP 서버

테스트 목적으로 Spring Boot는 UnboundID 에서 메모리 내 LDAP 서버의 자동 구성을 지원합니다 . 서버를 구성하려면 다음과 같이 종속성을 추가 com.unboundid:unboundid-ldapsdk하고 속성을 선언합니다 .spring.ldap.embedded.base-dn

spring.ldap.embedded.base-dn=dc=spring,dc=io
 
 
여러 base-dn 값을 정의할 수 있지만 고유 이름에는 일반적으로 쉼표가 포함되므로 올바른 표기법을 사용하여 정의해야 합니다.
yaml 파일에서 yaml 목록 표기법을 사용할 수 있습니다. 속성 파일에서 속성 이름의 일부로 인덱스를 포함해야 합니다.

기본적으로 서버는 임의의 포트에서 시작하고 일반 LDAP 지원을 트리거합니다. 속성을 지정할 필요가 없습니다 spring.ldap.urls.

클래스 경로에 파일이 있으면 schema.ldif서버를 초기화하는 데 사용됩니다. 다른 리소스에서 초기화 스크립트를 로드하려는 경우 속성을 사용할 수도 있습니다 spring.ldap.embedded.ldif.

기본적으로 파일의 유효성을 검사하는 데 표준 스키마가 사용됩니다 LDIF. 속성을 설정하여 유효성 검사를 완전히 끌 수 있습니다 spring.ldap.embedded.validation.enabled. 사용자 정의 속성이 있는 경우 를 사용하여 spring.ldap.embedded.validation.schema사용자 정의 속성 유형 또는 객체 클래스를 정의할 수 있습니다.

2.8. 인플럭스DB

InfluxDB 는 운영 모니터링, 애플리케이션 메트릭, 사물 인터넷 센서 데이터 및 실시간 분석과 같은 분야에서 시계열 데이터의 빠른 고가용성 저장 및 검색에 최적화된 오픈 소스 시계열 데이터베이스입니다.

2.8.1. InfluxDB에 연결

다음 예제와 같이 클라이언트가 클래스 경로에 있고 데이터베이스의 URL이 설정되어 있는 경우 Spring Boot는 InfluxDB인스턴스를 자동 구성합니다 .influxdb-java

spring.influx.url=https://172.0.0.1:8086
 

InfluxDB에 대한 연결에 사용자 및 암호가 필요한 경우 그에 따라 spring.influx.user및 spring.influx.password속성을 설정할 수 있습니다.

InfluxDB는 OkHttp에 의존합니다. InfluxDB뒤에서 http 클라이언트 사용을 조정해야 하는 경우 InfluxDbOkHttpClientBuilderProviderbean을 등록할 수 있습니다.

구성에 대한 더 많은 제어가 필요한 경우 InfluxDbCustomizerbean 등록을 고려하십시오.

3. 다음에 읽을 내용

이제 다양한 데이터 기술과 함께 Spring Boot를 사용하는 방법에 대한 느낌이 들었을 것입니다. 여기에서 다양한 메시징 기술 에 대한 Spring Boot의 지원 과 애플리케이션에서 이를 활성화하는 방법에 대해 읽을 수 있습니다.

반응형