उदाहरण के रूप में जावा / स्प्रिंग / H2 का उपयोग करके लिक्विबेस स्क्रिप्ट्स को रोल करने के लिए XML और SQL के बीच चुनना

अगली परियोजना पर काम करने की प्रक्रिया में, टीम ने लिबास में एक्सएमएल या एसक्यूएल प्रारूप के उपयोग पर विवाद किया। स्वाभाविक रूप से, लिलीबेस के बारे में पहले ही कई लेख लिखे जा चुके हैं, लेकिन हमेशा की तरह, मैं अपनी टिप्पणियों को जोड़ना चाहता हूं। लेख एक डेटाबेस के साथ एक सरल अनुप्रयोग बनाने पर एक छोटा ट्यूटोरियल पेश करेगा और इन प्रकारों के लिए मेटा-सूचना में अंतर पर विचार करेगा।

लिक्विबेस डेटाबेस स्कीमा परिवर्तनों को ट्रैक करने, प्रबंधित करने और लागू करने के लिए एक डेटाबेस स्वतंत्र पुस्तकालय है। डेटाबेस में परिवर्तन करने के लिए, एक माइग्रेशन फ़ाइल (* changeet *) बनाई जाती है, जो मुख्य फ़ाइल (* changeLog *) से जुड़ी होती है, जो संस्करणों को नियंत्रित करती है और सभी परिवर्तनों का प्रबंधन करती है। XML , YAML , JSON और SQL प्रारूप का उपयोग डेटाबेस की संरचना और परिवर्तनों का वर्णन करने के लिए किया जाता है।

डेटाबेस प्रवास की मूल अवधारणा इस प्रकार है:



Liquibase के बारे में अधिक जानकारी यहाँ या यहाँ पाई जा सकती है । मुझे उम्मीद है कि समग्र चित्र स्पष्ट है, इसलिए परियोजना बनाने के लिए आगे बढ़ें।

परीक्षण परियोजना का उपयोग करता है


  • जावा 8
  • वसंत का बूट
  • Maven
  • एच 2
  • अच्छी तरह से शराबी

परियोजना निर्माण और निर्भरता


स्प्रिंग-बूट का उपयोग यहां सशर्त नहीं है, आप स्क्रिप्ट को रोल करने के लिए सिर्फ एक मावेन-प्लगइन कर सकते हैं। तो चलिए शुरू करते हैं।

1. IDE में एक मावेन परियोजना बनाएं और pom फ़ाइल में निम्न निर्भरताएँ जोड़ें:

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.6.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> 

2. संसाधन फ़ोल्डर में, application.yml फ़ाइल बनाएँ और निम्नलिखित पंक्तियाँ जोड़ें:

 spring: liquibase: change-log: classpath:/db/changelog/db.changelog-master.yaml datasource: url: jdbc:h2:mem:test; platform: h2 username: sa password: driverClassName: org.h2.Driver h2: console: enabled: true 

Liquibase लाइन: परिवर्तन-लॉग: classpath: /db/changelog/db.changelog-master.yaml - हमें बताती है कि कहां लिरिबस स्क्रिप्ट फ़ाइल स्थित है।

3. db.changelog- मास्टर पथ के साथ संसाधन फ़ोल्डर में, निम्न फ़ाइलें बनाएँ:

  • xmlSchema.xml - xml प्रारूप में स्क्रिप्ट बदलें
  • sqlSchema.sql - sql प्रारूप में परिवर्तन की स्क्रिप्ट
  • data.xml - तालिका में डेटा जोड़ें
  • db.changelog-master.yml - परिवर्तन की सूची

4. फ़ाइलों में डेटा जोड़ना:
परीक्षण के लिए आपको दो असंबंधित टी बनाने की आवश्यकता है
टेबल और न्यूनतम डेटा सेट।
SqlSchema.sql फ़ाइल में, हम सभी के लिए प्रसिद्ध sql सिंटैक्स जोड़ते हैं:

 --liquibase formatted sql --changeset TestUsers_sql:1 CREATE TABLE test_sql_table ( name VARCHAR NOT NULL, description VARCHAR ); --changeset TestUsers_sql:2 CREATE TABLE test_sql_table_2 ( name VARCHAR NOT NULL, description VARCHAR ); 

एक बदलाव के रूप में sql का उपयोग करना आसान स्क्रिप्टिंग द्वारा संचालित है। फाइलों में, हर कोई सामान्य वर्ग को समझता है।

परिवर्तन को अलग करने के लिए एक टिप्पणी का उपयोग किया जाता है:
--changeset TestUsers_sql: 1 परिवर्तन संख्या और अंतिम नाम के साथ
(पैरामीटर यहां मिल सकते हैं ।)

XmlSchema.sql फ़ाइल में, उस DSL को जोड़ें जो लिबास प्रदान करता है:

 <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet id="Create table test_xml_table" author="TestUsers_xml"> <createTable tableName="test_xml_table"> <column name="name" type="character varying"> <constraints primaryKey="true" nullable="false"/> </column> <column name="description" type="character varying"/> </createTable> </changeSet> <changeSet id="Create table test_xml_table_2" author="TestUsers_xml"> <createTable tableName="test_xml_table_2"> <column name="name" type="character varying"> <constraints primaryKey="true" nullable="false"/> </column> <column name="description" type="character varying"/> </createTable> </changeSet> </databaseChangeLog> 

तालिकाओं के निर्माण का वर्णन करने के लिए यह प्रारूप विभिन्न डेटाबेस के लिए सार्वभौमिक है। जावा के नारे की तरह: "यह एक बार लिखा गया है, यह हर जगह काम करता है" लिक्विबेस एक्सएमएल विवरण का उपयोग करता है और चयनित डेटाबेस के आधार पर इसे विशिष्ट एसक्यूएल कोड में संकलित करता है। जो सामान्य मापदंडों के लिए बहुत सुविधाजनक है।

प्रत्येक ऑपरेशन एक अलग चेंजसेट में किया जाता है, जो आईडी और लेखक का नाम दर्शाता है। मुझे लगता है कि xml में उपयोग की जाने वाली भाषा समझने में बहुत आसान है और इसे समझाने की भी आवश्यकता नहीं है।

5. हमारी प्लेटों को डेटा अपलोड करें, यह आवश्यक नहीं है, लेकिन जब से प्लेटें बनाई गई हैं, आपको उनमें कुछ डालने की आवश्यकता है। हम निम्नलिखित डेटा के साथ data.xml फ़ाइल को भरते हैं:

 <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet id="insert data to test_xml_table" author="TestUsers"> <insert tableName="test_xml_table"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_xml_table_2" author="TestUsers"> <insert tableName="test_xml_table_2"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_sql_table" author="TestUsers"> <insert tableName="test_sql_table"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> <changeSet id="insert data to test_sql_table_2" author="TestUsers"> <insert tableName="test_sql_table_2"> <column name="name" value="model"/> <column name="description" value="- "/> </insert> </changeSet> </databaseChangeLog> 

रोलिंग टेबल के लिए फाइलें बनाई जाती हैं, टेबल के लिए डेटा बनाया जाता है। यह सब एक सामान्य रोलिंग ऑर्डर में संयोजित करने और हमारे एप्लिकेशन को लॉन्च करने का समय है।

हमारी sql और xml फ़ाइलों को db.changelog-master.yml फ़ाइल में जोड़ें:

 databaseChangeLog: - include: # schema file: db/changelog/xmlSchema.xml - include: file: db/changelog/sqlSchema.sql # data - include: file: db/changelog/data.xml 

और अब जबकि हमारे पास सब कुछ है। बस हमारा एप्लिकेशन चलाएं। शुरू करने के लिए आप कमांड लाइन या प्लगइन का उपयोग कर सकते हैं, लेकिन हम सिर्फ मुख्य विधि बनाएंगे और अपना स्प्रिंगएप्लिकेशन चलाएंगे।

मेटाडेटा देखें


अब जब हमने टेबल बनाने और पॉपुलेट करने के लिए अपनी दो स्क्रिप्ट्स चलाई हैं, तो हम databaseChangeLog टेबल को देख सकते हैं और देख सकते हैं कि क्या लुढ़का है।



रोलिंग xml का परिणाम:

  1. Xml फ़ाइलों से आईडी फ़ील्ड में, एक हेडर दिखाई देता है कि डेवलपर ChangeSet को इंगित करता है, प्रत्येक व्यक्ति changeSet डेटाबेस में एक शीर्षक और विवरण के साथ एक अलग लाइन है।
  2. प्रत्येक परिवर्तन के लेखक को संकेत दिया जाता है।

Sql रोल परिणाम:

  1. Sql फ़ाइलों के आईडी फ़ील्ड में चेंजसेट के बारे में कोई विस्तृत जानकारी नहीं है।
  2. प्रत्येक परिवर्तन के लेखक को संकेत नहीं दिया गया है।

एक्सएमएल का उपयोग करने के लिए एक और महत्वपूर्ण निष्कर्ष रोलबैक है। Xml का उपयोग करने पर तालिका बनाने, तालिका बदलने, स्तंभ जोड़ने जैसे कमांड स्वचालित रूप से रोलबैक होते हैं। Sql फ़ाइलों के लिए, प्रत्येक रोलबैक को मैन्युअल रूप से लिखा जाना चाहिए।

निष्कर्ष


हर कोई अपने लिए चुनता है कि क्या उपयोग किया जाए। लेकिन हमारी पसंद xml पक्ष पर गिर गई। विस्तृत मेटा-सूचना और अन्य डेटाबेस के लिए आसान संक्रमण, सभी के पसंदीदा एसक्यूएल-प्रारूप से तराजू को पछाड़ दिया।

Source: https://habr.com/ru/post/hi466651/


All Articles