JavaRush /Java Blog /Random-TK /Maglumat bazasyna degişli ähli zady goşýarys. (1-nji bölü...

Maglumat bazasyna degişli ähli zady goşýarys. (1-nji bölüm) - "A-dan Z-a çenli Java taslamasy"

Toparda çap edildi
Stepdim-ädim maksadymyza tarap barýarys. "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümBu gün köp meseläni çözmeli:
  1. Uçuş ýoluny goşuň. Bu ýerde taslama üçin maglumat bazasynyň ýerleşdirilmegini düzeris.
  2. Maglumat bazasynyň shemasyny goşuň.
  3. Ammar gatlagyny goşuň.
  4. Bot statistikasy üçin buýruk goşuň.
  5. Galyberse-de, synaglary ýazyň.
Şonuň üçin oturyň, oturyň, uzyn okalýar. Doker we doker-kompozisiýa ulanyp, programmamyzy nädip ýerleşdirmelidigini eýýäm öwrendik . Bu aňsat däldi we muny başaranlary gutlaýaryn. Durmuşa geçirmek barada soraglaryňyz bar bolsa, bu çekiş haýyşynda koda seredip bilersiňiz .

Uçuş goşmak

“Flyway” -y goşmak üçin maglumatlar bazasy bolmaly, biz doker-kompozisiýada başga bir hyzmat hökmünde goşarys. Geçen gezek doker-kompozisiýanyň belli bir infrastrukturany goşmak we dolandyrmak üçin takyk jogapkär hyzmatlar bölüminiň bardygyny, ýagny amaly programmalar / maglumat bazalary / habarçylar we ş.m.
“Flyway” -yň nämedigini we “SpringBoot” programmasyna nädip goşmalydygyny öňem aýdypdym . Bu makalany okamazdan ozal ýadyňyzy täzelemegi maslahat berýärin. Şeýle hem , “Flyway + SpringBoot” baradaky makalanyň görkezilmegi bilen taslamanyň README.md faýlyny okap bilersiňiz .
Ilkinji eden işimiz, taslamadaky esasy bölümimizi täzelemek (git çekmek) we wezipämiziň ady bolan STEP_5_JRTB-1 (git Checkout -b STEP_5_JRTB-1). Youatladýaryn, taslamadaky meseleleriň yzygiderliligini diňe at bilen tertipleşdirmek üçin şahalaryň adyny üýtgetdik. Bu size bir ädimden beýlekisine çalt geçmäge mümkinçilik berer. Indi rahatlykda işläp bilersiňiz. Üç garaşlylygy goşmaly:
<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>
Birinji garaşlylyk, “FlyWay” -y taslama goşmak üçin jogapkär, ikinjisi MySQL maglumat bazasyna birikmek ukybyny goşýar. Üçünjisi, Baharda maglumat bazasyny ulanmagyň ähli jadysyny açýan “SpringBoot” başlangyjydyr. Getirýänleri we sazlaýjylary ýazmazlyk üçin lombok hem goşalyň:
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>
Indi ösüş üçin maglumat bazasy gerek. Häzirlikçe ( has gowy pikirlenýänçäm ) aýratyn doker-kompozisiýa faýly we application.properties üçin aýratyn faýl hökmünde dörederis . Ösüşde (we esasanam Bahar ekosistemasynda) profiller ýaly bir zat bar. Profile baglylykda işlemek üçin dürli sazlamalar işe girizilýär. Geljekde doker-kompozisiýany bir faýla birleşdireris we zerur sazlamalarda ösüş üçin diňe bir maglumat bazasynyň açylandygyna göz ýetireris. Häzirlikçe muny ederis:
  1. Geliň, diňe öz sazlamalary bilen maglumat bazasy açyljak doker-compose-test.yml taslamasynyň kökünde bir faýl döredeliň.
  2. Docker-compose-test.yml faýlyndaky sazlamalara gabat gelýän sazlamalar bilen programma- test.properties faýly döredeliň.
MySQL bilen işlemek üçin resmi suraty DockerHub- dan aldym : "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümÇalt aýlananymdan soň zerur üýtgeýänleri tapdym: MYSQL_DATABASE - maglumatlar bazasynyň ady MYSQL_USER - maglumat bazasynyň ulanyjy ady MYSQL_PASSWORD - maglumat bazasynyň ulanyjy paroly we nädip dogry ýazylmaly:
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
Ondan soň, taslama kökünde docker-compose-test.yml döredýärin:
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
Doker-kompozisiýa bilen işlemek üçin bu aýratyn faýly işletmek üçin haýyşda -f baýdagyny ulanmaly . Işledilen faýlyň adynyň adaty docker-compose.yml alynman, beriljekdigini aňladýar. Şonuň üçin haýyş şeýle bolar: docker-compose -f docker-compose-test.yml up -d Ilki haýsy faýly almalydygyny aýdýarys ( -f docker-compose-test.yml ), soň bolsa biz hyzmatlary ýokarlandyrmalydygymyzy we muny daemon re modeiminde ( up -d ) etmelidigimizi, ýagny bu buýrugyň başlanan terminal sessiýasynyň daşynda işlemelidigini aýdyň. Maglumat bazasyna işlemäge we ulanyljakdygyna göz ýetirmäge synanyşýarys. Munuň üçin tanyş MySQL Workbench-i açyň ( bu ýerde gürleşdik ) we täze baglanyşyk dörediň: "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümAşakdaky meýdanlary doldurmaly:
  • Birikmegiň ady - birikmäniň ady - islege görä, DEV_JRTB_DB;
  • Hostname - maglumatlar bazasynyň ýerleşdirilen salgysy. Biziň ýagdaýymyzda hemme zat bolşy ýaly galar: 127.0.0.1 ýa-da localhost;
  • ulanyjy ady - bu ýerde doker-kompozisiýada ýazyşymyz ýaly kök bolar;
  • parol - kök.
Ondan soň, birikmäniň işlejekdigini ýa-da ýokdugyny barlamaly. Munuň üçin Synag birikmesine basyň : "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümNetijede, alarys: MySQL-e birigip bilmedik ... Näme üçin? Terminala baryp, dok konteýnerine näme bolandygyny görýäris. Terminalda ýazalyň: "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümTerminalyň 59 minut öň döredilendigini we täzeden başlamagyň 55 sekuntdygyny görýäris ... näme üçin? Düşnükli däl, surnallara seretmeli. Terminaldaky taslama köküne geçiň we aşakdaky buýrugy işlediň: docker-compose -f docker-compose-test.yml surnallary
Biz alýarys:

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

Maglumat bazasynyň hiç haçan sazlamalarymyzdan başlamandygy äşgärdir. Erroralňyşlyk birmeňzeş, geliň ony sahypadan aýyralyň:
2021-02-28 11: 03: 37 + 00: 00 [RAL .YŞLYK] [Giriş nokady]: Maglumat bazasy başlangyç däl we parol görnüşi dev-jrtb-db görkezilmedi | MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD we MYSQL_RANDOM_ROOT_PASSWORD birini görkezmeli
.Agny, kök ulanyjynyň - esasy ulanyjynyň parolyny kesgitlemeli. Bolýar, indi faýlymyzy täzeläris:
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
Ulanyjy we parol üçin şol üýtgeýjileri aýyrdyk we diňe kök ulanyjy üçin paroly goşduk. Bu kök ulanyjynyň indi kök paroly boljakdygyny aňladýar. Iň bärkisi, biziň pikirimizçe. Indi işledeliň we nämeleriň bolýandygyny göreliň: docker-compose -f docker-compose-test.yml up -d we surnallaryň bize aýdýanlaryny derrew görüň: docker-compose -f docker-compose-test.yml surnallary
Geliň seredeliň:

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.

Indi ýalňyşlyk ýok ýaly, girişiň bardygyny ýa-da ýokdugyny görüp bilersiňiz. Emma, ​​gynansak-da, gaýtadan girip bolmaýar ... Hiç zat: mundan beýläk öwreneris! "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümDoker-kompozisiýany ýatyrmak we ähli konteýnerleri ýok etmek üçin ýazmaly: docker-compose -f docker-compose-test.yml aşakda Bu ýerde faýly pozmagy kesgitledik. Näme etmeli? Google-a geleliň: belki kimdir biri has gowy eden bolsa gerek. Iň ýönekeý talap: “doker-kompozisiýada mysql-iň mysaly” orta çeşmä baglanyşyk tapmaga kömek edýär. Bu mysaly getirýärler:
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 ony zerurlyklarymyza uýgunlaşdyrýarys we alýarys:
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'
Bu opsiýany eýýäm bize mälim bolan buýruk bilen başlaýarys: docker-compose -f docker-compose-test.yml up -d MySQLWorkBench arkaly maglumat bazasyna girmäge ýene bir gezek synanyşýarys: "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-7-nji bölümAhyrynda giriş peýda boldy. Nowöne indi munuň nämä täsir edendigi bilen gyzyklanýaryn. Bu tarapdan günä edýärin:
expose:
   # Opens port 3306 on the container
   - '3306'
Barlamak aňsat: onsuz hiç zat işlemeli däl: D. Barlap göreliň: bu bölümi pozuň, docker-compose täzeden başlaň: docker-compose -f docker-compose-test.yml down docker-compose -f docker-compose-test.yml up Maglumat bazasyna iş paneli arkaly girmäge synanyşýarys: hemme zat gowy . Soňra ýeke-täk wariant maglumatlar bazasynyň wersiýasydyr. 5.7-de aýdyň görkezilýär, ýagny iň soňkusyna üýtgetseňiz, işlemeli däl. Ony täzeden açdym - we hakykatdanam işlemeýär ... "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümGörnüşinden, iň soňky wersiýasyndaky doker şekili bilen baglanyşykly käbir kynçylyklar bar. Bolýar, mesele ýok. Bu köplenç mugt programma üpjünçiligi bilen bolýar. 5.7 wersiýasyny ulanarys. Bize zerur maglumatlar bazasynyň bardygyny ýa-da ýokdugyny göreliň - dev_jrtb_db. Munuň üçin MySQL Workbench SHOW DATABASES- de Talap buýrugyny işlediň : "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölümHawa, çykyşda bar. Gowy, dowam edip bileris. Indiki, ilkinji göçümimizi goşalyň. “Taslamany meýilleşdirmek: iki gezek ölçäň, bir gezek kesiň” atly makaladaky meselelere esaslanyp, ilkinji tablisamyzy dörederis tg_user. Allhli göçürmeler taslamaDir / src / main / resources / db / migrasiýa bukjasynda ýerleşer we ady: V00001__add_tg_user_table.sql . Näme üçin şol bukjada beýle at bar - Men ony Bahar + uçuş ýoly baradaky makalada beýan etdim. Ilkinji göçümimiz şeýle bolar: 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
);
Hereagny, bu ýerde diňe söhbetdeşlik ID-si (tablisada şahsyýet hökmünde işlemek üçin ulanyp boljak özboluşly element) we ýagdaýy - işjeň ýa-da hereketsiz ulanyjynyň tablisasyny döredýäris. Şeýlelik bilen, bot togtadylsa, abunalyk maglumatlary galar we boty gaýtadan ulanmak isleseler ulanylyp bilner. Ulanyjy hakda häzirlikçe başga maglumat gerek däl. Indi esasy sorag: muny nädip barlamaly? Arzamyzy başlamaly. Şu wagta çenli esasy docker-compose.yml faýlynyň maglumat bazasy bilen hiç hili baglanyşygy ýok, şonuň üçin programmany maglumatlar bazasy bilen bilelikde nädip düzetmelidigini öwrenmeli. Şonuň üçin geliň, programmany Intellij IDEA bilen başlalyň. Muny synamak üçin esasy usulymyzy “JavarushTelegramBotApplication” -da işletmeli bolarys. Gurnama we synag işini aýyrmak üçin, häsiýetleri bolan başga bir faýly ulanarys - application-test.properties . Bu galyp bilen, bu faýlyň synag tertibi üçin ulanyljakdygyny Bahara habar berýäris . Haçan-da bir profil görkezmesek, deslapky profil ulanylýar (“SpringBoot” işledilende muny öz ýazgylaryňyzda barlaň: bu hakda ilkinji setirlerde ýazylar). Görnüşi ýaly:
# 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
Esasy programma.properties birneme üýtgeşik görüner:
# 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
Möhüm tapawut bahar.datasource.url meýdançasynda: synag profilinde ýerlihostda URL bar . Applicationagny, programmanyň Dockeriň daşynda işlemegine garaşylýar, bu hakykat, sebäbi düzediş girizilende taslamamyzy Intellij IDEA-da işlederis we maglumatlar bazasyna ýerli enjamdan girip bileris diýip garaşýarys. Emma application.properties URL-de eýýäm başga bir zat bar - jrtb-db . Bu doker-kompozisiýadaky maglumatlar bazamyzyň ady bolar we şeýlelik bilen doker programmamyz maglumatlar bazasyna ýetip biler. Näme üçin? Şol sebäpden, şol bir doker-kompozisiýanyň içinde işe başlarlar we birek-biregi şeýle tanarlar. Taslama üçin bir ýapyk infrastrukturamyz bolmagy üçin bu zerur. Theöne başlangyçda profili nädip açmaly? Munuň üçin Intellij IDEA-da esasy usulyň işe girizilmegini düzüp bilersiňiz. Munuň üçin “Edit Configurations” bar : “JavarushTelegramBotApplication” -yň esasy synpyna giriň, esasy usulyň beýanynyň ýanyndaky ýaşyl oky basyň we “Run Configuration Modify” -ni saýlaň : "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-10-njy bölümZerur üýtgeýänleri giriziň we profili düzüň. Intellij IDEA-da bu konfigurasiýa penjiresiniň interfeýsi birneme üýtgedi, şonuň üçin hemmelere şol bir suraty görmek üçin IDEA-ny iň soňky wersiýa täzelemegi maslahat berýärin: Daşky gurşaw üýtgeýjiler"Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölüm meýdanynda bot adyny we bellik üýtgeýjilerini goşmalydyrys aşakdaky şablon: üýtgeýän_name1 = baha1; üýtgeýän_name2 = baha2 . Keyagny, açar = baha nokatlar bilen bölünýär. Biziň ýagdaýymyzda şeýle bolar: bot.token = 1375780501: AAHLzsf4WhcjSdPguDwtggRS1IMu5l8; bot.username = javarush_community_bot (bot üçin başga adyňyz we belligiňiz bolar) Indiki, WM opsiýalaryny goşmak düwmesini saýlaň . : -Dspring.profiles.active = test - bu, SpringBoot-a synag profilini ulanmagy aýdar, bu häsiýetler application-test.properties-den alynjakdygyny aňladýar. Netijede : _ _ zerur bolsa terminal. Iň soňky ädim bolsa esasy usuly işletmekdir. Hemme zady meniň beýan edişim ýaly etseňiz, gutararsyňyz: surnallaryň ikinji setiri synag profiliniň gazananlarynyň beýany bolar. MySQLWorkbench-den geçýäris we göçümiň gutarandygyny we hemme zadyň işleýändigini barlamak üçin iki buýruk işleýäris (bu programmanyň açylyş gündeliginden görünse-de, hökman barlamaly):"Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölüm"Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölüm"Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-nji bölüm
  1. dev_jrtb_db ulanyň;
  2. tablisalary görkezmek;
Netije: "Java-dan A-dan Z-a çenli": Maglumat bazasyna degişli hemme zady goşmak.  1-15-nji bölümGaraşylyşy ýaly, iki stol aldyk. Birinjisi göçleri hasaba almak üçin tehniki, ikinjisi Telegram ulanyjylary üçin stolumyz. Hemmesi: Maglumat bazasy bilen bilelikde uçuş goşuldy. Indi täze göçler sagat işi ýaly gider. Iň kyn zat, prosesiň ilkinji gurulmagy we işe girizilmegi. Dowamy bilen , bu global meseläniň üstünde işleýäris: docker-compose.yml-a maglumat bazalaryny goşmak, Ammar gatlagyny goşmak, bot üçin statistika, synaglary we resminamalary ýazmak we täzelemek.

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION