我们正在一步一步地朝着我们的目标前进。 今天我们需要解决很多任务:
我们要做的第一件事是更新项目中的主分支 (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