SpringBoot 는 SQL 데이터 베 이 스 를 어떻게 사용 합 니까?

1.데이터 원본 설정
자바 의 자바 x.sql.dataSource 인 터 페 이 스 는 데이터베이스 연결 을 처리 하 는 표준 방법 을 제공 합 니 다.
1.1.내장 형 데이터베이스 지원
메모리 에 있 는 내장 형 데이터 베 이 스 를 사용 하여 응용 프로그램 을 개발 하 는 것 은 일반적으로 매우 편리 하 다.분명히 메모리 데이터 베 이 스 는 영구적 인 저장 소 를 제공 하지 않 는 다.프로그램 이 시 작 될 때 데이터 베 이 스 를 채 우 고 프로그램 이 끝 날 때 데 이 터 를 버 릴 준 비 를 해 야 합 니 다.
Spring Boot 는 내장 형 H2,HSQL,Derby 데이터 베 이 스 를 자동 으로 설정 할 수 있 습 니 다.연결 URL 을 제공 할 필요 가 없습니다.사용 할 삽입 식 데이터베이스 구축 의존 항목 만 포함 하 십시오.클래스 경로 에 여러 개의 끼 워 넣 은 데이터베이스 가 있 으 면 spring.datasource.embedded-database-connection 설정 속성 을 설정 하여 사용 하 는 것 을 제어 합 니 다.이 속성 을 none 으로 설정 하여 끼 워 넣 은 데이터베이스 의 자동 설정 을 사용 하지 않 습 니 다.
테스트 에서 이 기능 을 사용 하면 프로그램 컨 텍스트 를 아무리 사용 하 더 라 도 전체 테스트 세트 가 같은 데이터 베 이 스 를 다시 사용 한 다 는 것 을 알 수 있 습 니 다.모든 컨 텍스트 에 별도의 내장 형 데이터 베 이 스 를 확보 하려 면 spring.datasource.generate-unique-name 을 true 로 설정 해 야 합 니 다.

<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>
1.2.생산 데이터베이스 에 연결
DataSource 탱크 를 사용 하여 생산 데이터베이스 연결 을 자동 으로 설정 합 니 다.
1.3.데이터 원본 설정

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
최소한 spring.datasource.url 속성 을 설정 하여 URL 을 지정 해 야 합 니 다.그렇지 않 으 면 Spring Boot 는 내장 형 데이터 베 이 스 를 자동 으로 설정 하려 고 시도 합 니 다.
Spring Boot 는 URL 에서 대부분의 데이터베이스 의 JDBC 드라이버 클래스 를 추정 할 수 있 습 니 다.특정 클래스 를 지정 하려 면 이 spring.datasource.driver-class-name 속성 을 사용 할 수 있 습 니 다.

# Tomcat      
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
1.4.지원 하 는 연결 풀
1.우 리 는 성능 과 동시성 때문에 HikariCP 를 더 좋아한다.만약 HikariCP 가 사용 가능 하 다 면,우 리 는 항상 그것 을 선택 합 니 다.
2.그렇지 않 으 면 Tomcat DataSource 풀 을 사용 할 수 있 습 니 다.
3.그렇지 않 으 면 Commons DBCP 2 가 사용 가능 하 다 면 사용 합 니 다.
4.HikariCP,Tomcat,DBCP 2 를 사용 할 수 없고 Oracle UCP 를 사용 할 수 있다 면 사용 하 겠 습 니 다.
  • HikariCP
  • Tomcat pooling Datasource
  • Commons DBCP2
  • Oracle UCP & OracleDataSource
  • Spring Framework's SimpleDriverDataSource
  • H2 JdbcDataSource
  • PostgreSQL PGSimpleDataSource
  • 1.5.JNDI 데이터 원본 에 연결
    Spring Boot 프로그램 을 응용 프로그램 서버 에 배치 하면 응용 프로그램 서버 의 내 장 된 기능 설정 과 데이터 원본 관 리 를 사용 하고 JNDI 로 접근 하 기 를 원할 수도 있 습 니 다.
    spring.datasource.jndi-name=java:jboss/datasources/customers
    2.JdbcTemplate 사용
    Spring JdbcTemplate 와 NamedParameterJdbcTemplate 클래스 는 자동 으로 설 정 됩 니 다.@Autowire 를 통 해 직접 참조 할 수 있 습 니 다.
    
    @Component
    public class MyBean {
     
        private final JdbcTemplate jdbcTemplate;
     
        public MyBean(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
     
        public void doSomething() {
            this.jdbcTemplate ...
        }
     
    }
     
    spring.jdbc.template.max-rows=500
    
    
    3.JPA 와 Spring Data JPA
    Java Persistence API 는 표준 기술 로 대상 을 관계 데이터베이스 에 매 핑 할 수 있 습 니 다.이 spring-boot-starter-data-jpa POM 은 빠 른 방법 을 제공 합 니 다.이것 은 다음 과 같은 관건 적 인 의존 항목 을 제공 합 니 다.
  • Hibernate:가장 유행 하 는 JPA 실현 중 하나.
  • Spring Data JPA:JPA 기반 저장 소 를 실현 하 는 데 도움 을 줍 니 다.
  • Spring ORM:Spring 프레임 워 크 의 핵심 ORM 지원.
  • 3.1.실체 류
    
    @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 shouldn't 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
     
    }
    
    3.2.Spring Data JPA 저장 소
    Spring Data JPA 저장 소 는 데이터 에 접근 할 수 있 는 인터페이스 입 니 다.JPA 조 회 는 방법 이름 에 따라 자동 으로 생 성 됩 니 다.
    
    public interface CityRepository extends Repository<City, Long> {
     
        Page<City> findAll(Pageable pageable);
     
        City findByNameAndStateAllIgnoringCase(String name, String state);
     
    }
    
    Spring Data JPA 저장 소 는 세 가지 서로 다른 안내 모드 를 지원 합 니 다:default,deferred,and lazy.
    지연 또는 지연 안 내 를 사용 하려 면 spring.data.jpa.reposcories.boottstrap-mode 속성 을 각각 deferred 또는 lazy 로 설정 하 십시오.
    3.3.JPA 데이터 베 이 스 를 만 들 고 삭제 합 니 다.
    기본적으로 내장 형 데이터베이스(H2,HSQL 또는 Derby)를 사용 할 때 만 자동 으로 JPA 데이터 베 이 스 를 만 듭 니 다.spring.jpa.*속성 표시 설정 JPA 설정 을 사용 할 수 있 습 니 다.
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate[globally_quoted_identifiers]=true
    3.4.보기 에서 EntityManager 열기
    웹 프로그램 을 실행 하고 있다 면,Spring Boot 는 기본적으로 OpenEntityManager InViewInterceptor 를 등록 하여"보기 에서 EntityManager 열기"모드 를 사용 하여 웹 보기에 서 불 러 오 는 것 을 지연 시 킬 수 있 습 니 다.이런 행동 을 원 하지 않 는 다 면 spring.jpa.open-in-view=false 를 설정 해 야 합 니 다.
    4.Spring Data JDBC
    Spring Data 는 JDBC 에 대한 저장 소 지원 을 포함 하 며,자동 으로 CrudRepository.더 높 은 조회 에 대해@Query 에 설명 을 제공 합 니 다.
    필요 한 의존 관계 가 클래스 경로 에 있 을 때 Spring Boot 는 Spring Data 의 JDBC 저장 소 를 자동 으로 설정 합 니 다.프로젝트 에 추가 할 수 있 으 며,spring-boot-starter-data-jdbc 에 만 의존 합 니 다.
    5.H2 웹 콘 솔 사용
    H2 데이터 베 이 스 는 브 라 우 저 기반 콘 솔 을 제공 하여 자동 으로 설정 합 니 다.다음 조건 이 충족 되면 콘 솔 은 자동 으로 설 정 됩 니 다.
    4.567917.servlet 기반 웹 프로그램 을 개발 하고 있 습 니 다
  • com.h2database:h2 는 클래스 경로 에 있 습 니 다
  • Spring Boot 의 개발 자 도 구 를 사용 하고 있 습 니 다
  • Spring Boot 개발 자 도 구 를 사용 하지 않 았 지만 H2 콘 솔 을 사용 하려 면 spring.h2.console.enabled 속성의 값 을 true 로 설정 할 수 있 습 니 다.
    H2 콘 솔 은 개발 기간 에 만 사용 되 므 로 spring.h2.console.enabled 가 생산 에서 true 로 설정 되 지 않도록 주의해 야 합 니 다.
    기본적으로 콘 솔 은/h2-console 에 있 습 니 다.이 spring.h2.console.path 속성 을 사용 하여 콘 솔 의 경 로 를 사용자 정의 할 수 있 습 니 다.
    jOOQ 사용
    jOOQ 대상 조회(jOOQ)는 Data Geekery 의 유행 제품 입 니 다.데이터베이스 에서 자바 코드 를 생 성하 고 원활 한 API 를 통 해 안전 한 SQL 조 회 를 구축 할 수 있 습 니 다.상업 판 과 오픈 소스 판 은 모두 Spring Boot 와 함께 사용 할 수 있 습 니 다.
    6.1.코드 생 성
    jOOQ 형식 보안 조 회 를 사용 하기 위해 서 는 데이터베이스 모드 에서 자바 류 를 생 성 해 야 합 니 다.jOOQ 사용자 매 뉴 얼 의 설명 에 따라 조작 할 수 있 습 니 다.jooq-codegen-maven 플러그 인 을 사용 하고 spring-boot-starter-parent"부모 POM"을 사용 하면 플러그 인의탭 을 안전하게 생략 할 수 있 습 니 다.또한 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>
    
    6.2.DSLContext 사용
    jOOQ 가 제공 하 는 flent API 는 org.joq.DSlContext 인 터 페 이 스 를 통 해 시 작 됩 니 다.Spring Boot 는 DSLContext 를 Spring Bean 으로 자동 으로 설정 하고 응용 프로그램 DataSource 에 연결 합 니 다.DSLContext 를 사용 하려 면 주입 할 수 있 습 니 다.
    
    @Component
    public class MyBean {
     
        private final DSLContext create;
     
        public MyBean(DSLContext dslContext) {
            this.create = 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);
        }
    }
    
    6.3.jOOQ SQL 방언
    spring.joq.sql-dialect 가 이 속성 을 설정 하지 않 는 한 Spring Boot 는 데이터 원본 에 사용 할 SQL 사투 리 를 확인 합 니 다.Spring Boot 에서 사투 리 를 감지 하지 못 하면 DEFAULT 를 사용 합 니 다.
    Spring Boot 는 jOOQ 오픈 소스 버 전이 지원 하 는 방언 만 자동 으로 설정 할 수 있 습 니 다.
    6.4.사용자 정의 jOOQ
    더 높 은 사용자 정 의 는 Default Configuration Customizer bean 을 정의 하여 이 루어 집 니 다.이 bean 은 org.joq.configuration 을 만 들 것 입 니 다.이것 은 응용 프로그램의 모든 내용 을 자동 으로 설정 하 는 것 보다 낫다.
    7.R2DBC 사용
    Reactive Relational Database Connectivity(R2DBC)프로젝트 는 관계 데이터베이스 에 반응 식 프로 그래 밍 API 를 가 져 왔 다.R2DBC io.r2dbc.spi.connection 은 비 차단 데이터베이스 연결 을 사용 하 는 표준 방법 을 제공 합 니 다.연결 은 Connection Factory 를 통 해 제 공 된 DataSource 로 jdbc 와 유사 합 니 다.Connection Factory 설정 은 spring.r2dbc.*입 니 다.
    
    spring.r2dbc.url=r2dbc:postgresql://localhost/test
    spring.r2dbc.username=dbuser
    spring.r2dbc.password=dbpass
    Spring Boot 는 R2DBC 의 연결 공장 에서 드라이버 를 가 져 오기 때문에 드라이버 클래스 이름 을 지정 할 필요 가 없습니다.
    
    @Configuration(proxyBeanMethods = false)
    public class MyR2dbcConfiguration {
     
        @Bean
        public ConnectionFactoryOptionsBuilderCustomizer connectionFactoryPortCustomizer() {
            return (builder) -> builder.option(ConnectionFactoryOptions.PORT, 5432);
        }
     
    }
     
    @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);
        }
     
    
    
    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 로 설정 해 야 합 니 다.
    7.2.데이터베이스 클 라 이언 트 사용
    
    @Component
    public class MyBean {
     
        private final DatabaseClient databaseClient;
     
        public MyBean(DatabaseClient databaseClient) {
            this.databaseClient = databaseClient;
        }
     
        public Flux<Map<String, Object>> someMethod() {
            return this.databaseClient.sql("select * from user").fetch().all();
        }
     
    }
    
    7.3.Spring Data R2DBC 저장 소
    Spring Data R2DBC 저장 소 는 데이터 에 접근 할 수 있 는 인 터 페 이 스 를 정의 할 수 있 습 니 다.검색 은 방법 이름 에 따라 자동 으로 생 성 됩 니 다.더 복잡 한 조회 에 대해 서 는 Spring Data 의 Query 주 해 를 사용 하여 방법 을 설명 할 수 있 습 니 다.
    Spring Data 저장 소 는 보통 Repository 나 CrudRepository 인터페이스 에서 확 장 됩 니 다.
    
    public interface CityRepository extends Repository<City, Long> {
     
        Mono<City> findByNameAndStateAllIgnoringCase(String name, String state);
     
    }
    
    이 SpringBoot 는 SQL 데이터 베 이 스 를 어떻게 사용 합 니까?의 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SpringBoot 는 SQL 데이터 베 이 스 를 사용 하 는 내용 입 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기