JavaRush /Blog Jawa /Random-JV /Kita nambah kabeh sing ana gandhengane karo database. (Ba...

Kita nambah kabeh sing ana gandhengane karo database. (Bagian 1) - "Proyek Jawa saka A nganti Z"

Diterbitake ing grup
Langkah demi langkah kita pindhah menyang tujuan kita. "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 1Dina iki kita kudu ngrampungake akeh tugas:
  1. Tambah Flyway. Ing kene kita bakal ngatur panyebaran database kanggo proyek kasebut.
  2. Tambah skema database.
  3. Tambah lapisan repositori.
  4. Tambah printah kanggo statistik bot.
  5. Tulis tes, sawise kabeh.
Dadi lungguhan, lungguha, ana sing maca dawa. Kita wis sinau carane nyebarake aplikasi kita nggunakake docker lan docker-compose. Iku ora gampang, lan ucapan selamat kanggo sing bisa nindakake. Yen sampeyan duwe pitakonan babagan implementasine, sampeyan bisa ndeleng kode ing request narik iki .

Tambah Flyway

Kanggo nambah Flyway, sampeyan kudu duwe database, sing bakal ditambahake minangka layanan liyane ing docker-compose. Pungkasan aku ujar manawa docker-compose duwe bagean layanan, sing tanggung jawab kanggo nambah lan ngatur infrastruktur tartamtu - yaiku, sakumpulan aplikasi / database / utusan, lsp.
Aku wis ngomong babagan apa Flyway lan carane nambah menyang aplikasi SpringBoot . Aku menehi saran supaya refresh memori sadurunge maca artikel iki. Sampeyan uga bisa maca file README.md proyek kanthi demonstrasi artikel babagan Flyway + SpringBoot.
Wangsulan: Bab ingkang pisanan kita nindakake iku nganyari cabang utama kita ing project (git pull) lan nggawe anyar karo jeneng tugas kita - STEP_5_JRTB-1 (git checkout -b STEP_5_JRTB-1). Ayo kula ngelingake sampeyan: kita ngganti jeneng cabang supaya bisa ngurutake urutan tugas ing proyek mung kanthi jeneng. Iki bakal ngidini sampeyan cepet pindhah saka siji langkah menyang liyane. Saiki sampeyan bisa kerja kanthi tentrem. Kita kudu nambah telung dependensi:
<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>
Ketergantungan pisanan tanggung jawab kanggo nambah FlyWay menyang proyek kasebut, sing kapindho nambah kemampuan kanggo nyambung menyang database MySQL. Katelu yaiku SpringBoot starter, sing ngluncurake kabeh sihir nggunakake database ing Spring. Lan ayo uga nambahake lombok supaya ora nulis getter lan setter:
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>
Saiki kita butuh database kanggo pangembangan. Kita bakal nggawe kanggo saiki ( nganti aku teka munggah karo idea luwih ) minangka file docker-nyipta kapisah lan file kapisah kanggo application.properties. Ana ing pembangunan (lan ing ekosistem Spring utamané) minangka profil. Gumantung ing profil, setelan beda dibukak kanggo operasi. Aku mikir ing mangsa ngarep kita bakal nggabungake docker-compose dadi siji file lan priksa manawa mung siji database sing diluncurake kanggo pangembangan ing setelan sing dibutuhake. Saiki kita bakal nindakake iki:
  1. Ayo nggawe file ing ROOT saka project docker-compose-test.yml, kang mung database karo setelan dhewe bakal dibukak.
  2. Ayo nggawe file application-test.properties kanthi setelan sing cocog karo setelan ing file docker-compose-test.yml.
Kanggo nggarap MySQL, aku njupuk gambar resmi saka DockerHub : "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 2Sawise nggulung kanthi cepet, aku nemokake variabel sing dibutuhake: MYSQL_DATABASE - jeneng database MYSQL_USER - jeneng pangguna database MYSQL_PASSWORD - sandi pangguna database Lan carane kudu ditulis kanthi bener:
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
Sawise iku, aku nggawe docker-compose-test.yml ing root project:
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
Kanggo mbukak file tartamtu iki kanggo nggarap docker-compose, sampeyan kudu nggunakake flag -f ing request . Tegese jeneng file sing diluncurake bakal diwenehake, tinimbang standar docker-compose.yml sing dijupuk. Mulane, panjalukan bakal katon kaya iki: docker-compose -f docker-compose-test.yml munggah -d Pranyata pisanan kita ngomong file apa sing bakal dijupuk ( -f docker-compose-test.yml ), banjur kita ujar manawa kita kudu ngunggahake layanan lan nindakake iki ing mode daemon ( munggah -d ) - yaiku, supaya proses kasebut mlaku ing njaba sesi terminal ing ngendi printah iki diluncurake. Kita miwiti lan nyoba kanggo nyambung menyang database kanggo mesthekake yen iku munggah lan bisa digunakake. Kanggo nindakake iki, bukak MySQL Workbench sing wis dikenal ( kita ngomong babagan kene ) lan gawe sambungan anyar: "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 3Kita kudu ngisi kolom ing ngisor iki:
  • Jeneng sambungan - jeneng sambungan - opsional, DEV_JRTB_DB;
  • Hostname - iki alamat ngendi database disebarake. Ing kasus kita, kabeh bakal tetep kaya: 127.0.0.1 , utawa localhost;
  • jeneng panganggo - ing kene bakal dadi ROOT, kaya sing wis ditulis ing docker-compose;
  • sandi - uga ROOT.
Sawise iki, sampeyan kudu mriksa yen ana sambungan. Kanggo nindakake iki, klik Test Connection : "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 4Akibaté, kita entuk: Gagal Nyambung menyang MySQL... Kenapa? Kita menyang terminal lan ndeleng apa sing kedadeyan ing wadhah docker. Ayo nulis ing terminal: "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 5Kita weruh yen terminal digawe 59 menit kepungkur, lan miwiti maneh 55 detik ... kok? Iku ora cetha, sampeyan kudu katon ing log. Pindhah menyang root project ing terminal lan jalanake printah ing ngisor iki: docker-compose -f docker-compose-test.yml logs
Kita entuk:

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

Saiki jelas yen database ora tau diwiwiti karo setelan kita. Kesalahan padha, mula ayo diisolasi saka sheet:
28-02-2021 11:03:37+00:00 [ERROR] [Entrypoint]: Database ora diinisialisasi lan pilihan tembung sandhi ora ditemtokake dev-jrtb-db | Sampeyan kudu nemtokake salah siji saka MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD lan MYSQL_RANDOM_ROOT_PASSWORD
Yaiku, dheweke kudu nemtokake tembung sandhi kanggo pangguna root - pangguna utama. Oke, saiki kita bakal nganyari file:
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
Kita mbusak variabel kasebut kanggo pangguna lan sandhi lan mung nambahake sandhi kanggo pangguna root. Iki tegese pangguna root saiki bakal duwe sandhi root. Paling ora sing kita nganggep. Saiki ayo mbukak lan ndeleng apa sing kedadeyan: docker-compose -f docker-compose-test.yml munggah -d Lan langsung ndeleng apa sing dicritakake log: docker-compose -f docker-compose-test.yml log
Ayo katon:

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.

Ora ana kesalahan maneh, supaya sampeyan bisa ndeleng manawa ana akses. Nanging, sayangé, ora ana akses maneh ... Ora ana: kita bakal ngerteni luwih lanjut! "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 6Kanggo mungkasi docker-compose lan mbusak kabeh kontaner, sampeyan kudu nulis: docker-compose -f docker-compose-test.yml mudhun Kene kita nemtokake file sing bakal dibusak. Apa sing kudu ditindakake? Ayo googling: mbok menawa ana sing nindakake luwih apik. Pitakonan sing paling gampang: "conto mysql ing docker-compose" mbantu kita nemokake link menyang sumber medium. Dheweke menehi conto iki:
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:
Kita adaptasi karo kabutuhan lan entuk:
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'
Kita miwiti pilihan iki kanthi prentah sing wis kita kenal: docker-compose -f docker-compose-test.yml munggah -d Kita nyoba maneh ngakses database liwat MySQLWorkBench: "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 7Akhire, akses wis muncul. Nanging saiki aku kepingin weruh apa sing mengaruhi iki. Aku dosa ing bagean iki:
expose:
   # Opens port 3306 on the container
   - '3306'
Gampang kanggo mriksa: tanpa iki, ora ana sing bisa ditindakake: D. Ayo mriksa: mbusak bagean iki, miwiti maneh docker-compose: docker-compose -f docker-compose-test.yml mudhun docker-compose -f docker-compose-test.yml munggah Kita nyoba kanggo mlebu menyang database liwat workbench: kabeh iku nggoleki. Banjur pilihan mung versi database. Cetha nyatakake 5.7, yaiku, yen sampeyan ngganti menyang paling anyar, mesthine ora bisa digunakake. Aku miwiti maneh - lan iku pancene ora bisa ... "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 8Ketoke, padha duwe sawetara masalah karo gambar docker ing versi paling anyar. Oke, ora masalah. Iki asring kedadeyan karo piranti lunak gratis. Kita bakal nggunakake versi 5.7. Ayo ndeleng manawa ana database sing dibutuhake - dev_jrtb_db. Kanggo nindakake iki, jalanake perintah Query ing MySQL Workbench SHOW DATABASES : "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 9Ya, ana ing output. Apik, kita bisa nerusake. Sabanjure, ayo nambah migrasi pisanan kita. Adhedhasar tugas saka artikel "Perencanaan proyek: ngukur kaping pindho, dipotong sapisan," kita bakal nggawe tg_user tabel pisanan. Kabeh migrasi bakal ana ing folder projectDir/src/utama/resources/db/migrasi , lan jeneng bakal: V00001__add_tg_user_table.sql . Napa jeneng kasebut ana ing folder kasebut - Aku diterangake ing artikel babagan Spring + flyway. Iki minangka migrasi pisanan kita: 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
);
Yaiku, ing kene kita mung nggawe tabel pangguna sing mung duwe ID chatting (unsur unik sing bisa digunakake minangka ID ing tabel) lan negarane - aktif utawa ora aktif. Dadi, yen bot mandheg, informasi langganan bakal tetep lan bisa digunakake yen pengin nggunakake bot maneh. Ora ana informasi liyane babagan pangguna sing dibutuhake kanggo saiki. Saiki pitakonan utama: carane mriksa iki? Kita kudu miwiti aplikasi kita. Nganti saiki, file docker-compose.yml utama ora ana sambungan karo database, lan kita uga kudu sinau carane debug aplikasi bebarengan karo database. Mula, ayo miwiti aplikasi kasebut nganggo Intellij IDEA. Kanggo nyoba iki, kita kudu mbukak metode utama ing JavarushTelegramBotApplication. Kanggo misahake karya penyebaran lan testing, kita bakal nggunakake file liyane karo sifat - application-test.properties . Kanthi cithakan iki kita ngandhani Spring yen file iki bakal digunakake kanggo profil test . Nalika kita ora nemtokake profil, profil standar digunakake (priksa iki ing log nalika mbukak SpringBoot: bakal ditulis babagan iki ing baris pisanan). Iki bakal katon kaya:
# 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
Lan application.properties utama bakal katon rada beda:
# 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
Bentenane sing signifikan ana ing lapangan spring.datasource.url: ing profil test kita duwe URL ing localhost . Yaiku, aplikasi kasebut samesthine bakal mbukak ing njaba Docker, sing bener, amarga nalika debugging kita bakal mbukak proyek ing Intellij IDEA lan ngarepake manawa kita bakal duwe akses menyang database saka mesin lokal. Nanging URL application.properties wis ngemot sing beda - jrtb-db . Iki bakal dadi jeneng database kita ing docker-compose, lan kanthi cara iki aplikasi docker kita bakal bisa nggayuh database kasebut. Kenging punapa? Mulane, dheweke bakal diluncurake ing docker-compose sing padha lan bakal ngerti babagan saben liyane kanthi cara iki. Iki perlu supaya kita duwe infrastruktur tertutup kanggo proyek kasebut. Nanging carane miwiti profil ing wiwitan? Kanggo nindakake iki, sampeyan bisa ngatur peluncuran metode utama ing Intellij IDEA. Kanggo iki, ana Sunting Konfigurasi : pindhah menyang kelas utama JavarushTelegramBotApplication, klik panah ijo ing jejere deklarasi metode utama lan pilih Modify Run Configuration : "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 10Ketik variabel sing dibutuhake lan konfigurasi profil. Ing Intellij IDEA, antarmuka jendhela konfigurasi iki wis rada owah, mula aku menehi saran supaya saben wong nganyari IDEA menyang versi paling anyar supaya kita bisa ndeleng gambar sing padha: "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 11Ing lapangan variabel Lingkungan , kita kudu nambah jeneng bot lan variabel token nggunakake Cithakan ing ngisor iki: variabel_name1 = value1; variable_name2 = value2 . Yaiku, key=value dipisahake karo titik koma. Ing kasus kita bakal kaya mangkene: bot.token=1375780501:AAHLzsf4WhcjSdPguDwtggRS1IMu5l8;bot.username=javarush_community_bot (sampeyan bakal duwe jeneng lan token sing beda kanggo bot) Sabanjure, pilih kolom opsi Tambah VM ing tombol Opsi Opsi : Tulis : -Dspring.profiles.active =test - iki bakal ngandhani SpringBoot nggunakake profil test, kang tegese sifat bakal dijupuk saka application-test.properties. Akibaté, bakal katon kaya iki: Saiki kita miwiti database test: docker-compose -f docker-compose-test.yml munggah Lan persis kaya iki, tanpa ater-ater -d, supaya log bisa langsung katon ing terminal, yen perlu. Lan langkah pungkasan yaiku mung mbukak cara utama. Yen sampeyan nindakake kabeh ing cara sing padha aku diterangake, sampeyan bakal mungkasi munggah karo: Ing baris kapindho log bakal gambaran apa profil test wis entuk. Kita ngliwati MySQLWorkbench lan mbukak rong perintah kanggo mriksa manawa migrasi wis diluncurake lan kabeh bisa digunakake (sanajan iki katon saka log peluncuran aplikasi, mesthine kudu dipriksa):"Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 12"Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 13"Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 14
  1. gunakake dev_jrtb_db;
  2. nuduhake tabel;
Asil: "Proyek Jawa saka A nganti Z": Nambahake kabeh sing ana gandhengane karo database.  Bagean 1 - 15Kaya sing dikarepake, kita entuk rong meja. Sing pertama yaiku teknis kanggo ngitung migrasi, sing nomer loro yaiku tabel kanggo pangguna Telegram. Kabeh: Flyway bebarengan karo database wis ditambahake. Saiki migrasi anyar bakal kaya jam. Sing paling angel yaiku persiyapan lan peluncuran proses pisanan. Terus , kita ngrampungake tugas global iki: nambah database menyang docker-compose.yml, nambah lapisan Repositori, statistik kanggo bot, nulis lan nganyari tes lan dokumentasi.

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

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