Spring Boot 2.5.0 재 설 계 된 spring.sql.init 설정 이 무슨 소 용이 있 습 니까?
8030 단어 spring.sql.init배치 하 다.SpringBoot
먼저 잘못된 부분 을 바로잡다.주로 버 전 업데이트 소 개 를 할 때 표현 상의 문제 가 있 었 습 니 다.일부 독자 들 은 이번 업데이트 가 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.username
과 spring.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`;따라서 위의 예 는 두 번 째 로 실 행 될 때 오 류 를 보고 하고 실 패 를 시작 합 니 다.첫 번 째 로 실 행 될 때 표 가 이미 존재 하기 때 문 입 니 다.이 설정 들 에 대한 응용 프로그램 은 똑똑 한 당신 이 반드시 데이터베이스 버 전 관리 와 연결 시 킬 것 이 라 고 믿 습 니 다(스 크 립 트 를 자동 으로 실행 할 수 있 기 때 문 입 니 다).
그렇다면 이러한 설정 에 의존 하면 업무 응용 배 치 를 감당 할 수 있 을 까?
개인 적 으로 위 에서 소개 한 설정 에 대해 서 는 어느 정도 자동 실행 능력 을 갖 추고 있 지만.그러나 현재 환경 에 대한 판단 능력 이 부족 하기 때문에 실제 배치 장면 에 대응 하기 에는 턱 없 이 부족 하 다.
데이터베이스 시트 구 조 를 자동화 하고 데 이 터 를 초기 화 하려 면 제 제안 은:
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 설정 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ELK 로그 분석 시스템 설치 및 배치주: Logstash 의 실행 은 자바 환경 에 의존 하기 때문에 Logstash 1.5 이상 버 전 은 자바 1.7 보다 낮 지 않 기 때문에 최신 버 전의 자바 를 사용 하 는 것 을 추천 합 니 다.우 리 는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.