我們正在一步一步地朝著我們的目標前進。 今天我們需要解決很多任務:
我們要做的第一件事是更新專案中的主分支 (git pull) 並使用我們的任務名稱建立新分支 - STEP_5_JRTB-1 (git checkout -b STEP_5_JRTB-1)。讓我提醒您:我們重命名了分支,以便可以僅按名稱對項目中的任務順序進行排序。這將使您能夠快速從一個步驟移動到另一個步驟。現在你可以安心工作了。我們需要新增三個依賴項:
現在很明顯,資料庫從未以我們的設定啟動。錯誤是相同的,所以讓我們將其從工作表中分離出來:
好像已經沒有錯誤了,可以看看是否可以訪問。但是,不幸的是,再次無法訪問......什麼都沒有:我們會進一步解決這個問題!要終止 docker-compose 並刪除所有容器,需要編寫: docker-compose -f docker-compose-test.yml down 這裡我們指定了要刪除的檔案。怎麼辦?讓我們谷歌一下:也許有人做得更好。最簡單的查詢:「docker-compose 中的 mysql 範例」可以幫助我們找到中等資源的連結。他們舉了這個例子:
- 新增飛行路線。這裡我們將為專案配置資料庫的部署。
- 新增資料庫架構。
- 新增存儲庫層。
- 新增機器人統計命令。
- 畢竟,編寫測試。
新增飛行路線
要新增 Flyway,您需要有一個資料庫,我們將其新增為 docker-compose 中的另一個服務。上次我說 docker-compose 有一個 services 部分,它正是負責增加和管理某個基礎設施——即一組應用程式/資料庫/訊息傳遞器等。我已經討論過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 資料庫的功能。第三個是SpringBoot啟動器,它啟動了在Spring中使用資料庫的所有魔力。我們也加入一個 lombok,以免寫 getter 和 setter:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
現在我們需要一個資料庫來進行開發。我們現在將它建立為一個單獨的 docker-compose 檔案和一個單獨的 application.properties 檔案(直到我想出更好的主意)。在開發中(特別是在 Spring 生態系統中)有一個叫做配置文件的東西。根據配置文件,啟動不同的設定進行操作。我認為將來我們會將 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 一起使用,您需要在 request 中使用-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 ;
- 使用者名稱 - 這裡是 root,正如我們在 docker-compose 中所寫的;
- 密碼 - 也是root。
我們得到:
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 之一
也就是說,他需要確定root使用者──主用戶的密碼。好的,現在我們將更新我們的文件:
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
我們刪除了使用者和密碼的這些變量,只加入了 root 使用者的密碼。這意味著 root 使用者現在將擁有 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 down docker-compose -f docker-compose-test.yml up 我們嘗試透過workbench進入資料庫:一切正常。那麼唯一的選擇就是資料庫版本。上面明確寫著5.7,就是你改成最新的話,應該不行。我重新啟動了它 - 它真的不起作用......顯然,他們在最新版本的 docker 映像上有一些問題。好的沒問題。這種情況經常發生在自由軟體中。我們將使用 5.7 版本。讓我們看看是否有我們需要的資料庫 - dev_jrtb_db。為此,請在 MySQL Workbench 中執行 Query 命令SHOW DATABASES:是的,它出現在輸出中。太好了,我們可以繼續前進。接下來,讓我們新增第一個遷移。根據「專案規劃:測量兩次,切割一次」一文中的任務,我們將建立第一個表 tg_user。所有遷移都將位於projectDir/src/main/resources/db/migration資料夾中,名稱為:V00001__add_tg_user_table.sql。為什麼那個資料夾裡有這麼一個名字——我在關於Spring + 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 中執行 main 方法。為了分開部署和測試工作,我們將使用另一個具有屬性的檔案 - application-test.properties。透過這個模板,我們讓 Spring 知道這個檔案將用於測試設定檔。當我們不指定設定檔時,將使用預設設定檔(運行 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 欄位:在測試設定檔中,我們在localhost上有一個 URL 。也就是說,應用程式預計在 Docker 之外運行,這是事實,因為在調試時我們將在 Intellij IDEA 中運行我們的項目,並期望我們能夠從本地電腦存取資料庫。但在 application.properties URL 中,已經指定了另一個 - jrtb-db。這將是 docker-compose 中資料庫的名稱,這樣我們的 docker 應用程式就能夠存取該資料庫。為什麼?因此,它們將在同一個 docker-compose 中啟動,並以這種方式相互了解。這是必要的,以便我們為該專案擁有一個封閉的基礎設施。但如何在啟動時啟動設定檔呢?為此,您可以在 Intellij IDEA 中設定 main 方法的啟動。為此,可以編輯配置:前往 JavarushTelegramBotApplication 的主類,點擊主方法聲明旁邊的綠色箭頭,然後選擇修改運行配置:輸入必要的變數並配置設定檔。在Intellij IDEA中,這個配置視窗的介面略有變化,所以我建議大家將IDEA更新到最新版本,以便我們看到相同的圖片:在環境變數欄位中,我們需要使用新增機器人名稱和令牌變數以下模板:variable_name1=value1;variable_name2=value2。即key=value之間以分號分隔。在我們的例子中,它將是這樣的: bot.token=1375780501:AAHLzsf4WhcjSdPguDwtggRS1IMu5l8;bot.username=javarush_community_bot(您將為機器人使用不同的名稱和令牌) 接下來,在「修改選項」按鈕中選擇「選項」按鈕中選擇「選項」按鈕新增VM 選項」欄位:寫入:-Dspring.profiles.active =test - 這將告訴 SpringBoot 使用測試設定文件,這表示屬性將從 application-test.properties 中取得。結果,它看起來像這樣:現在我們啟動我們的測試資料庫: docker-compose -f docker-compose-test.yml up 正是這樣,沒有 -d 前綴,以便可以立即在中看到日誌終端(如果需要)。最後一步是簡單地執行 main 方法。如果您按照我所描述的方式執行所有操作,您最終將得到:日誌的第二行將描述測試設定檔已獲得的內容。我們透過 MySQLWorkbench 並執行兩個命令來檢查遷移是否已推出並且一切正常(儘管這可以從應用程式啟動日誌中看到,但絕對值得檢查):
- 使用 dev_jrtb_db;
- 顯示表格;
GO TO FULL VERSION