Addım-addım hədəfimizə doğru irəliləyirik. Bu gün bir çox vəzifəni həll etməliyik:
Etdiyimiz ilk şey layihədəki əsas filialımızı yeniləmək (git pull) və tapşırığımızın adı ilə yenisini yaratmaqdır - STEP_5_JRTB-1 (git checkout -b STEP_5_JRTB-1). Xatırladım: filialların adını elə dəyişdirdik ki, layihədəki tapşırıqların ardıcıllığını yalnız adla çeşidləmək mümkün olsun. Bu, bir addımdan digərinə sürətlə keçməyə imkan verəcəkdir. İndi rahat işləyə bilərsiniz. Üç asılılıq əlavə etməliyik:
İndi aydın oldu ki, verilənlər bazası heç vaxt parametrlərimizlə başlamamışdır. Səhv eynidir, ona görə də onu vərəqdən təcrid edək:
Artıq heç bir səhv yoxdur, ona görə də girişin olub olmadığını görə bilərsiniz. Amma təəssüf ki, yenə giriş yoxdur... Heç nə: biz bunu daha sonra anlayacağıq! Docker-compose-ni dayandırmaq və bütün konteynerləri silmək üçün aşağıdakıları yazmalısınız: docker-compose -f docker-compose-test.yml down Burada biz silinəcək faylı göstərdik. Nə etməli? Google-a baxaq: bəlkə kimsə bunu daha yaxşı edib. Ən sadə sorğu: “docker-compose-da mysql nümunəsi” orta mənbəyə keçid tapmaqda bizə kömək edir. Bu nümunəni verirlər:
- Flyway əlavə edin. Burada layihə üçün verilənlər bazasının yerləşdirilməsini konfiqurasiya edəcəyik.
- Verilənlər bazası sxemi əlavə edin.
- Repozitor təbəqəsi əlavə edin.
- Bot statistikası üçün əmr əlavə edin.
- Testlər yazın axı.
Flyway əlavə olunur
Flyway əlavə etmək üçün docker-compose-da başqa bir xidmət kimi əlavə edəcəyimiz verilənlər bazanız olmalıdır. Keçən dəfə mən dedim ki, docker-compose-un xidmətlər bölməsi var, o, müəyyən bir infrastrukturun - yəni proqramlar/verilənlər bazası/messencerlər dəsti və s. əlavə etmək və idarə etmək üçün dəqiq cavabdehdir.Flyway nədir və onu SpringBoot proqramına necə əlavə etmək barədə artıq danışmışam . Məsləhət görürəm ki, bu yazını oxumazdan əvvəl yaddaşınızı təzələyin. Flyway + SpringBoot haqqında məqalənin nümayişi ilə layihənin README.md faylını da oxuya bilərsiniz . |
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Birinci asılılıq layihəyə FlyWay əlavə etməkdən məsuldur, ikincisi MySQL verilənlər bazasına qoşulma qabiliyyətini əlavə edir. Üçüncüsü SpringBoot başlanğıcıdır, o, Baharda verilənlər bazasından istifadənin bütün sehrlərini işə salır. Həm də lombok əlavə edək ki, alıcılar və təyinçilər yazmasın:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
İndi inkişaf üçün məlumat bazasına ehtiyacımız var. Biz onu hələlik ( mən daha yaxşı bir fikir tapana qədər ) ayrıca docker-compose faylı və application.properties üçün ayrıca fayl kimi yaradacağıq . İnkişafda (və xüsusilə Bahar ekosistemində) profillər kimi bir şey var. Profildən asılı olaraq, əməliyyat üçün müxtəlif parametrlər işə salınır. Düşünürəm ki, gələcəkdə biz docker-compose-ni bir faylda birləşdirəcəyik və bizə lazım olan parametrlər üzrə inkişaf üçün yalnız bir verilənlər bazasının işə salınmasına əmin olacağıq. Hələlik bunu edəcəyik:
- Docker-compose-test.yml layihəsinin kökündə yalnız öz parametrləri olan verilənlər bazası işə salınacaq fayl yaradaq.
- Docker-compose-test.yml faylındakı parametrlərə uyğun gələn parametrlərlə application-test.properties faylı yaradaq.
jrtb-db:
image: mysql
restart: always
container_name: dev-jrtb-db
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "dev_jrtb_db"
MYSQL_USER: root
MYSQL_PASSWORD: root
Bundan sonra layihə kökündə docker-compose-test.yml yaradıram:
version: '3.1'
services:
jrtb-db:
image: mysql
restart: always
container_name: dev-jrtb-db
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "dev_jrtb_db"
MYSQL_USER: root
MYSQL_PASSWORD: root
Docker-compose ilə işləmək üçün bu xüsusi faylı işə salmaq üçün sorğuda -f bayrağından istifadə etməlisiniz . Bu o deməkdir ki, qəbul edilən standart docker-compose.yml deyil, işə salınan faylın adı veriləcək. Buna görə də sorğu belə görünəcək: docker-compose -f docker-compose-test.yml up -d Belə çıxır ki, əvvəlcə hansı faylı götürəcəyimizi deyirik ( -f docker-compose-test.yml ) və sonra biz deyin ki, xidmətləri artırmalı və bunu daemon rejimində etməliyik ( up -d ) - yəni proses bu əmrin işə salındığı terminal seansından kənarda işləsin. Biz işə salırıq və onun işlək olduğuna və istifadə oluna biləcəyinə əmin olmaq üçün verilənlər bazasına qoşulmağa çalışırıq. Bunu etmək üçün tanış MySQL Workbench-i açın ( burada bu barədə danışdıq ) və yeni bir əlaqə yaradın: Aşağıdakı sahələri doldurmalıyıq:
- Bağlantı adı - əlaqə adı - istəyə görə, DEV_JRTB_DB;
- Hostname - burada verilənlər bazasının yerləşdirildiyi ünvandır. Bizim vəziyyətimizdə hər şey olduğu kimi qalacaq: 127.0.0.1 və ya localhost;
- istifadəçi adı - docker-compose-də yazdığımız kimi burada kök olacaq;
- parol - həmçinin kök.
Biz əldə edirik:
dev-jrtb-db | 2021-02-28 10:14:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:28+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:28+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:29+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:29+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:29+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:30+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:30+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:30+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:30+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:32+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:32+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:32+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:34+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:34+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:37+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:37+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:37+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:44+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:44+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:44+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD dev-jrtb-db | 2021-02-28 10:14:58+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:58+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 10:14:58+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 10:14:58+00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified dev-jrtb-db | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
28-02-2021 11:03:37+00:00 [XƏTƏ] [Giriş nöqtəsi]: Verilənlər bazası işə salınmayıb və parol seçimi göstərilməyib dev-jrtb-db | MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD və MYSQL_RANDOM_ROOT_PASSWORD-dan birini təyin etməlisiniz
Yəni o, kök istifadəçi - əsas istifadəçi üçün parol təyin etməlidir. Yaxşı, indi faylımızı yeniləyəcəyik:
version: '3.1'
services:
jrtb-db:
image: mysql
restart: always
container_name: dev-jrtb-db
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "dev_jrtb_db"
MYSQL_ROOT_PASSWORD: root
Biz istifadəçi və parol üçün həmin dəyişənləri sildik və yalnız kök istifadəçi üçün parol əlavə etdik. Bu o deməkdir ki, kök istifadəçi artıq root paroluna sahib olacaq. Ən azı bunu güman edirik. İndi onu işə salaq və nə baş verdiyini görək: docker-compose -f docker-compose-test.yml up -d Və dərhal qeydlərin bizə nə dediyini görün: docker-compose -f docker-compose-test.yml logs
Baxaq:
Attaching to dev-jrtb-db dev-jrtb-db | 2021-02-28 11:20:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 11:20:41+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' dev-jrtb-db | 2021-02-28 11:20:41+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.23-1debian10 started. dev-jrtb-db | 2021-02-28 11:20:41+00:00 [Note] [Entrypoint]: Initializing database files dev-jrtb-db | 2021-02-28T11:20:41.083803Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.23) initializing of server in progress as process 43 dev-jrtb-db | 2021-02-28T11:20:41.088457Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. dev-jrtb-db | 2021-02-28T11:20:41.447990Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. dev-jrtb-db | 2021-02-28T11:20:42.672093Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option. dev-jrtb-db | 2021-02-28 11:20:45+00:00 [Note] [Entrypoint]: Database files initialized dev-jrtb-db | 2021-02-28 11:20:45+00:00 [Note] [Entrypoint]: Starting temporary server dev-jrtb-db | 2021-02-28T11:20:45.893664Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.23) starting as process 88 dev-jrtb-db | 2021-02-28T11:20:45.921695Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. dev-jrtb-db | 2021-02-28T11:20:46.088339Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. dev-jrtb-db | 2021-02-28T11:20:46.207499Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: /var/run/mysqld/mysqlx.sock dev-jrtb-db | 2021-02-28T11:20:46.369170Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. dev-jrtb-db | 2021-02-28T11:20:46.369357Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. dev-jrtb-db | 2021-02-28T11:20:46.371501Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. dev-jrtb-db | 2021-02-28T11:20:46.402227Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.23' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL. dev-jrtb-db | 2021-02-28 11:20:46+00:00 [Note] [Entrypoint]: Temporary server started. dev-jrtb-db | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. dev-jrtb-db | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it. dev-jrtb-db | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. dev-jrtb-db | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it. dev-jrtb-db | 2021-02-28 11:20:49+00:00 [Note] [Entrypoint]: Creating database dev_jrtb_db dev-jrtb-db | dev-jrtb-db | 2021-02-28 11:20:49+00:00 [Note] [Entrypoint]: Stopping temporary server dev-jrtb-db | 2021-02-28T11:20:49.187996Z 11 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.23). dev-jrtb-db | 2021-02-28T11:20:50.925075Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.23) MySQL Community Server - GPL. dev-jrtb-db | 2021-02-28 11:20:51+00:00 [Note] [Entrypoint]: Temporary server stopped dev-jrtb-db | dev-jrtb-db | 2021-02-28 11:20:51+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up. dev-jrtb-db | dev-jrtb-db | 2021-02-28T11:20:51.420058Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.23) starting as process 1 dev-jrtb-db | 2021-02-28T11:20:51.427384Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. dev-jrtb-db | 2021-02-28T11:20:51.577244Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. dev-jrtb-db | 2021-02-28T11:20:51.677659Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock dev-jrtb-db | 2021-02-28T11:20:51.787156Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. dev-jrtb-db | 2021-02-28T11:20:51.787325Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. dev-jrtb-db | 2021-02-28T11:20:51.789742Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory. dev-jrtb-db | 2021-02-28T11:20:51.812100Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.23' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
version: '3.3'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'db'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'user'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3306:3306'
expose:
# Opens port 3306 on the container
- '3306'
# Where our data will be persisted
volumes:
- my-db:/var/lib/mysql
# Names our volume
volumes:
my-db:
Biz onu ehtiyaclarımıza uyğunlaşdırırıq və əldə edirik:
version: '3.1'
services:
jrtb-db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: 'dev_jrtb_db'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'dev_jrtb_db_user'
# You can use whatever password you like
MYSQL_PASSWORD: 'dev_jrtb_db_password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'root'
ports:
# <Port exposed> : < MySQL Port running inside container>
- '3306:3306'
expose:
# Opens port 3306 on the container
- '3306'
Biz bu seçimi artıq bizə məlum olan komanda ilə işə salırıq: docker-compose -f docker-compose-test.yml up -d Biz MySQLWorkBench vasitəsilə verilənlər bazasına daxil olmağa yenidən cəhd edirik: Nəhayət, giriş meydana çıxdı. Amma indi buna nə təsir etdi, görəsən. Bu hissədə günah edirəm:
expose:
# Opens port 3306 on the container
- '3306'
Yoxlamaq asandır: bunsuz heç nə işləməməlidir :D. Gəlin yoxlayaq: bu hissəni silin, yenidən başladın docker-compose: docker-compose -f docker-compose-test.yml down docker-compose -f docker-compose-test.yml up Biz verilənlər bazasına tezgah vasitəsilə daxil olmağa çalışırıq: hər şey qaydasındadır . Sonra yeganə seçim verilənlər bazası versiyasıdır. 5.7-ni açıq şəkildə qeyd edir, yəni onu ən sonuncuya dəyişsəniz, işləməməlidir. Mən onu yenidən başladım - və həqiqətən də işləmir... Görünür, onların son versiyada docker təsviri ilə bağlı bəzi problemləri var. Oldu, problem deyil. Bu, çox vaxt pulsuz proqram təminatı ilə baş verir. 5.7 versiyasından istifadə edəcəyik. Görək bizə lazım olan verilənlər bazası varmı - dev_jrtb_db. Bunun üçün MySQL Workbench-də Query əmrini yerinə yetirin VERİLƏNİŞ BAZASINI GÖSTER : Bəli, çıxışda mövcuddur. Əla, davam edə bilərik. Sonra, ilk miqrasiyamızı əlavə edək. "Layihənin planlaşdırılması: iki dəfə ölçün, bir dəfə kəsin" məqaləsindəki tapşırıqlara əsaslanaraq ilk cədvəlimizi yaradacağıq tg_user. Bütün köçürmələr projectDir/src/main/resources/db/migration qovluğunda yerləşəcək və adı belə olacaq: V00001__add_tg_user_table.sql . Niyə o qovluqda belə bir ad var - Mən Bahar + flyway haqqında məqalədə təsvir etdim. İlk miqrasiyamız belə görünəcək: V00001__add_tg_user_table.sql:
-- ensure that the table with this name is removed before creating a new one.
DROP TABLE IF EXISTS tg_user;
-- Create tg_user table
CREATE TABLE tg_user (
chat_id VARCHAR(100),
active BOOLEAN
);
Yəni, burada biz sadəcə olaraq yalnız söhbət ID-si (cədvəldə ID kimi işləmək üçün istifadə oluna bilən unikal element) və onun vəziyyəti olan istifadəçinin cədvəlini yaradırıq - aktiv və ya qeyri-aktiv. Beləliklə, bot dayandırılsa, abunə məlumatları qalacaq və botdan yenidən istifadə etmək istədikləri təqdirdə istifadə edilə bilər. Hələlik istifadəçi haqqında başqa məlumat lazım deyil. İndi əsas sual: bunu necə yoxlamaq olar? Tətbiqimizi işə salmalıyıq. İndiyə qədər əsas docker-compose.yml faylının verilənlər bazası ilə əlaqəsi yoxdur və biz də verilənlər bazası ilə birlikdə tətbiqi debug etməyi öyrənməliyik. Buna görə də, Intellij IDEA ilə tətbiqi işə salaq. Bunu yoxlamaq üçün əsas metodumuzu JavarushTelegramBotApplication-da işlətməliyik. Yerləşdirmə və sınaq işini ayırmaq üçün xüsusiyyətləri olan başqa bir fayldan istifadə edəcəyik - application-test.properties . Bu şablonla biz Bahara bu faylın test profili üçün istifadə olunacağını bildiririk . Profili göstərmədikdə, standart profil istifadə olunur (SpringBoot-u işləyərkən bunu qeydlərinizdə yoxlayın: bu barədə ilk sətirlərdə yazılacaq). Bu belə görünəcək:
# MySQL configurations:
spring.datasource.url=jdbc:mysql://localhost:3306/dev_jrtb_db
spring.datasource.username=dev_jrtb_db_user
spring.datasource.password=dev_jrtb_db_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# TelegramBot configurations:
bot.username=tes
bot.token=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
Əsas application.properties isə bir qədər fərqli görünəcək:
# MySQL configurations:
spring.datasource.url=jdbc:mysql://jrtb-db:3306/jrtb_db
spring.datasource.username=jrtb_db_user
spring.datasource.password=jrtb_db_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# TelegramBot configurations:
bot.username=test.javarush_community_bot
bot.token=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
Əhəmiyyətli fərq spring.datasource.url sahəsindədir: test profilində localhost- da URL-imiz var . Yəni tətbiqin Docker-dən kənarda işləməsi gözlənilir, bu doğrudur, çünki sazlama zamanı biz layihəmizi Intellij IDEA-da işlədəcəyik və yerli maşından verilənlər bazasına daxil olacağımızı gözləyirik. Lakin application.properties URL-də artıq fərqli bir var - jrtb-db . Bu, docker-compose-də verilənlər bazamızın adı olacaq və bu yolla docker tətbiqimiz verilənlər bazasına daxil ola biləcək. Niyə? Buna görə də, onlar eyni docker-compose daxilində işə başlayacaq və bu şəkildə bir-birləri haqqında biləcəklər. Bu, layihə üçün bir qapalı infrastrukturumuzun olması üçün lazımdır. Bəs başlanğıcda profili necə işə salmaq olar? Bunun üçün siz Intellij IDEA-da əsas metodun işə salınmasını konfiqurasiya edə bilərsiniz. Bunun üçün konfiqurasiyaları redaktə etmək var : JavarushTelegramBotApplication-ın əsas sinfinə keçin, əsas metodun elanının yanındakı yaşıl oka basın və Run Konfiqurasiyasını dəyişdirin seçin : Lazımi dəyişənləri daxil edin və profili konfiqurasiya edin. Intellij IDEA-da bu konfiqurasiya pəncərəsinin interfeysi bir qədər dəyişdi, ona görə də mən hər kəsə IDEA-nı ən son versiyaya yeniləməyi məsləhət görürəm ki, eyni mənzərəni görək: Ətraf mühitin dəyişənləri sahəsində biz bot adını və işarə dəyişənlərini əlavə etməliyik. aşağıdakı şablon: dəyişən_adı1=dəyər1; dəyişən_adı2=dəyər2 . Yəni açar=dəyər nöqtəli vergüllə ayrılır. Bizim vəziyyətimizdə bu belə olacaq: bot.token=1375780501:AAHLzsf4WhcjSdPguDwtggRS1IMu5l8;bot.username=javarush_community_bot (sizin bot üçün fərqli ad və nişanə sahib olacaqsınız) Sonra, Əlavə et VM variantları sahəsində : W Dəyişdirmə variantları düyməsini seçin. : -Dspring.profiles.activ =test - bu, SpringBoot-a test profilindən istifadə etməyi deyəcək, yəni xassələr application-test.properties saytından götürüləcək. Nəticədə, bu belə görünəcək: İndi biz test verilənlər bazamızı işə salırıq: docker-compose -f docker-compose-test.yml up Və məhz bu şəkildə, -d prefiksi olmadan, qeydlər dərhal görünə bilər. lazım olduqda terminal. Və son addım sadəcə əsas metodu işə salmaqdır. Hər şeyi mənim təsvir etdiyim şəkildə etsəniz, nəticədə belə olacaqsınız: Qeydlərin ikinci sətri test profilinin qazandıqlarının təsviri olacaq. Biz MySQLWorkbench-dən keçirik və miqrasiyanın baş verdiyini və hər şeyin işlədiyini yoxlamaq üçün iki əmr yerinə yetiririk (baxmayaraq ki, bu, proqramın işə salınma qeydlərindən görünsə də, mütləq yoxlamağa dəyər):
- dev_jrtb_db istifadə edin;
- cədvəlləri göstərmək;
GO TO FULL VERSION