Где в Spring Boot проекте настраивается порт подключения к базе данных
Что проверяют
Понимаете ли вы, как Spring Boot собирает подключение к базе, и не путаете ли порт базы с портом самого приложения. Следом обычно спрашивают, как подставить разные адреса для локальной среды, тестов и прода, не трогая код.
Как отвечать
Отдельного свойства для порта базы нет. Порт это часть JDBC URL в spring.datasource.url, например jdbc:postgresql://localhost:5432/orders.
Рядом лежат spring.datasource.username и spring.datasource.password, а driver-class-name обычно указывать не нужно: Boot определяет драйвер по префиксу URL. Из этих свойств DataSourceAutoConfiguration собирает пул HikariCP, его настройки идут под spring.datasource.hikari.*. Порты по умолчанию стоит помнить: PostgreSQL 5432, MySQL 3306, SQL Server 1433, Oracle 1521.
Дальше покажите, что строка в application.yml это только начало:
- плейсхолдеры:
jdbc:postgresql://${DB_HOST:localhost}:${DB_PORT:5432}/orders, значение после двоеточия работает как дефолт; - переменные окружения:
SPRING_DATASOURCE_URLперекрывает свойство из файла благодаря relaxed binding, так настраивают контейнеры; - профили:
application-dev.yml,application-prod.ymlиspring.profiles.active; - приоритет: аргументы командной строки сильнее переменных окружения, а те сильнее файлов внутри jar;
- тесты: с Testcontainers и
@ServiceConnection(Boot 3.1 и новее) URL с динамическим портом контейнера подставляется сам.
В реактивном стеке настройка другая: spring.r2dbc.url с префиксом r2dbc:. Flyway и Liquibase принимают собственный URL, если миграции идут под другим пользователем. А DriverManagerDataSource, который часто показывают в примерах, пула не держит и для боевого сервиса не годится.
Где спотыкаются
Называют server.port. Это порт встроенного Tomcat, на котором слушает само приложение, к базе он отношения не имеет.
Кладут боевой пароль в application.properties и коммитят его в репозиторий. Секреты подставляют из окружения или хранилища секретов.
В Docker Compose оставляют localhost в URL. Внутри контейнера это сам контейнер приложения, обращаться нужно по имени сервиса базы, например db:5432.