Java 프로젝트 생성에 관한 시리즈 기사입니다(다른 자료에 대한 링크는 끝에 있습니다). 그 목표는 핵심 기술을 분석하는 것이고, 그 결과는 텔레그램 봇을 작성하는 것입니다. 이 부분에서는 SpringBoot와 Flyway를 시작하려고 합니다. 원하는 만큼 이론의 최소량))) Flyway/Liquibase의 최종 비교를 무기한 생략하고 요점만 설명합니다. 그럼에도 불구하고 그것은 이미 계속되고 있습니다. Flyway를 두 번 설명하지 않기 위해 저는 이를 향후 JRTB 프로젝트에 즉시 추가하기로 결정했습니다.
다각적이며 다중 모듈식입니다.
이것의 일환으로 우리는 무엇을 해야 합니까?
- Maven을 기반으로 SpringBoot 애플리케이션을 시작합니다.
- 거기에 Flyway를 추가하세요. 다행스럽게도 쉽게 통합됩니다.
- 예제 데이터베이스에 있는 테이블에 대한 스키마를 추가합니다.
비행경로란 무엇인가
무언가를 사용하려면 먼저 그것이 무엇인지, 왜 그런지 알아야 합니다. Flyway 는 데이터베이스 버전 제어 도구입니다. 말은 잘 알지만 왠지 이해가 더해지지 않았죠? 이동경로가 해결하는 문제를 설명해보자. 프로젝트가 있다고 가정해 보겠습니다. 세상의 모든 것이 그렇듯이 완벽하지 않기 때문에 프로젝트의 최종 버전을 계획하고 작성하는 것이 불가능했습니다. 설명되지 않은 특정 뉘앙스가 나타날 때마다. 프로젝트는 작업에 데이터베이스를 사용합니다. 물론 프로젝트가 변경되면 데이터베이스 구조도 변경될 수 있습니다. 프로젝트의 엔터티 중 하나에 대한 새 필드를 추가한다고 가정해 보겠습니다. 어떻게 하나요?- 이 필드를 엔터티에 추가하고 비즈니스 논리가 작동하도록 모든 것을 업데이트합니다.
- 데이터베이스를 업데이트하십시오. 유일한 방법은 수동으로 수행하는 것입니다. 이렇게 하려면 필요한 SQL 스크립트에 들어가서 등록해야 합니다.
- 하지만 프로젝트를 배포할 위치가 두 개 이상인 경우 각 위치에서 이 작업을 수행해야 합니까?
- 다시 돌아가고 싶다면 데이터베이스 구조가 현재 어떤 상태인지 정확히 어떻게 알 수 있나요?
- 데이터베이스 변경이 성공했는지 어떻게 확인할 수 있나요?
- 프로젝트에서 발생한 모든 데이터베이스 변경 사항을 추적할 수 있는 기회를 얻으려면 어떻게 해야 합니까?
SpringBoot + Flyway 실행
스프링 부트란?
무엇을 출시할 예정인가요?... 우리가 무엇을, 왜 하는지 이해하려면 SpringBoot가 무엇인지 결정해야 합니다. 먼저 Spring 에 대해 빠르게(매우 빠르게) 이야기해 보겠습니다 . 현재 이는 Java로 서버 애플리케이션을 개발하는 데 있어 사실상 업계 표준입니다. 무엇의 기준? 이것을 어떻게 설명할 수 있나요? Spring은 애플리케이션의 뼈대이며, 여기에 비즈니스 로직인 "핵심"을 추가합니다. Spring의 도움으로 (이하 언어 전환에 시간을 낭비하지 않도록 이 트레이싱 페이퍼를 사용할 것입니다:D)) Spring은 우리가 모든 일을 시작하는 시작점을 제공합니다. 이는- 데이터베이스 작업을 원하시나요? 관계형을 원하시나요? 비관계형을 원하시나요? 여기 Spring Data가 있습니다.
- http 요청 작업을 하시겠습니까? 여기, Spring 웹(Spring MVC)이 있습니다.
- 모든 개체를 한 곳에 보관할 수 있는 컨테이너가 필요합니까? 여기 스프링 코어가 있습니다.
- 다양한 역할과 명령 체계가 있도록 프로젝트에 보안을 설정해야 합니까? 스프링 시큐리티.
- 그런 것이 있으면 좋겠다고 생각했을 때 Spring이 이미 필요한 것을 갖추고 있고 빠르고 쉽게 통합된다는 사실이 밝혀졌습니다.
SpringBoot 실행
Maven이 무엇인지 이미 이해했으므로 필요에 맞는 새 프로젝트를 만들어 보겠습니다. 이렇게 하려면 이 문제를 위해 특별히 만들어진 웹사이트로 이동하면 됩니다. 이를 Spring 초기화 라고 합니다 . 여기에서 필요한 사항을 작성하고 선택해야 합니다.- 프로젝트 빌드 도구는 gradle 또는 maven입니다. 보시다시피 Ant는 더 이상 언급되지 않습니다. 이는 어떤 빌드 도구가 시간을 투자할 가치가 있는지에 대한 좋은 힌트입니다.
- 작성할 수 있는 언어는 java, kotlin, groovy입니다. 여기에서는 모든 것이 간단합니다. 모두 JVM과 유사하며 Java 코드를 쉽게 실행할 수 있습니다. 그건 그렇고, Kotlin을 살펴볼 가치가 있습니다. Groovy는 솔직히 재미가 없어졌습니다(그루비로 전환한 적도 있었지만 금방 지나갔습니다).
- Spring 버전... 여기서는 Spring의 주요 부분과 해당 모듈의 버전이 일관된다는 점을 이해해야 합니다.
- 프로젝트 데이터. 나는 이미 이러한 것들을 설명했습니다.
- Jar 또는 War 중에서 수집할 아카이브를 선택합니다.
- 글쎄, 우리가 가장 좋아하는 Java 버전입니다. 그리고 최근에는 이러한 버전이 많이 나왔습니다... 그들은 수년을 기다렸고 이제는 1년에 두 개가 있습니다.
- Maven – 우리가 이전에 이것에 대해 이야기한 것은 아무것도 아닙니다.
- Java는 우리의 사랑입니다 :D
- 버전 2.2.11을 살펴보겠습니다. 왜 최신이 아닌가? 최신 버전일수록 버그가 있을 가능성이 더 커지기 때문입니다. 우리에게는 어떤 버전이 중요하지 않지만 이전 버전이 더 안정적입니다. 따라서 우리는 2.2.11을 선택합니다.
- 그룹: com.github.javarushcommunity
- 아티팩트: springboot-flyway-demo
- 이름: SpringBoot + Flyway 데모
- 설명: 프로젝트는 SpringBoot와 Flyway 간의 통합을 보여줍니다 . (예, 문서 작성 능력은 개발의 중요한 부분입니다 :))
- 패키지 이름: com.github.javarushcommunity.springbootflywaydemo . 여기에서는 애플리케이션을 시작할 클래스가 포함된 기본 패키지를 즉시 생성합니다.
- 포장: 항아리
- 자바: 8. 기관차보다 먼저 가서 오래된 8호선을 타지 말자. 왜 11이 아니지? 무엇 때문에? 우리의 예에서는 요점을 알 수 없습니다.
spring.datasource.url=jdbc:mysql://localhost:3306/flyway_demo_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
기본 메소드를 다시 실행하여 다음을 얻습니다. 이제 최소한 하나의 마이그레이션을 추가해야 합니다. 마이그레이션을 올바르게 작성하려면 다음 템플릿을 사용해야 합니다. V<VERSION>__<NAME>.sql 이 템플릿을 사용하여 해당 폴더 / src/main/resources/ 에 V00001__Create_country_table.sql 이라는 마이그레이션 파일을 생성합니다. db.migration/ . 그 안에 국가 테이블을 만들어 보겠습니다. 데이터베이스에 관한 두 번째 기사 의 스크립트를 살펴보겠습니다 . 시작하기 전에 작업용 데이터베이스 flyway_demo_db를 생성해 보겠습니다. MysqlWorkbench를 통해 이 작업을 수행해 보겠습니다. 이제 기본 메서드를 다시 실행할 수 있습니다. 모든 것이 잘 진행되었지만 아직 프로젝트에 아무것도 없기 때문에 작업이 완료되었습니다. 그러나 로그에서 다음 사항이 분명합니다( 로그 내용 읽기 ).
- 데이터베이스에 성공적으로 연결되었습니다.
- 마이그레이션이 검증되었으며 모든 것이 정상입니다.
- Flyway는 마이그레이션을 관리하기 위한 테이블을 만들었습니다.
- 그리고 00001이 시작된 이주 – 국가 창설이 성공했습니다.
GO TO FULL VERSION