spring 프레임 워 크 통합 flyway 프로젝트 의 상세 한 과정

7111 단어 springflyway
스프링
Spring 은 로드 존 슨 이 만 든 오픈 소스 프레임 워 크 입 니 다.그것 은 기업 응용 개발 의 복잡성 을 해결 하기 위해 만 든 것 이다.
   Spring 은 기본 적 인 JavaBean 을 사용 하여 이전에 EJB 만 이 할 수 있 었 던 일 을 완성 합 니 다.
  그러나 Spring 의 용 도 는 서버 개발 에 만 국한 되 는 것 이 아니다.단순 성,테스트 가능 성,소나무 결합 측면 에서 볼 때 모든 자바 응용 은 Spring 에서 이득 을 볼 수 있다.
   목적:기업 응용 개발 의 복잡성 해결
   기능:EJB 대신 기본 적 인 자바 빈 을 사용 하고 더 많은 기업 응용 기능 을 제공 합 니 다.
   범위:모든 Java 응용 프로그램
   이것 은 용기 프레임 워 크 로 javabean(java 대상)을 담 는 데 사용 되 며,중간 프레임 워 크(만능 접착제)는 Struts 와 hibenate 를 한데 붙 여 사용 할 수 있 습 니 다.쉽게 말 해 스프링 은 가 벼 운 제어 반전(IoC)과 절단면(AOP)을 위 한 용기 프레임 이다.
Flyway 안내
Flyway 는 데이터베이스 버 전 관리 도구 로 SQL 스 크 립 트 를 통 해 DB Migration 자동화 업 그 레이 드 를 실현 하고 독립 적 인 실행 을 지원 하 며 구축 도구 나 Spring 개발 환경 과 통합 할 수 있 습 니 다.
최근 에 회사 프로젝트 에 flyway 를 통합 시 켰 습 니 다.저희 프로젝트 모 바 일 에서 spring 프레임 워 크 를 사 용 했 기 때문에 인터넷 에서 블 로 그 를 많이 봤 습 니 다.이 분야 의 물건 이 매우 적은 것 같 습 니 다.지금 은 spring boot 의 세상 이기 때문에 대부분 spring boot 통합 flyway 입 니 다.하지만 스프링 프레임 워 크 를 남 긴 회사 가 적지 않다.여기 에는 자신의 간 한 편 이 있 습 니 다.flyway 를 spring 프로젝트 에 추가 하고 싶 은 사람 에 게 더 많은 도움 이 되 었 으 면 합 니 다.
spring 프레임 워 크 를 사 용 했 기 때 문 입 니 다.그래서 저 버 전의 fly way 를 선택 하 겠 습 니 다.
fly way 각 버 전 은 여기 서 찾 아 보 세 요.https://mvnrepository.com/artifact/org.flywaydb/flyway-core
우리 의 maven 은 아 리 클 라 우 드 의 창 고 를 사용 합 니 다.아 리 클 라 우 드 창고 에는 낮은 버 전의 의존 이 없습니다.우 리 는 jar 가방 을 다운로드 해 야 합 니 다.여기 다운로드 한 것 은 3.0 버 전의 jar 가방 입 니 다.
다운로드 한 가방 은 프로젝트 webapp/WEB-INF/lib 에 복사 해 야 합 니 다.(웹 프로젝트 에는 WEB-INF 라 는 폴 더 가 있 습 니 다.프로젝트 의 웹 폴 더 만 찾 으 면 됩 니 다.웹 폴 더 는 폴 더 에 파란색 점 이 있 습 니 다.아래 그림 을 구체 적 으로 보 는 webapp 폴 더 입 니 다)

새 자원 디 렉 터 리 리 소스
db/migration(sql 파일 은 이 경로 의 폴 더 에 있 는.sql 파일 을 기본적으로 읽 습 니 다)

pom.xml 에 추가 합 니 다.추가 하지 않 으 면 resources 의 파일 을 war 패키지 에 포장 할 수 없습니다.

 <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*</include>
                </includes>
    </resource>
flyway 설정 클래스 를 추가 합 니 다.더 많은 설정 은 원본 코드 를 보십시오.

package com.dt.flyway;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.FlywayException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;


/**
 * @Description: flyway   
 * @author: 
 * @Date: 2021/7/12 15:57
 * @Copyright: Xi'an Dian Tong Software Co., Ltd. All Rights Reserved.
 * @Version 1.0
 */
public class DatabaseFlywayMigration {
    protected final static Logger log = LogManager.getLogger("DatabaseFlywayMigration");

    public void migrate() throws NamingException {
        log.info("DatabaseFlywayMigration-->migrate:flyway    ,       ");
        Context context = new InitialContext();
        //  tomcat     
        DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/wxi");
        log.info("DatabaseFlywayMigration-->migrate:       ,    flyway  ");
        Flyway flyway = new Flyway();
        //   sql       
        flyway.setEncoding("UTF-8");
        flyway.setOutOfOrder(true);
        flyway.setDataSource(dataSource);
        //     flyway            
        //flyway.setSchemas("flywaydemo");
        //     flyway metadata     
         flyway.setTable("flyway_schema_history");
        //     migrate     validation  
        //flyway.setValidationMode(ValidationMode.ALL);
        //    validation        
        //flyway.setValidationErrorMode(ValidationErrorMode.FAIL);

        //    validation        
        try {
            flyway.setInitOnMigrate(true);
            log.info("DatabaseFlywayMigration-->migrate:    ,    sql  ");
            flyway.migrate();
            log.info("DatabaseFlywayMigration-->migrate:sql      ,flyway---END");
        } catch (FlywayException e) {
            log.error("DatabaseFlywayMigration-->migrate:  sql    ,         ");
            flyway.repair();
            e.printStackTrace();
        }
    }
}
spring 의 xml 에 flyway 설정 류 의 bean 을 주입 합 니 다.(spring 항목 마다 xml 파일 이 있 습 니 다.bean 을 등록 할 때 항목 의 Database Flyway Migration 이 있 는 경 로 를 주의 하 십시오)

<!-- flayway -->
<bean id="flywayMigration1" class="com.dt.flyway.DatabaseFlywayMigration" lazy-init="false" init-method="migrate"> </bean>

여기까지 이동 단 통합 flyway 가 완성 되 었 습 니 다.
이후 이 sql 문 구 는 resources/db/migration 폴 더 아래 에 만 놓 으 면 됩 니 다.(그러나 이 sql 이름 은 모두 fly way 에 부합 되 지 않 습 니 다.이름 수정 이 필요 합 니 다)

이름 규칙:
이 곳 의 SQL 문 구 는 일정한 규범 에 따라 야 합 니 다.그렇지 않 으 면 실행 할 때 flyway 가 잘못 알 릴 수 있 습 니 다.명명 규칙 은 주로 두 가지 가 있다.
한 번 만 실 행 된 SQL 이름 은 대문자'V'로 시작 하고,뒤 에는'0~9'숫자의 조합 을 따라 가 며,숫자 사이 에는'.'또는 밑줄','분할 한 다음 에 두 개의 밑줄 로분할,그 다음 파일 이름,마지막 으로.sql 로 끝 납 니 다.예 를 들 어 V 20210707create_user.sql、V20210707__add_user.sql。
반복 적 으로 실행 할 수 있 는 SQL 은 대문자'R'로 시작 하고 그 다음 에 두 개의 밑줄 로 분할 한 다음 에 파일 이름과 마지막 으로'sql'로 끝 납 니 다.예 를 들 어 Rtruncate_user_dml.sql。
이 가운데 V 로 시작 하 는 SQL 은 R 로 시작 하 는 SQL 보다 우선 순위 가 높다.
V:고정 대문자
202107.01:20210707 은 날짜 이 고 뒤에.01 로 번 호 를 대표 합 니 다.
flyway 의 집행 은 순서 가 있 기 때 문 입 니 다.예 를 들 어 당신 이 V2021 를 실 행 했 기 때 문 입 니 다.create_user,실행 V2020update_user。잘못 보고 할 수 있 는 이 유 는 2020<2021.그래서 우 리 는 번호 가 순서대로 커진다 는 것 을 보증 해 야 한다.
Flyway 는 어떻게 두 SQL 파일 의 우선 순 위 를 비교 합 니까?그것 은 왼쪽 정렬 원칙 을 채택 하고,결 위 는 0 으로 대신한다.몇 가지 예 를 들다.
1.0.1.1 은 1.0.1 버 전보 다 높 았 다.
1.0.10 은 1.0.9.4 버 전보 다 높 았 다.
1.0.10 은 1.0.010 버 전 번호 만큼 높 고 버 전 번호 부분의 선도 0 은 무시 된다.
__:이 건 두 개
예 를 들 면:
V2.0.9__upgrade.sql
V2.0.11__upgrade.sql
V2.0.13__upgrade.sql
V2.0.14__upgrade.sql
저자:세상 에 유 료 bug 가 없습니다.출처:https://www.cnblogs.com/LoveBB/본 고의 저작권 은 작가 와 블 로그 원 에 있 습 니 다.전 재 를 환영 합 니 다.그러나 작가 의 동의 없 이 반드시 글 페이지 에 원문 링크 를 제공 해 야 합 니 다.그렇지 않 으 면 법률 적 책임 을 추궁 할 권 리 를 보류 합 니 다.
spring 통합 flyway 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 spring 통합 flyway 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기