JavaRush /Блоги Java /Random-TG /Мо ҳама чизҳои марбут ба базаи маълумотро илова мекунем. ...
Roman Beekeeper
Сатҳи

Мо ҳама чизҳои марбут ба базаи маълумотро илова мекунем. (Қисми 1) - "Лоиҳаи Java аз А то Я"

Дар гурӯҳ нашр шудааст
Мо кадам ба кадам ба суи максадамон пеш рафта истодаем. "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 1Имрӯз мо бояд бисёр вазифаҳоро ҳал кунем:
  1. Иловаи Flyway. Дар ин ҷо мо ҷойгиркунии пойгоҳи додаҳоро барои лоиҳа танзим мекунем.
  2. Схемаи базаи маълумотро илова кунед.
  3. Илова кардани қабати репозиторий.
  4. Барои омори бот фармон илова кунед.
  5. Баъд аз ҳама, санҷишҳо нависед.
Пас нишинед, пас нишинед, хондани тӯлонӣ хоҳад буд. Мо аллакай фаҳмидем, ки чӣ гуна барномаамонро бо истифода аз docker ва docker-compose ҷойгир кунем. Ин кори осон набуд ва ба онҳое, ки аз ӯҳдаи ин кор баромадаанд, табрик мегӯям. Агар шумо дар бораи татбиқ ягон савол дошта бошед, шумо метавонед ба codeи ин дархост нигаред .

Илова кардани Flyway

Барои илова кардани Flyway, шумо бояд пойгоҳи додаҳо дошта бошед, ки мо онро ҳамчун хидмати дигар дар docker-compose илова хоҳем кард. Дафъаи гузашта ман гуфтам, ки docker-compose як бахши хидматрасонӣ дорад, ки маҳз барои илова ва идоракунии инфрасохтори муайян масъул аст - яъне маҷмӯи замимаҳо/базаҳои додаҳо/мессенҷерҳо ва ғайра.
Ман аллакай дар бораи чӣ будани Flyway ва чӣ гуна онро ба замимаи SpringBoot илова кардан гуфтам . Ман ба шумо маслиҳат медиҳам, ки пеш аз хондани ин мақола хотираи худро тароват кунед. Шумо инчунин метавонед файли README.md- и лоиҳаро бо намоиши мақола дар бораи Flyway + SpringBoot хонед.
Аввалин коре, ки мо мекунем, ин аст, ки фorали асосии худро дар лоиҳа навсозӣ кунем (git pull) ва сохтани як нав бо номи вазифаи мо - STEP_5_JRTB-1 (git checkout -b STEP_5_JRTB-1). Хотиррасон мекунам: мо шохахоро тавре иваз кардем, ки пайдарпайии вазифахоро дар лоиха танхо аз руи ном мураттаб кардан мумкин бошад. Ин ба шумо имкон медиҳад, ки зуд аз як қадам ба қадами дигар гузаред. Акнун шумо метавонед оромона кор кунед. Мо бояд се вобастагӣ илова кунем:
<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 -ро дар як файл муттаҳид мекунем ва боварӣ ҳосил мекунем, ки танҳо як пойгоҳи додаҳо барои таҳияи танзимоти ба мо лозимӣ оғоз карда мешавад. Ҳоло мо ин корро мекунем:
  1. Биёед дар решаи лоиҳаи docker-compose-test.yml файл эҷод кунем, ки дар он танҳо пойгоҳи додаҳо бо танзимоти худ оғоз карда мешаванд.
  2. Биёед файли application-test.properties-ро бо танзимоте созем, ки ба танзимоти файли docker-compose-test.yml мувофиқат мекунанд.
Барои кор бо MySQL, ман тасвири расмиро аз DockerHub гирифтам : "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 2Пас аз гузаштан ба зудӣ, ман тағирёбандаҳои заруриро ёфтам: MYSQL_DATABASE - номи пойгоҳи додаҳо MYSQL_USER - номи корбари пойгоҳи додаҳо MYSQL_PASSWORD - пароли корбари пойгоҳи додаҳо ва чӣ гуна онҳо бояд дуруст навишта шаванд:
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-и шиносро кушоед ( дар ин ҷо мо дар бораи он сӯҳбат кардем ) ва пайвасти нав эҷод кунед: "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 3Мо бояд майдонҳои зеринро пур кунем:
  • Номи пайвастшавӣ - номи пайвастшавӣ - ихтиёран, DEV_JRTB_DB;
  • Номи мизбон - ин ҷо суроғаест, ки пойгоҳи додаҳо ҷойгир карда шудааст. Дар ҳолати мо, ҳама чиз ҳамон тавре боқӣ мемонад: 127.0.0.1 , ё localhost;
  • номи корбар - ин ҷо реша хоҳад буд, тавре ки мо дар docker-compose навиштаем;
  • парол - инчунин реша.
Пас аз ин, шумо бояд тафтиш кунед, ки оё пайвастшавӣ вуҷуд дорад. Барои ин, клик кунед Пайвастшавиро санҷед : "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 4Дар натиҷа, мо мегирем: Пайваст шудан ба MySQL ноком шуд... Чаро? Мо ба терминал меравем ва мебинем, ки бо контейнери докер чӣ шуд. Биёед дар терминал бинависем: "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 5Мо мебинем, ки терминал 59 дақиқа пеш сохта шуда буд ва бозоғозӣ 55 сония буд... чаро? Ин равшан нест, шумо бояд ба гузоришҳо назар кунед. Дар терминал ба решаи лоиҳа равед ва фармони зеринро иҷро кунед: docker-compose -f docker-compose-test.yml logs
Мо ба даст меорем:

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.

Чунин ба назар мерасад, ки дигар хатогӣ вуҷуд надорад, бинобар ин шумо метавонед бубинед, ки дастрасӣ вуҷуд дорад. Аммо, мутаассифона, боз дастрасӣ нест ... Ҳеҷ чиз: мо минбаъд онро мефаҳмем! "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 6Барои қатъ кардани docker-compose ва нест кардани ҳама контейнерҳо, шумо бояд нависед: docker-compose -f docker-compose-test.yml поён Дар ин ҷо мо файлро барои нест кардан муайян кардем. Чӣ бояд кард? Биёед Google онро ҷустуҷӯ кунем: шояд касе ин корро беҳтар кардааст. Дархости соддатарин: "намунаи MySQL дар docker-compose" ба мо кӯмак мекунад, ки пайванд ба манбаи миёнаро пайдо кунем. Онҳо ин мисолро медиҳанд:
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 дастрасӣ пайдо кунем: "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Қисми 1 - 7Ниҳоят, дастрасӣ пайдо шуд. Аммо ҳоло ман ҳайронам, ки ба ин чӣ таъсир расонд. Ман дар ин бахш гуноҳ мекунам:
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 гуфта шудааст, яъне агар шумо онро ба охирин иваз кунед, он набояд кор кунад. Ман онро аз нав оғоз кардам - ​​ва он дар ҳақиқат кор намекунад ... "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 8Эҳтимол, онҳо бо тасвири докер дар versionи охирин мушкилот доранд. Хуб, ҳеҷ мушкиле нест. Ин аксар вақт бо нармафзори ройгон рӯй медиҳад. Мо versionи 5.7-ро истифода хоҳем бурд. Биёед бубинем, ки оё пойгоҳи додаҳо ба мо лозим аст - dev_jrtb_db. Барои ин, фармони Query-ро дар MySQL Workbench SHOW DATABASES иҷро кунед : "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 9Бале, он дар баромад мавҷуд аст. Аҷаб, мо метавонем идома диҳем. Баъдан, биёед муҳоҷирати аввалини худро илова кунем. Дар асоси вазифаҳои мақолаи "Банақшагирии лоиҳа: ду маротиба чен кунед, як бор буред" мо ҷадвали аввалини худро 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 равед, тирчаи сабзро дар паҳлӯи эъломияи усули асосӣ клик кунед ва Тағир додани конфигуратсияро интихоб кунед : "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 10Тағйирёбандаҳои заруриро ворид кунед ва профилро танзим кунед. Дар Intellij IDEA, интерфейси ин равзанаи конфигуратсия каме тағйир ёфтааст, аз ин рӯ ман ба ҳама маслиҳат медиҳам, ки IDEA-ро ба versionи охирин навсозӣ кунанд, то мо як расмро бубинем: "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 11Дар майдони тағирёбандаҳои муҳити зист , мо бояд номи бот ва тағирёбандаҳои аломатро бо истифода аз илова кунем. Шаблони зерин: тағирёбандаи_номи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 мегузарем ва ду фармонро иҷро мекунем, то бисанҷед, ки муҳоҷир ба кор рафтааст ва ҳама чиз кор мекунад (гарчанде ки ин аз гузоришҳои оғози барнома намоён аст, албатта тафтиш кардан лозим аст):"Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 12"Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 13"Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 14
  1. dev_jrtb_db-ро истифода баред;
  2. нишон додани ҷадвалҳо;
Натиҷа: "Лоиҳаи Java аз A то Я": Илова кардани ҳама чизҳои марбут ба пойгоҳи додаҳо.  Кисми 1 — 15Тавре ки мо интизор будем, мо ду миз гирифтем. Якум техникӣ барои баҳисобгирии муҳоҷират, дуюм ҷадвали мо барои корбарони Telegram. Ҳама: Flyway дар якҷоягӣ бо пойгоҳи додаҳо илова карда шуд. Акнун муҳоҷирони нав мисли кори соат хоҳанд рафт. Чизи аз ҳама мушкил ин аввалин насб ва оғози раванд аст. Дар идома , мо кор дар ин вазифаи глобалиро анҷом медиҳем: илова кардани пойгоҳи додаҳо ба docker-compose.yml, илова кардани қабати репозиторий, омор барои бот, навиштан ва навсозии санҷишҳо ва ҳуҷҷатҳо.

Рӯйхати ҳамаи маводҳои силсила дар аввали ин мақола аст.

Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION