Spring Boot 2.5.0 재 설 계 된 spring.sql.init 설정 이 무슨 소 용이 있 습 니까?

내용 을 버리다
먼저 잘못된 부분 을 바로잡다.주로 버 전 업데이트 소 개 를 할 때 표현 상의 문제 가 있 었 습 니 다.일부 독자 들 은 이번 업데이트 가 Datasource 자체 의 초기 화 조정 이 라 고 생각 하지만 사실은 그렇지 않다.이번에 재 설계 한 것 은 Datasource 스 크 립 트 초기 화 메커니즘 에 대한 재 설계 일 뿐이다.
먼저 이번 버 려 진 부분의 내용(org.springframework.boot.autoconfigure.jdbc.DataSourceProperties 에 있 음)을 살 펴 보 겠 습 니 다.이 설정 내용 을 사용 한 적 이 있다 면 새 설정 은 쉽게 이해 할 수 있 습 니 다.

/**
	 * Mode to apply when determining if DataSource initialization should be performed
	 * using the available DDL and DML scripts.
	 */
	@Deprecated
	private DataSourceInitializationMode initializationMode = DataSourceInitializationMode.EMBEDDED;

	/**
	 * Platform to use in the DDL or DML scripts (such as schema-${platform}.sql or
	 * data-${platform}.sql).
	 */
	@Deprecated
	private String platform = "all";

	/**
	 * Schema (DDL) script resource references.
	 */
	private List<String> schema;

	/**
	 * Username of the database to execute DDL scripts (if different).
	 */
	@Deprecated
	private String schemaUsername;

	/**
	 * Password of the database to execute DDL scripts (if different).
	 */
	@Deprecated
	private String schemaPassword;

	/**
	 * Data (DML) script resource references.
	 */
	@Deprecated
	private List<String> data;

	/**
	 * Username of the database to execute DML scripts (if different).
	 */
	@Deprecated
	private String dataUsername;

	/**
	 * Password of the database to execute DML scripts (if different).
	 */
	@Deprecated
	private String dataPassword;

	/**
	 * Whether to stop if an error occurs while initializing the database.
	 */
	@Deprecated
	private boolean continueOnError = false;

	/**
	 * Statement separator in SQL initialization scripts.
	 */
	@Deprecated
	private String separator = ";";

	/**
	 * SQL scripts encoding.
	 */
	@Deprecated
	private Charset sqlScriptEncoding;
설정 파일 에 대응 하 는 속성 은 다음 과 같 습 니 다.

spring.datasource.schema=
spring.datasource.schema-username=
spring.datasource.schema-password=
...
이 설정 들 은 데이터 원본 이 초기 화 된 후에 어떤 사용 자 를 사용 할 지,어떤 스 크 립 트 를 실행 할 지,오류 가 발생 하면 계속 할 지 등 기능 을 지정 하 는 데 사 용 됩 니 다.
새로운 디자인
Spring Boot 2.5.0 을 시작 으로 새로운 설정 방식 을 사용 합 니 다.우 리 는 이러한 org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties 에서 상세 한 정 보 를 볼 수 있 습 니 다.
다음은 우 리 는 간단 한 예 를 통 해 이 기능 의 작용 을 체험 한다.
Spring Boot 의 기본 응용 프로그램 을 만 들 고 pom.xml 에 my sql 의존 도 를 도입 합 니 다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
설정 파일 에 데이터 원본 을 추가 하고 데이터 원본 의 설정 을 초기 화 합 니 다.구체 적 으로 다음 과 같 습 니 다.

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Spring Boot 2.5.0 init schema & data
#             
spring.sql.init.username=root
#             
spring.sql.init.password=
#     schema    
spring.sql.init.schema-locations=classpath*:schema-all.sql
위 설정 의 정의 에 따라 resource 디 렉 터 리 에서 스 크 립 트 파일 schema-all.sql 을 만 들 고 표 구 조 를 초기 화 하 는 스 크 립 트 를 기록 합 니 다.

create table test.user_info
(
    id          int unsigned auto_increment comment '  id'
        primary key,
    open_id     varchar(255)     default '' null comment '     openid',
    nick_name   varchar(255)     default '' null comment '   ',
    head_img    varchar(255)     default '' null comment '    ',
    sex         varchar(255)     default '' null comment '  ',
    phone       varchar(255)     default '' null comment '  ',
    province    varchar(255)     default '' null comment '    : ',
    city        varchar(255)     default '' null comment '    :  ',
    country     varchar(255)     default '' null comment '    : / ',
    status      tinyint unsigned default 0  not null comment '       0:  1: ',
    create_time datetime                    not null comment '    ',
    update_time datetime                    not null comment '    '
)
comment '   ';
위의 절 차 를 마 친 후 응용 을 시작 합 니 다.그리고 MySQL 클 라 이언 트 를 열 면 test 라 이브 러 리 에서 user_info 표 가 하나 더 생 겼 습 니 다.
위의 예 를 통 해 이러한 기능 은 주로 응용 시작 과 데이터 베이스 설정 의 자동 실행 을 관리 하여 응용 배치 과정 에서 수 동 으로 실 행 된 내용 을 줄 이 고 응용 배치 의 실행 절 차 를 낮 출 수 있다 고 생각 하기 어렵 지 않다.
배치 상세 설명
위 에서 사용 하 는 설정 속성 을 제외 하고 다른 설정 도 있 습 니 다.다음은 역할 을 자세히 설명 하 겠 습 니 다.
  • spring.sql.init.enabled:초기 화 된 스위치 를 시작 할 지 여부 입 니 다.기본 값 은 true 입 니 다.초기 화 스 크 립 트 를 실행 하지 않 으 려 면 false 로 설정 하면 됩 니 다.-D 명령 행 인 자 를 통 해 쉽게 제어 할 수 있 습 니 다.
  • spring.sql.init.usernamespring.sql.init.password:초기 화 스 크 립 트 를 실행 하 는 사용자 이름과 비밀 번 호 를 설정 합 니 다.이것 은 매우 필요 합 니 다.안전 관리 요구 로 인해 업무 응용 에 분 배 된 사용자 에 게 표 삭제 등 명령 에 권한 이 없습니다.이렇게 하면 데이터 소스 의 사용자 와 분리 하여 관리 할 수 있다.
  • spring.sql.init.schema-locations:schema 변경 과 관련 된 sql 스 크 립 트 를 설정 하고 여러 개(기본 값 은 ; 으로 분할)
  • 을 설정 할 수 있 습 니 다.
  • spring.sql.init.data-locations:데이터 와 관련 된 sql 스 크 립 트 를 설정 할 때 여러 개(기본 값 은 ; 으로 분할)
  • 을 설정 할 수 있 습 니 다.
  • spring.sql.init.encoding:스 크 립 트 파일 을 설정 하 는 인 코딩
  • spring.sql.init.separator:여러 sql 파일 의 구분 자 를 설정 합 니 다.기본 값 은 ;
  • 입 니 다.
  • spring.sql.init.continue-on-error: , false`;따라서 위의 예 는 두 번 째 로 실 행 될 때 오 류 를 보고 하고 실 패 를 시작 합 니 다.첫 번 째 로 실 행 될 때 표 가 이미 존재 하기 때 문 입 니 다.
  • 응용 제안
    이 설정 들 에 대한 응용 프로그램 은 똑똑 한 당신 이 반드시 데이터베이스 버 전 관리 와 연결 시 킬 것 이 라 고 믿 습 니 다(스 크 립 트 를 자동 으로 실행 할 수 있 기 때 문 입 니 다).
    그렇다면 이러한 설정 에 의존 하면 업무 응용 배 치 를 감당 할 수 있 을 까?
    개인 적 으로 위 에서 소개 한 설정 에 대해 서 는 어느 정도 자동 실행 능력 을 갖 추고 있 지만.그러나 현재 환경 에 대한 판단 능력 이 부족 하기 때문에 실제 배치 장면 에 대응 하기 에는 턱 없 이 부족 하 다.
    데이터베이스 시트 구 조 를 자동화 하고 데 이 터 를 초기 화 하려 면 제 제안 은:
  • 기본 값 으로 제 공 된 이 초기 화 기능 은 유닛 테스트 에 만 사용 할 수 있 으 며 데이터베이스 구조 와 초기 화 데 이 터 를 자동 으로 만 들 고 사용 이 끝 난 후에 소각 할 수 있 습 니 다.매번 단원 테스트 의 실행 환경 이 일치 하 는 것 을 편리 하 게 제어 할 수 있다.
  • 환경 배치 에 응용 할 때 이전에 소개 한 Flyway 를 사용 하여 이 루어 져 야 합 니 다.보 이 는 공유:데이터베이스 버 전 관리 을 어떻게 사용 하 는 지 알 수 있 습 니 다.
  • 연합 Flyway 와 함께 사용 하여 org.springframework.jdbc.datasource.init.DataSourceInitializer 을 통 해 더욱 복잡 한 집행 논 리 를 정의 합 니 다.
  • 더 많은 본 시리즈 무료 튜 토리 얼 연재 "클릭 하여 집계 디 렉 터 리 진입"
    코드 예제
    본 논문 의 관련 예 는 아래 창고 중의 chapter3-13 목록 을 볼 수 있다.
    Github: https://github.com/dyc87112/SpringBoot-Learning/
    Gitee: https://gitee.com/didispace/SpringBoot-Learning/
    Spring Boot 2.5.0 재 설계 에 관 한 spring.sql.init 설정 은 무슨 소 용이 있 습 니까?의 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 spring.sql.init 설정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기