Мо кадам ба кадам ба суи максадамон пеш рафта истодаем. Имрӯз мо бояд бисёр вазифаҳоро ҳал кунем:
Аввалин коре, ки мо мекунем, ин аст, ки фorали асосии худро дар лоиҳа навсозӣ кунем (git pull) ва сохтани як нав бо номи вазифаи мо - STEP_5_JRTB-1 (git checkout -b STEP_5_JRTB-1). Хотиррасон мекунам: мо шохахоро тавре иваз кардем, ки пайдарпайии вазифахоро дар лоиха танхо аз руи ном мураттаб кардан мумкин бошад. Ин ба шумо имкон медиҳад, ки зуд аз як қадам ба қадами дигар гузаред. Акнун шумо метавонед оромона кор кунед. Мо бояд се вобастагӣ илова кунем:
Акнун маълум аст, ки базаи маълумот ҳеҷ гоҳ бо танзимоти мо оғоз нашудааст. Хатогӣ ҳамон аст, пас биёед онро аз варақ ҷудо кунем:
Чунин ба назар мерасад, ки дигар хатогӣ вуҷуд надорад, бинобар ин шумо метавонед бубинед, ки дастрасӣ вуҷуд дорад. Аммо, мутаассифона, боз дастрасӣ нест ... Ҳеҷ чиз: мо минбаъд онро мефаҳмем! Барои қатъ кардани docker-compose ва нест кардани ҳама контейнерҳо, шумо бояд нависед: docker-compose -f docker-compose-test.yml поён Дар ин ҷо мо файлро барои нест кардан муайян кардем. Чӣ бояд кард? Биёед Google онро ҷустуҷӯ кунем: шояд касе ин корро беҳтар кардааст. Дархости соддатарин: "намунаи MySQL дар docker-compose" ба мо кӯмак мекунад, ки пайванд ба манбаи миёнаро пайдо кунем. Онҳо ин мисолро медиҳанд:
- Иловаи Flyway. Дар ин ҷо мо ҷойгиркунии пойгоҳи додаҳоро барои лоиҳа танзим мекунем.
- Схемаи базаи маълумотро илова кунед.
- Илова кардани қабати репозиторий.
- Барои омори бот фармон илова кунед.
- Баъд аз ҳама, санҷишҳо нависед.
Илова кардани Flyway
Барои илова кардани Flyway, шумо бояд пойгоҳи додаҳо дошта бошед, ки мо онро ҳамчун хидмати дигар дар docker-compose илова хоҳем кард. Дафъаи гузашта ман гуфтам, ки docker-compose як бахши хидматрасонӣ дорад, ки маҳз барои илова ва идоракунии инфрасохтори муайян масъул аст - яъне маҷмӯи замимаҳо/базаҳои додаҳо/мессенҷерҳо ва ғайра.Ман аллакай дар бораи чӣ будани Flyway ва чӣ гуна онро ба замимаи SpringBoot илова кардан гуфтам . Ман ба шумо маслиҳат медиҳам, ки пеш аз хондани ин мақола хотираи худро тароват кунед. Шумо инчунин метавонед файли README.md- и лоиҳаро бо намоиши мақола дар бораи Flyway + SpringBoot хонед. |
<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>
Вобастагии аввал барои илова кардани FlyWay ба лоиҳа масъул аст, дуюм имкони пайвастшавӣ ба пойгоҳи додаҳои MySQL-ро илова мекунад. Сеюм - Starter SpringBoot, ки тамоми ҷодугарии истифодаи пойгоҳи додаҳоро дар фасли баҳор оғоз мекунад. Ва биёед ломбокро низ илова кунем, то гетерҳо ва сетерҳоро нанависанд:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
Ҳоло барои рушд ба мо базаи маълумот лозим аст. Мо онро ҳоло ( то он даме, ки ман идеяи беҳтаре пайдо накунам ) ҳамчун файли алоҳидаи docker-compose ва файли алоҳида барои application.properties эҷод мекунем. Чунин чизе дар рушд вуҷуд дорад (ва махсусан дар экосистемаи баҳорӣ) ба монанди профилҳо. Вобаста аз профил, танзимоти гуногун барои кор оғоз карда мешаванд. Ман фикр мекунам, ки дар оянда мо docker-compose -ро дар як файл муттаҳид мекунем ва боварӣ ҳосил мекунем, ки танҳо як пойгоҳи додаҳо барои таҳияи танзимоти ба мо лозимӣ оғоз карда мешавад. Ҳоло мо ин корро мекунем:
- Биёед дар решаи лоиҳаи docker-compose-test.yml файл эҷод кунем, ки дар он танҳо пойгоҳи додаҳо бо танзимоти худ оғоз карда мешаванд.
- Биёед файли application-test.properties-ро бо танзимоте созем, ки ба танзимоти файли docker-compose-test.yml мувофиқат мекунанд.
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-test.yml эҷод мекунам:
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, шумо бояд парчами -f -ро дар дархост истифода баред . Ин маънои онро дорад, ки номи файли оғозшуда дода мешавад, на файли стандартии docker-compose.yml гирифта мешавад. Аз ин рӯ, дархост чунин хоҳад буд: docker-compose -f docker-compose-test.yml up -d Маълум мешавад, ки аввал мо мегӯем, ки кадом файлро гирем ( -f docker-compose-test.yml ) ва баъд мо бигӯед, ки мо бояд хидматҳоро баланд бардорем ва ин корро дар реҷаи демон ( up -d ) анҷом диҳем, яъне ин раванд берун аз сессияи терминале, ки дар он ин фармон оғоз шудааст, иҷро шавад. Мо оғоз мекунем ва кӯшиш мекунем, ки ба пойгоҳи додаҳо пайваст шавем, то боварӣ ҳосил кунем, ки он фаъол аст ва метавонад истифода шавад. Барои ин кор, MySQL Workbench-и шиносро кушоед ( дар ин ҷо мо дар бораи он сӯҳбат кардем ) ва пайвасти нав эҷод кунед: Мо бояд майдонҳои зеринро пур кунем:
- Номи пайвастшавӣ - номи пайвастшавӣ - ихтиёран, DEV_JRTB_DB;
- Номи мизбон - ин ҷо суроғаест, ки пойгоҳи додаҳо ҷойгир карда шудааст. Дар ҳолати мо, ҳама чиз ҳамон тавре боқӣ мемонад: 127.0.0.1 , ё localhost;
- номи корбар - ин ҷо реша хоҳад буд, тавре ки мо дар docker-compose навиштаем;
- парол - инчунин реша.
Мо ба даст меорем:
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
2021-02-28 11:03:37+00:00 [ХАТО] [Нуқтаи воридшавӣ]: Пойгоҳи додаҳо оғоз нашудааст ва интихоби парол муайян карда нашудааст dev-jrtb-db | Шумо бояд яке аз MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD ва MYSQL_RANDOM_ROOT_PASSWORD-ро муайян кунед
Яъне, ӯ бояд паролро барои корбари реша - корбари асосӣ муайян кунад. Хуб, ҳоло мо файли худро навсозӣ мекунем:
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
Мо он тағирёбандаҳоро барои корбар ва парол хориҷ кардем ва танҳо паролро барои корбари реша илова кардем. Ин маънои онро дорад, ки корбари реша акнун пароли реша дорад. Ақаллан он чизест, ки мо тахмин мезанем. Акнун биёед онро иҷро кунем ва бубинем, ки чӣ мешавад: docker-compose -f docker-compose-test.yml up -d Ва фавран бубинед, ки гузоришҳо ба мо чӣ мегӯянд: docker-compose -f docker-compose-test.yml logs
Биёед бубинем:
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:
Мо онро ба ниёзҳои худ мутобиқ мекунем ва ба даст меорем:
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'
Мо ин вариантро бо фармони ба мо маълум оғоз мекунем: docker-compose -f docker-compose-test.yml up -d Мо бори дигар кӯшиш мекунем, ки ба пойгоҳи додаҳо тавассути MySQLWorkBench дастрасӣ пайдо кунем: Ниҳоят, дастрасӣ пайдо шуд. Аммо ҳоло ман ҳайронам, ки ба ин чӣ таъсир расонд. Ман дар ин бахш гуноҳ мекунам:
expose:
# Opens port 3306 on the container
- '3306'
Санҷиш осон аст: бе ин ҳеҷ чиз кор намекунад: D. Биёед тафтиш кунем: ин қисмро нест кунед, docker-compose-ро бозоғоз намоед: docker-compose -f docker-compose-test.yml поён docker-compose -f docker-compose-test.yml up Мо кӯшиш мекунем, ки ба пойгоҳи додаҳо тавассути workbench ворид шавем: ҳама чиз аст. хуб. Пас ягона вариант versionи пойгоҳи додаҳост. Дар он ба таври возеҳ 5.7 гуфта шудааст, яъне агар шумо онро ба охирин иваз кунед, он набояд кор кунад. Ман онро аз нав оғоз кардам - ва он дар ҳақиқат кор намекунад ... Эҳтимол, онҳо бо тасвири докер дар versionи охирин мушкилот доранд. Хуб, ҳеҷ мушкиле нест. Ин аксар вақт бо нармафзори ройгон рӯй медиҳад. Мо versionи 5.7-ро истифода хоҳем бурд. Биёед бубинем, ки оё пойгоҳи додаҳо ба мо лозим аст - dev_jrtb_db. Барои ин, фармони Query-ро дар MySQL Workbench SHOW DATABASES иҷро кунед : Бале, он дар баромад мавҷуд аст. Аҷаб, мо метавонем идома диҳем. Баъдан, биёед муҳоҷирати аввалини худро илова кунем. Дар асоси вазифаҳои мақолаи "Банақшагирии лоиҳа: ду маротиба чен кунед, як бор буред" мо ҷадвали аввалини худро tg_user эҷод мекунем. Ҳама муҳоҷиратҳо дар папкаи projectDir/src/main/resources/db/migration ҷойгир карда мешаванд ва номаш чунин хоҳад буд: V00001__add_tg_user_table.sql . Чаро дар он папка чунин ном мавҷуд аст - ман онро дар мақола дар бораи Баҳор + flyway тавсиф кардам. Муҳоҷирати аввалини мо чунин хоҳад буд: 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
);
Яъне, дар ин ҷо мо танҳо як ҷадвали корбареро эҷод мекунем, ки танҳо ID-и чат (унсури беназире, ки метавонад ҳамчун ID дар ҷадвал кор кунад) ва ҳолати он - фаъол ё ғайрифаъол дорад. Ҳамин тавр, агар бот қатъ карда шавад, маълумоти обуна боқӣ мемонад ва агар онҳо мехоҳанд ботро дубора истифода баранд, онҳоро истифода бурдан мумкин аст. Айни замон маълумоти дигар дар бораи корбар лозим нест. Акнун саволи асосӣ: ин чӣ гуна бояд тафтиш карда шавад? Мо бояд барномаи худро оғоз кунем. То ба ҳол, файли асосии docker-compose.yml бо пойгоҳи додаҳо иртибот надорад ва мо инчунин бояд тарзи ислоҳи барномаро дар якҷоягӣ бо пойгоҳи додаҳо омӯзем. Аз ин рӯ, биёед барномаро бо Intellij IDEA оғоз кунем. Барои санҷидани ин мо бояд усули асосии худро дар JavarushTelegramBotApplication иҷро кунем. Барои ҷудо кардани кори ҷойгиркунӣ ва санҷиш, мо файли дигареро бо хосиятҳо истифода мебарем - application-test.properties . Бо ин қолаб мо ба Spring хабар медиҳем, ки ин файл барои профor санҷишӣ истифода мешавад . Вақте ки мо профилро муайян намекунем, профor пешфарз истифода мешавад (инро дар гузоришҳои худ ҳангоми иҷро кардани SpringBoot санҷед: дар ин бора дар сатрҳои аввал навишта мешавад). Ин чунин хоҳад буд:
# 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
Ва application.properties асосии каме фарқ мекунад:
# 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
Тафовути назаррас дар майдони spring.datasource.url аст: дар профor санҷишӣ мо URL дар localhost дорем . Яъне, интизор меравад, ки барнома берун аз Docker кор кунад, ин дуруст аст, зеро ҳангоми ислоҳкунӣ мо лоиҳаи худро дар Intellij IDEA иҷро мекунем ва интизорем, ки мо ба пойгоҳи додаҳо аз мошини маҳаллӣ дастрасӣ пайдо мекунем. Аммо URL-и application.properties аллакай як дигарро дар бар мегирад - jrtb-db . Ин номи пойгоҳи додаи мо дар docker-compose хоҳад буд ва бо ин роҳ барномаи докери мо метавонад ба пойгоҳи додаҳо дастрас шавад. Чаро? Аз ин рӯ, онҳо дар дохor як docker-compose оғоз хоҳанд кард ва бо ин роҳ дар бораи якдигар огоҳ хоҳанд шуд. Ин барои он зарур аст, ки мо як инфрасохтори пӯшида барои лоиҳа дошта бошем. Аммо чӣ гуна профилро ҳангоми оғозёбӣ оғоз кардан мумкин аст? Барои ин, шумо метавонед оғози усули асосиро дар Intellij IDEA танзим кунед. Барои ин, Таҳрири конфигуратсияҳо мавҷуд аст : ба синфи асосии JavarushTelegramBotApplication равед, тирчаи сабзро дар паҳлӯи эъломияи усули асосӣ клик кунед ва Тағир додани конфигуратсияро интихоб кунед : Тағйирёбандаҳои заруриро ворид кунед ва профилро танзим кунед. Дар Intellij IDEA, интерфейси ин равзанаи конфигуратсия каме тағйир ёфтааст, аз ин рӯ ман ба ҳама маслиҳат медиҳам, ки IDEA-ро ба versionи охирин навсозӣ кунанд, то мо як расмро бубинем: Дар майдони тағирёбандаҳои муҳити зист , мо бояд номи бот ва тағирёбандаҳои аломатро бо истифода аз илова кунем. Шаблони зерин: тағирёбандаи_номи1=арзиш1;вазнин_номи2=арзиш2 . Яъне калид=арзиш бо нуқта-вергул ҷудо карда мешавад. Дар ҳолати мо ин чунин хоҳад буд: bot.token=1375780501:AAHLzsf4WhcjSdPguDwtggRS1IMu5l8;bot.username=javarush_community_bot (шумо барои бот ном ва аломати дигар хоҳед дошт) Баъдан, тугмаи Иловаи имконоти VM дар майдони имконоти W Modify -ро интихоб кунед . : -Dspring.profiles.active =test - ин ба SpringBoot мегӯяд, ки профor санҷиширо истифода барад, яъне хосиятҳо аз application-test.properties гирифта мешаванд. Дар натиҷа, он чунин хоҳад буд: Ҳоло мо базаи санҷишии худро оғоз мекунем: docker-compose -f docker-compose-test.yml up Ва маҳз ҳамин тавр, бидуни префикси -d, то гузоришҳо фавран дар терминал, агар лозим бошад. Ва қадами охирин танҳо иҷро кардани усули асосӣ аст. Агар шумо ҳама корро ҳамон тавре ки ман тавсиф кардам, анҷом диҳед, шумо бо чунин натиҷа хоҳед ёфт: Сатри дуюми гузоришҳо тавсифи он чизест, ки профor санҷишӣ ба даст овардааст. Мо аз MySQLWorkbench мегузарем ва ду фармонро иҷро мекунем, то бисанҷед, ки муҳоҷир ба кор рафтааст ва ҳама чиз кор мекунад (гарчанде ки ин аз гузоришҳои оғози барнома намоён аст, албатта тафтиш кардан лозим аст):
- dev_jrtb_db-ро истифода баред;
- нишон додани ҷадвалҳо;
GO TO FULL VERSION