برنامه نویسی

Flyway DB migrations را با AWS Lambda و RDS اجرا کنید – قسمت 1

Summarize this content to 400 words in Persian Lang
معمولاً نیاز به اجرای به‌روزرسانی‌های پایگاه داده SQL وجود دارد: به‌روزرسانی ستون‌های جدول، افزودن ردیف‌های جدید، ایجاد یک طرح جدید و غیره. اغلب تیم‌های توسعه‌دهنده از Flyway استفاده می‌کنند. این یک ابزار استقرار پایگاه داده منبع باز SQL است. در Flyway به تمام تغییرات DDL و DML در پایگاه داده مهاجرت گفته می شود. مهاجرت ها را می توان نسخه یا تکرار کرد.

اگر خوشه RDS در زیرشبکه خصوصی است، چگونه می‌خواهید این مهاجرت‌های DB را خودکار کنید؟یکی از راه حل ها استفاده از AWS Lambda در همان VPC است که flyway در برابر DB اجرا می شود.

در اینجا کاری است که ما می خواهیم انجام دهیم:

قسمت 1 – ایجاد تنظیمات محلی

پروژه را راه اندازی کنید
تصویر داکر برای PostgreSQL و Flyway تا بتوانیم کد خود را آزمایش کنیم
کلاس جاوا را بنویسید که Flyway Migrations را در ظرف داکر ما اجرا کند

قسمت 2 – استقرار در AWS

AWS Lambda را با استفاده از Terraform ایجاد کنید
کلاس جاوا را به روز کنید و کد را در لامبدا مستقر کنید
پیکربندی دسترسی از Lambda به RDS (بدون رمز عبور DB مورد نیاز است)
نتیجه گیری کنید

پروژه را راه اندازی کنید

└── src
├── main
├── java
│ └── com
│ └── example
│ └── DatabaseMigrationHandler.java
└── resources
└── db
└── migration
└── V1__Create_table.sql

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اسکریپت های مهاجرت SQL ما در پوشه src/resources/db/migration ذخیره می شود
کلاس اصلی جاوا ما در DatabaseMigrationHandler.java خواهد بود (شما می توانید بسته خود را به روشی که می خواهید نام گذاری کنید – من آن را com.example نام گذاری کردم)

تنظیم Docker Compose برای توسعه محلی

در این تنظیمات، ما از Docker Compose برای ایجاد یک محیط محلی برای آزمایش مهاجرت های پایگاه داده با استفاده از Flyway و PostgreSQL استفاده می کنیم. اگر می خواهید می توانید از توضیحات صرف نظر کنید و با کد به git repo برسید

/docker
├── .env.pg_admin
├── README.md
├── docker-compose.yml
└── init
└── create_schemas.sql

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

CREATE SCHEMA IF NOT EXISTS myschema;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد فایل جدید .env.pg_admin در داخل پوشه docker – این فایل حاوی مقادیری برای متغیرهای env برای یکی از کانتینرهای docker است.

PGADMIN_DEFAULT_EMAIL=user@domain.com
PGADMIN_DEFAULT_PASSWORD=mysecretpassword

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و در نهایت docker-compose.yml را در داخل پوشه docker ایجاد کنید

version: ‘3.1’

services:
db:
image: postgres
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: mysecretpassword
volumes:
– ./local-data:/var/lib/postgresql/data
– ./init:/docker-entrypoint-initdb.d # init scripts are executed upon DB container startup
ports:
– 5432:5432

flyway:
image: flyway/flyway
depends_on:
– db
volumes:
– ../src/main/resources/db/migration:/flyway/sql
command: -url=jdbc:postgresql://db:5432/postgres -schemas=myschema -user=postgres -password=mysecretpassword -connectRetries=60 migrate

pg_admin:
image: dpage/pgadmin4
depends_on:
– db
env_file:
– .env.pg_admin
ports:
– 80:80

volumes:
local-data:
external: false

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما سه سرویس را تعریف می کنیم: db، flyway و pg_admin.

سرویس پایگاه داده (db)

خدمات پرواز (flyway)

Depends_on: اطمینان حاصل می کند که سرویس db قبل از سرویس Flyway شروع می شود.
حجم ها: دایرکتوری محلی حاوی اسکریپت های انتقال SQL را به مکان مورد انتظار Flyway نگاشت می کند.
فرمان: پارامترهای لازم برای اتصال به پایگاه داده و اجرای مهاجرت ها را به Flyway ارائه می دهد:

-url=jdbc:postgresql://db:5432/postgres: JDBC URL to connect to the PostgreSQL database.
-schemas=myschema: Specifies the schema to migrate.
-user=postgres and -password=mysecretpassword: Database credentials.
-connectRetries=60: Retries the connection for up to 60 seconds if the database is not immediately available.
migrate: Command to run the migrations.

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرویس pgAdmin (pg_admin)

Depends_on: اطمینان حاصل می کند که سرویس db قبل از pgAdmin شروع می شود.
Env_file: متغیرهای محیط را از یک فایل .env.pg_admin بارگیری می کند تا pgAdmin را پیکربندی کند.
پورت ها: پورت 80 روی هاست را به پورت 80 در کانتینر برای دسترسی به pgAdmin از طریق یک مرورگر وب می‌رساند.

ظروف را شروع کنید

cd docker
docker-compose up -d

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجرای Flyway را تأیید کنید

docker ps -a
docker logs –tail 20

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کلاس جاوا بنویسید

در این بخش، ما به کلاس Java DatabaseMigrationHandler می پردازیم که برای اجرای مهاجرت های Flyway در برابر پایگاه داده محلی PostgreSQL تنظیم شده در یک ظرف Docker طراحی شده است. این کلاس تمام منطق لازم برای ایجاد یک اتصال پایگاه داده، آزمایش اتصال و اجرای مهاجرت ها را در بر می گیرد.

اگر می خواهید می توانید از توضیحات صرف نظر کنید و با کد به git repo برسید

package com.example;

import org.flywaydb.core.Flyway;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Objects;
import software.amazon.jdbc.PropertyDefinition;
import software.amazon.jdbc.ds.AwsWrapperDataSource;

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Package Declaration: کلاس بخشی از بسته com.example است.واردات: کلاس‌های لازم از کتابخانه Flyway، بسته جاوا SQL و بسته‌بندی AWS JDBC برای مدیریت اتصالات پایگاه داده وارد می‌شوند.

متغیرهای کلاس و نمونه

public class DatabaseMigrationHandler {
// instance vars
private final String dbHost;
private final String dbPort;
private final String dbName;
private final String dbSchema;
private final String dbUser;
private final String dbPassword;

private static final String DB_HOST = “localhost”;
private static final String DB_PORT = “5432”;
private static final String DB_NAME = “postgres”;
private static final String DB_SCHEMA = “myschema”;
private static final String DB_USER = “postgres”;
private static final String DB_PASSWORD = “mysecretpassword”;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای نمونه: اینها جزئیات اتصال پایگاه داده مانند میزبان، پورت، نام، طرحواره، کاربر و رمز عبور را ذخیره می کنند.ثابت استاتیک: مقادیر پیش فرض برای جزئیات اتصال پایگاه داده به عنوان ثابت های ثابت تعریف می شوند.

public DatabaseMigrationHandler() {
this.dbHost = DB_HOST;
this.dbPort = DB_PORT;
this.dbName = DB_NAME;
this.dbSchema = DB_SCHEMA;
this.dbUser = DB_USER;
this.dbPassword = DB_PASSWORD;
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سازنده: متغیرهای نمونه را با مقادیر پیش فرض تعریف شده در بالا مقداردهی می کند.

private boolean testConnection() {
try (Connection connection = getDataSource().getConnection()) {
return connection != null;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش testConnection: تلاش برای ایجاد ارتباط با پایگاه داده. در صورت موفقیت، true را برمی گرداند، در غیر این صورت استثنا را ثبت می کند و false را برمی گرداند.

private void runMigrations() {
try{
Flyway flyway = Flyway.configure()
.dataSource(getDataSource())
.schemas(this.dbSchema. )
.load();
flyway.migrate();
System.out.println(“Completed Database migration!”);
} catch (Exception e) {
System.out.println(“Database migration failed!”);
e.printStackTrace();
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش runMigrations: مهاجرت های Flyway را پیکربندی و اجرا می کند. از کلاس Flyway برای تنظیم منبع داده و طرحواره استفاده می کند، سپس فرآیند مهاجرت را آغاز می کند.

پیکربندی منبع داده

private AwsWrapperDataSource getDataSource() {
Properties targetDataSourceProps = new Properties();
targetDataSourceProps.setProperty(“ssl”, “false”);
targetDataSourceProps.setProperty(“password”, this.dbPassword);

AwsWrapperDataSource ds = new AwsWrapperDataSource();
ds.setJdbcProtocol(“jdbc:postgresql:”);
ds.setTargetDataSourceClassName(“org.postgresql.ds.PGSimpleDataSource”);
ds.setServerName(this.dbHost);
ds.setDatabase(this.dbName);
ds.setServerPort(this.dbPort);
ds.setUser(this.dbUser);
ds.setTargetDataSourceProperties(targetDataSourceProps);

return ds;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش getDataSource: منبع داده را با استفاده از AwsWrapperDataSource برای اتصال به پایگاه داده PostgreSQL پیکربندی می کند. این ویژگی های لازم مانند نام سرور، نام پایگاه داده، پورت، کاربر و رمز عبور را تنظیم می کند.

public static void main(String[] args) {
DatabaseMigrationHandler handler = new DatabaseMigrationHandler();
if (handler.testConnection()) {
System.out.println(“Database connection successful!”);
handler.runMigrations();
} else {
System.out.println(“Failed to connect to the database.”);
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش اصلی: نقطه ورود برنامه. این یک نمونه از DatabaseMigrationHandler را ایجاد می کند، اتصال پایگاه داده را آزمایش می کند و در صورت موفقیت آمیز بودن اتصال، مهاجرت ها را اجرا می کند.

توضیح build.gradle

در این بخش، فایل build.gradle را بررسی می کنیم که برای پیکربندی فرآیند ساخت پروژه جاوا شما استفاده می شود. ما همچنین برخی از دستورات مفید Gradle را برای ساخت و اجرای پروژه شما پوشش خواهیم داد.

plugins {
id ‘java’
id ‘groovy’
id ‘application’
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

افزونه application: ایجاد برنامه های جاوا را تسهیل می کند و وظایفی را برای اجرای برنامه فراهم می کند

dependencies {
implementation ‘org.flywaydb:flyway-core:9.22.3’
implementation ‘org.postgresql:postgresql:42.7.2’
implementation ‘software.amazon.jdbc:aws-advanced-jdbc-wrapper:2.3.0’

testImplementation platform(‘org.junit:junit-bom:5.10.0’)
testImplementation ‘org.junit.jupiter:junit-jupiter’
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیاده سازی: وابستگی های مورد نیاز برای کامپایل و اجرای برنامه را اعلام می کند. در اینجا، flyway-core، postgresql، و aws-advanced-jdbc-wrapper گنجانده شده است.

application {
mainClass=”com.example.DatabaseMigrationHandler”
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

mainClass: کلاس اصلی برنامه را مشخص می کند که com.example.DatabaseMigrationHandler است. این نقطه ورود هنگام اجرای برنامه است.

هنگامی که فایل build.gradle خود را تنظیم کردید، می توانید از چندین دستور Gradle برای مدیریت پروژه خود استفاده کنید. این دستورات از خط فرمان اجرا می شوند.

./gradlew clean

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

clean: دایرکتوری ساخت را حذف می کند و به طور موثر پروژه را تمیز می کند. این برای اطمینان از یک محیط ساخت تازه مفید است.

./gradlew build

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

build: کد منبع را کامپایل می کند، آزمایش ها را اجرا می کند و پروژه را در یک فایل JAR بسته بندی می کند. این دستور تمام مراحل لازم برای ایجاد یک آرتیفکت ساخت را انجام می دهد.

./gradlew run

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

run: کلاس اصلی مشخص شده در قسمت برنامه را اجرا می کند. در این مورد، com.example.DatabaseMigrationHandler را اجرا می کند که مهاجرت های Flyway را مدیریت می کند.

در لاگ ها باید ببینید که اتصال به DB برقرار شد و مهاجرت های DB با موفقیت اجرا شد.

معمولاً نیاز به اجرای به‌روزرسانی‌های پایگاه داده SQL وجود دارد: به‌روزرسانی ستون‌های جدول، افزودن ردیف‌های جدید، ایجاد یک طرح جدید و غیره. اغلب تیم‌های توسعه‌دهنده از Flyway استفاده می‌کنند. این یک ابزار استقرار پایگاه داده منبع باز SQL است. در Flyway به تمام تغییرات DDL و DML در پایگاه داده مهاجرت گفته می شود. مهاجرت ها را می توان نسخه یا تکرار کرد.

اگر خوشه RDS در زیرشبکه خصوصی است، چگونه می‌خواهید این مهاجرت‌های DB را خودکار کنید؟
یکی از راه حل ها استفاده از AWS Lambda در همان VPC است که flyway در برابر DB اجرا می شود.

توضیحات تصویر

در اینجا کاری است که ما می خواهیم انجام دهیم:

قسمت 1 – ایجاد تنظیمات محلی

  1. پروژه را راه اندازی کنید
  2. تصویر داکر برای PostgreSQL و Flyway تا بتوانیم کد خود را آزمایش کنیم
  3. کلاس جاوا را بنویسید که Flyway Migrations را در ظرف داکر ما اجرا کند

قسمت 2 – استقرار در AWS

  1. AWS Lambda را با استفاده از Terraform ایجاد کنید
  2. کلاس جاوا را به روز کنید و کد را در لامبدا مستقر کنید
  3. پیکربندی دسترسی از Lambda به RDS (بدون رمز عبور DB مورد نیاز است)
  4. نتیجه گیری کنید

پروژه را راه اندازی کنید

└── src
    ├── main
        ├── java
        │   └── com
        │       └── example
        │           └── DatabaseMigrationHandler.java
        └── resources
            └── db
                └── migration
                    └── V1__Create_table.sql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • اسکریپت های مهاجرت SQL ما در پوشه src/resources/db/migration ذخیره می شود
  • کلاس اصلی جاوا ما در DatabaseMigrationHandler.java خواهد بود (شما می توانید بسته خود را به روشی که می خواهید نام گذاری کنید – من آن را com.example نام گذاری کردم)

تنظیم Docker Compose برای توسعه محلی

در این تنظیمات، ما از Docker Compose برای ایجاد یک محیط محلی برای آزمایش مهاجرت های پایگاه داده با استفاده از Flyway و PostgreSQL استفاده می کنیم. اگر می خواهید می توانید از توضیحات صرف نظر کنید و با کد به git repo برسید

/docker
├── .env.pg_admin
├── README.md
├── docker-compose.yml
└── init
    └── create_schemas.sql
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

CREATE SCHEMA IF NOT EXISTS myschema;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ایجاد فایل جدید .env.pg_admin در داخل پوشه docker – این فایل حاوی مقادیری برای متغیرهای env برای یکی از کانتینرهای docker است.
PGADMIN_DEFAULT_EMAIL=user@domain.com
PGADMIN_DEFAULT_PASSWORD=mysecretpassword
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • و در نهایت docker-compose.yml را در داخل پوشه docker ایجاد کنید
version: '3.1'

services:
  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: mysecretpassword
    volumes:
      - ./local-data:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d # init scripts are executed upon DB container startup
    ports:
      - 5432:5432

  flyway:
    image: flyway/flyway
    depends_on:
      - db 
    volumes:
      - ../src/main/resources/db/migration:/flyway/sql
    command: -url=jdbc:postgresql://db:5432/postgres -schemas=myschema -user=postgres -password=mysecretpassword -connectRetries=60 migrate

  pg_admin:
    image: dpage/pgadmin4
    depends_on:
      - db 
    env_file:
      - .env.pg_admin
    ports:
      - 80:80

volumes:
  local-data:
    external: false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما سه سرویس را تعریف می کنیم: db، flyway و pg_admin.

سرویس پایگاه داده (db)

خدمات پرواز (flyway)

  • Depends_on: اطمینان حاصل می کند که سرویس db قبل از سرویس Flyway شروع می شود.
  • حجم ها: دایرکتوری محلی حاوی اسکریپت های انتقال SQL را به مکان مورد انتظار Flyway نگاشت می کند.
  • فرمان: پارامترهای لازم برای اتصال به پایگاه داده و اجرای مهاجرت ها را به Flyway ارائه می دهد:
   -url=jdbc:postgresql://db:5432/postgres: JDBC URL to connect to the PostgreSQL database.
   -schemas=myschema: Specifies the schema to migrate.
   -user=postgres and -password=mysecretpassword: Database credentials.
   -connectRetries=60: Retries the connection for up to 60 seconds if the database is not immediately available.
   migrate: Command to run the migrations.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرویس pgAdmin (pg_admin)

  • Depends_on: اطمینان حاصل می کند که سرویس db قبل از pgAdmin شروع می شود.
  • Env_file: متغیرهای محیط را از یک فایل .env.pg_admin بارگیری می کند تا pgAdmin را پیکربندی کند.
  • پورت ها: پورت 80 روی هاست را به پورت 80 در کانتینر برای دسترسی به pgAdmin از طریق یک مرورگر وب می‌رساند.

ظروف را شروع کنید

cd docker
docker-compose up -d
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اجرای Flyway را تأیید کنید

docker ps -a
docker logs  --tail 20
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیحات تصویر


کلاس جاوا بنویسید

در این بخش، ما به کلاس Java DatabaseMigrationHandler می پردازیم که برای اجرای مهاجرت های Flyway در برابر پایگاه داده محلی PostgreSQL تنظیم شده در یک ظرف Docker طراحی شده است. این کلاس تمام منطق لازم برای ایجاد یک اتصال پایگاه داده، آزمایش اتصال و اجرای مهاجرت ها را در بر می گیرد.

اگر می خواهید می توانید از توضیحات صرف نظر کنید و با کد به git repo برسید

package com.example;

import org.flywaydb.core.Flyway;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Objects;
import software.amazon.jdbc.PropertyDefinition;
import software.amazon.jdbc.ds.AwsWrapperDataSource;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Package Declaration: کلاس بخشی از بسته com.example است.
واردات: کلاس‌های لازم از کتابخانه Flyway، بسته جاوا SQL و بسته‌بندی AWS JDBC برای مدیریت اتصالات پایگاه داده وارد می‌شوند.

  • متغیرهای کلاس و نمونه
public class DatabaseMigrationHandler {
    // instance vars
    private final String dbHost;
    private final String dbPort;
    private final String dbName;
    private final String dbSchema;
    private final String dbUser;
    private final String dbPassword;

    private static final String DB_HOST = "localhost";
    private static final String DB_PORT = "5432";
    private static final String DB_NAME = "postgres";
    private static final String DB_SCHEMA = "myschema";
    private static final String DB_USER = "postgres";
    private static final String DB_PASSWORD = "mysecretpassword";
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرهای نمونه: اینها جزئیات اتصال پایگاه داده مانند میزبان، پورت، نام، طرحواره، کاربر و رمز عبور را ذخیره می کنند.
ثابت استاتیک: مقادیر پیش فرض برای جزئیات اتصال پایگاه داده به عنوان ثابت های ثابت تعریف می شوند.

    public DatabaseMigrationHandler() {
        this.dbHost = DB_HOST;
        this.dbPort = DB_PORT;
        this.dbName = DB_NAME;
        this.dbSchema = DB_SCHEMA;
        this.dbUser = DB_USER;
        this.dbPassword = DB_PASSWORD;
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سازنده: متغیرهای نمونه را با مقادیر پیش فرض تعریف شده در بالا مقداردهی می کند.

    private boolean testConnection() {
        try (Connection connection = getDataSource().getConnection()) {
            return connection != null;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش testConnection: تلاش برای ایجاد ارتباط با پایگاه داده. در صورت موفقیت، true را برمی گرداند، در غیر این صورت استثنا را ثبت می کند و false را برمی گرداند.

    private void runMigrations() {
        try{
            Flyway flyway = Flyway.configure()
                    .dataSource(getDataSource())
                    .schemas(this.dbSchema.  )
                    .load();
            flyway.migrate();
            System.out.println("Completed Database migration!");
        } catch (Exception e) {
            System.out.println("Database migration failed!");
            e.printStackTrace();
        }
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش runMigrations: مهاجرت های Flyway را پیکربندی و اجرا می کند. از کلاس Flyway برای تنظیم منبع داده و طرحواره استفاده می کند، سپس فرآیند مهاجرت را آغاز می کند.

  • پیکربندی منبع داده
    private AwsWrapperDataSource getDataSource() {
        Properties targetDataSourceProps = new Properties();
        targetDataSourceProps.setProperty("ssl", "false");
        targetDataSourceProps.setProperty("password", this.dbPassword);

        AwsWrapperDataSource ds = new AwsWrapperDataSource();
        ds.setJdbcProtocol("jdbc:postgresql:");
        ds.setTargetDataSourceClassName("org.postgresql.ds.PGSimpleDataSource");
        ds.setServerName(this.dbHost);
        ds.setDatabase(this.dbName);
        ds.setServerPort(this.dbPort);
        ds.setUser(this.dbUser);
        ds.setTargetDataSourceProperties(targetDataSourceProps);

        return ds;
    }
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش getDataSource: منبع داده را با استفاده از AwsWrapperDataSource برای اتصال به پایگاه داده PostgreSQL پیکربندی می کند. این ویژگی های لازم مانند نام سرور، نام پایگاه داده، پورت، کاربر و رمز عبور را تنظیم می کند.

    public static void main(String[] args) {
        DatabaseMigrationHandler handler = new DatabaseMigrationHandler();
        if (handler.testConnection()) {
            System.out.println("Database connection successful!");
            handler.runMigrations();
        } else {
            System.out.println("Failed to connect to the database.");
        }
    }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

روش اصلی: نقطه ورود برنامه. این یک نمونه از DatabaseMigrationHandler را ایجاد می کند، اتصال پایگاه داده را آزمایش می کند و در صورت موفقیت آمیز بودن اتصال، مهاجرت ها را اجرا می کند.


توضیح build.gradle

در این بخش، فایل build.gradle را بررسی می کنیم که برای پیکربندی فرآیند ساخت پروژه جاوا شما استفاده می شود. ما همچنین برخی از دستورات مفید Gradle را برای ساخت و اجرای پروژه شما پوشش خواهیم داد.

plugins {
    id 'java'
    id 'groovy'
    id 'application'
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

افزونه application: ایجاد برنامه های جاوا را تسهیل می کند و وظایفی را برای اجرای برنامه فراهم می کند

dependencies {
    implementation 'org.flywaydb:flyway-core:9.22.3'
    implementation 'org.postgresql:postgresql:42.7.2'
    implementation 'software.amazon.jdbc:aws-advanced-jdbc-wrapper:2.3.0'

    testImplementation platform('org.junit:junit-bom:5.10.0')
    testImplementation 'org.junit.jupiter:junit-jupiter'
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیاده سازی: وابستگی های مورد نیاز برای کامپایل و اجرای برنامه را اعلام می کند. در اینجا، flyway-core، postgresql، و aws-advanced-jdbc-wrapper گنجانده شده است.

application {
    mainClass="com.example.DatabaseMigrationHandler"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

mainClass: کلاس اصلی برنامه را مشخص می کند که com.example.DatabaseMigrationHandler است. این نقطه ورود هنگام اجرای برنامه است.


هنگامی که فایل build.gradle خود را تنظیم کردید، می توانید از چندین دستور Gradle برای مدیریت پروژه خود استفاده کنید. این دستورات از خط فرمان اجرا می شوند.

./gradlew clean
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

clean: دایرکتوری ساخت را حذف می کند و به طور موثر پروژه را تمیز می کند. این برای اطمینان از یک محیط ساخت تازه مفید است.

./gradlew build
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

build: کد منبع را کامپایل می کند، آزمایش ها را اجرا می کند و پروژه را در یک فایل JAR بسته بندی می کند. این دستور تمام مراحل لازم برای ایجاد یک آرتیفکت ساخت را انجام می دهد.

./gradlew run
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

run: کلاس اصلی مشخص شده در قسمت برنامه را اجرا می کند. در این مورد، com.example.DatabaseMigrationHandler را اجرا می کند که مهاجرت های Flyway را مدیریت می کند.

در لاگ ها باید ببینید که اتصال به DB برقرار شد و مهاجرت های DB با موفقیت اجرا شد.

توضیحات تصویر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا