먼저 springboot 프로젝트를 생성하고, 상세한 설명은 생략한다.
프로젝트 구조
pom.xml 파일 구성
<? XML 버젼 = "1.0"인코딩 = "UTF-8" ?> < 프로젝트 의 xmlns = "http://maven.apache.org/POM/4.0.0" 의 xmlns :이 xsi = "http://www.w3.org / 2001 / 된 XMLSchema 인스턴스 " 는 xsi :의 schemaLocation ="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd " > < modelVersion > 4.0.0 </ modelVersion > < 부모 > < 의 groupId > org.springframework.boot </ 의 groupId > < artifactId를 > < 버전 > 2.1.8.RELEASE </ 버전 > < relativepath를 /> <! - 저장소에서 룩업 상위 -> </ 부모 > < 의 groupId > com.exampleatguigu </ 의 groupId > < artifactId를 > springboot-06 - 데이터 - JDBC </ artifactId를 > < 버전 > 0.0.1-SNAPSHOT </ 버전 > < 이름 > springboot-06-데이터 JDBC </ 이름 > <기술> 봄 부팅에 대한 데모 프로젝트 </ 설명 > < 속성 > < java.version > 1.8 </ java.version > </ 속성 > < 종속성 > < 의존성 > < 의 groupId > org.springframework.boot </ 의 groupId > < artifactId를 > 스프링 부팅 스타터 웹 </ artifactId를 > </ 의존성 > <! -添加JDBC依赖-> <의존성 > < 의 groupId > org.springframework.boot </ 의 groupId > < artifactId를 > 스프링 부팅 스타터 JDBC </ artifactId를 > </ 의존성 > <! -添加mysql을驱动包-> < 의존성 > < 의 groupId > MySQL의 </ 의 groupId > < artifactId를 > MySQL을 커넥터 자바 </ artifactId를 > < 범위 > 런타임 </ 범위 > </ 의존성 >< 의존성 > < 의 groupId > org.springframework.boot </ 의 groupId > < artifactId를 > 스프링 부팅 스타터 테스트 </ artifactId를 > < 범위 > 시험 </ 범위 > </ 의존성 > </ 의존성 > < 빌드 > < 플러그인 > < 플러그인 > < 의 groupId > org.springframework.boot </ 의 groupId > <artifactId를 >스프링 부팅 받는다는 - 플러그인 </ artifactId를 > </ 플러그인 > </ 플러그인 > </ 구축 > </ 프로젝트 >
YML 구성
나는 springboot2.1.18 버전을 사용하기 때문에이 메모는 주로 스키마 버전 2.x 구성, 초기화 모드에 기록 된 후, : 항상 기본 역할의 구성은 자동 삽입 클래스 경로에 저장된 SQL 파일을 만드는 것입니다 데이터베이스는 마우스 후 YML 파일 초기화 모드에 따른 읽기 소스 분석 프로그램에 Ctrl 키를 클릭을 선택합니다
첫째, 파일을 입력 DataSourceProperties.java
// initializationMode 구성 파일 YML로부터 수신 된 값을 나타낸다
공개 공극 setInitializationMode (DataSourceInitializationMode initializationMode) { 이 .initializationMode = initializationMode; }
// 열거 치 DataSourceInitializationMode 클래스
공공 열거 DataSourceInitializationMode { 항상, 임베디드, NEVER; 개인 DataSourceInitializationMode () { } }
광원부는, 초기화시에 기록 열거 값을 기록
DataSourceInitializer.java 파일의 IsEnabled 메소드는 열거 된 세 개의 논리 값에 기초하여 판정한다
//只有초기화 모드配置值为ALWAYS时才会返回진짜야
전용 부울 의 IsEnabled () { DataSourceInitializationMode 모드 = 이 .properties.getInitializationMode (); 경우 (모드 == DataSourceInitializationMode.NEVER) { 반환 거짓 ; } 경우 (모드 == DataSourceInitializationMode.EMBEDDED &&! isEmbedded ()) { 반환 거짓 ; } 반환 사실 ; }
소스 코드의 스키마 부분을 만들려면 아래 봐
/ ** * 스키마는 필요한 만드는 경우. * @return { @code true로를 한 경우} 생성 된 스키마는 WAS * @see getSchema 번호 () DataSourceProperties * / 공공 부울 createSchema () { 목록 <리소스> = getScripts 스크립트 ( "봄. datasource.schema " 은이 .properties.getSchema (),"스키마 " ); 만약에 (! scripts.isEmpty ()) {
//의 IsEnabled 메서드 호출이 CLASSPATH의 SQL 파일을 실행할지 여부를 결정하고, 때 구성 파일 YML ALAYWS 값에만 적용 데이터베이스 테이블이 RUNSCRIPT 방법으로 검증 한 후 수행됩니다 만들 경우 (! 의 IsEnabled ()) { (logger.debug"장애인 초기화 (DDL 스크립트를 실행하지 않음)" ); 돌아 거짓 ; } 문자열 사용자 이름 = 이 .properties.getSchemaUsername (); 문자열 비밀 번호 = 이 .properties.getSchemaPassword (); runScripts (스크립트, 사용자 이름, 암호); } 반환 ! scripts.isEmpty (); }
개인 무효 runScripts (목록 <자원> 자원, 문자열 이름, 문자열 암호) { 경우 (resources.isEmpty ()) { 반환 ; } ResourceDatabasePopulator populator = 새로운 ResourceDatabasePopulator (); populator.setContinueOnError ( 이 .properties.isContinueOnError ()); populator.setSeparator ( 이 .properties.getSeparator ()); 경우 ( 이 .properties.getSqlScriptEncoding ()! = null이 ) { populator.setSqlScriptEncoding ( 이. .properties.getSqlScriptEncoding () 이름 ()); } 에 대한 (자원 자원 : 자원) { populator.addScript (자원); } 데이터 소스 데이터 소스 = 이 .dataSource; 경우 (StringUtils.hasText (사용자 이름) && StringUtils.hasText (비밀번호)) { 은 dataSource = DataSourceBuilder.create ( 이 .properties.getClassLoader ()) .driverClassName ( 이 .properties.determineDriverClassName ()). URL ( 이 .properties.determineUrl ()) .username (사용자 이름) .password (비밀번호) .build (); } DatabasePopulatorUtils.execute (populator,은 dataSource); }
당신은 코드가 원하는 결과를 달성하지 않았다 부여하지 않고 실행 볼 때 소스, 향후 버전 2.x에서 규칙 구성을 많이 추가, 짧은에, 우리는 관련 구성이 누락되어 있는지 확인한다이 시간을 단계적으로 게시하지.
결과 :