Сборка JAR и запуск на сервере
На сервер не копируют исходники и не запускают ./mvnw spring-boot:run. Приложение собирают в один исполняемый JAR-файл: внутри ваш код, все библиотеки и встроенный Tomcat. На сервере нужна только Java 25 — и одна команда для запуска.
Сборка
./mvnw clean packageMaven скомпилирует код, прогонит тесты и соберёт файл в папке target:
target/blog-0.0.1-SNAPSHOT.jar 64 МБ — для запуска
target/blog-0.0.1-SNAPSHOT.jar.original 40 КБ — только ваши классыБольшой файл собрал spring-boot-maven-plugin: он упаковал внутрь все зависимости. Файл .original — обычный JAR без библиотек, на сервер его не берут. Если тесты упали, JAR не соберётся; пропустить их можно ключом -DskipTests, но лучше починить.
Запуск
java -jar target/blog-0.0.1-SNAPSHOT.jarВ журнале — те же строки, что при запуске через Maven. Остановить приложение можно Ctrl+C; на сервере его обычно запускают как службу systemd или в контейнере, чтобы оно поднималось само после перезагрузки.
Настройки для сервера
Для сервера заведём профиль prod. В нём нет паролей — только то, что отличается от разработки:
# src/main/resources/application-prod.yaml
spring:
jpa:
show-sql: false
h2:
console:
enabled: false
logging:
file:
name: logs/blog.logАдрес и пароль базы передаются переменными окружения при запуске:
SPRING_PROFILES_ACTIVE=prod \
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/blog \
SPRING_DATASOURCE_USERNAME=blog \
SPRING_DATASOURCE_PASSWORD=changeme \
java -jar target/blog-0.0.1-SNAPSHOT.jarSpring Boot сам превращает SPRING_DATASOURCE_URL в настройку spring.datasource.url — переписывать файлы на сервере не нужно. Для PostgreSQL в pom.xml должны быть драйвер org.postgresql:postgresql и модуль flyway-database-postgresql.
Что видно при запуске
INFO ... The following 1 profile is active: "prod"
INFO ... Database: jdbc:postgresql://localhost:5432/blog (PostgreSQL 18.3)
INFO ... Migrating schema "public" to version "1 - create tables"
INFO ... Migrating schema "public" to version "2 - add password and role"
INFO ... Successfully applied 2 migrations to schema "public", now at version v2На пустой базе PostgreSQL Flyway применил обе миграции — те же файлы, что работали с H2. Затем curl http://localhost:8080/actuator/health ответит со статусом UP, а журнал продублируется в logs/blog.log.
Список перед выкладкой
| Что проверить | Как |
|---|---|
Профиль prod включён | Строка The following 1 profile is active: "prod" |
| Пароли не лежат в Git | Только переменные окружения |
| Консоль H2 выключена | spring.h2.console.enabled: false |
| Схема ведётся миграциями | ddl-auto: validate и Flyway |
| Есть проверка здоровья | /actuator/health отвечает UP |
Частая ошибка
Если запустить не тот файл, Java ответит:
no main manifest attribute, in target\blog-0.0.1-SNAPSHOT.jar.originalЭто файл .original без библиотек и без точки входа. Запускайте JAR без этого окончания. Та же ошибка бывает, если в pom.xml нет spring-boot-maven-plugin: тогда большой исполняемый файл вообще не собирается.