Свойства приложения и профили
Выносите конфигурацию во внешний файл с помощью application.properties/yml, определяйте профили и внедряйте значения через @Value и @ConfigurationProperties.
«Свойства приложения и профили» — бесплатный урок Java Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Java Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Java Academy содержит 4 уроков всего.
application.properties и application.yml
Spring Boot считывает конфигурацию из src/main/resources/application.properties или application.yml. YAML поддерживает иерархическую конфигурацию без повторения ключей; по возможностям оба формата эквивалентны.
# application.properties:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.jpa.hibernate.ddl-auto=validate
# Equivalent application.yml:
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost/mydb
jpa:
hibernate:
ddl-auto: validateВнедрение значений с помощью @Value
Используйте @Value("${property.key}"), чтобы внедрить отдельное свойство. Добавьте значение по умолчанию с помощью ${key:default}. Выражения SpEL поддерживаются.
@Service
public class PricingService {
@Value("${pricing.vat-rate:0.20}")
private double vatRate;
@Value("${app.name}")
private String appName;
}@ConfigurationProperties для типобезопасного связывания
Свяжите группу связанных свойств с записью или классом Java, аннотированными с помощью @ConfigurationProperties. Поддерживаются аннотации валидации.
@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
@NotBlank String host,
@Min(1) @Max(65535) int port,
boolean ssl
) {}
// Bind in Spring Boot 3: @EnableConfigurationProperties(MailProperties.class)Профили: определение окружений
Профили позволяют задавать конфигурации для конкретных окружений. Определяйте бины или свойства, активные только при включённом определённом профиле.
# application-dev.properties (active when profile=dev):
spring.datasource.url=jdbc:h2:mem:testdb
logging.level.com.example=DEBUG
# application-prod.properties (active when profile=prod):
spring.datasource.url=jdbc:postgresql://prod-db/app
logging.level.com.example=WARNАктивация профилей
Активируйте профиль через application.properties, переменную окружения, системное свойство или SPRING_PROFILES_ACTIVE Spring Boot.
# application.properties:
spring.profiles.active=dev
# Or environment variable:
export SPRING_PROFILES_ACTIVE=prod
# Or JVM argument:
java -Dspring.profiles.active=prod -jar app.jar@Profile для бинов
Аннотируйте @Bean или @Component с помощью @Profile("prod"), чтобы регистрировать его только при активном соответствующем профиле.
@Configuration
public class DataSourceConfig {
@Bean @Profile("dev")
public DataSource h2DataSource() { return new EmbeddedDatabaseBuilder().build(); }
@Bean @Profile("prod")
public DataSource postgresDataSource() { return DataSourceBuilder.create().url(prodUrl).build(); }
}Группы профилей (Spring Boot 2.4+)
Объедините несколько профилей под одним именем. Активация группы одновременно активирует все перечисленные профили.
# application.properties:
spring.profiles.group.production=prod,metrics,cloudВнешняя конфигурация с помощью переменных окружения
Spring Boot автоматически сопоставляет переменные окружения со свойствами. DB_HOST сопоставляется с db.host (нестрогое связывание). Идеально для развёртывания в Docker и Kubernetes.
# application.properties:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}Приоритет переопределения свойств
Свойства применяются в порядке приоритета: аргументы командной строки > переменные окружения > файлы для конкретного профиля > application.properties > значения по умолчанию. Источники с более высоким приоритетом переопределяют источники с более низким.
Шифрование конфиденциальных свойств с помощью Jasypt
Конфиденциальные значения, такие как пароли, можно зашифровать с помощью Jasypt Spring Boot. Сохраните зашифрованное значение в свойствах; Jasypt расшифрует его при запуске, используя главный ключ, переданный как аргумент JVM.
# application.properties:
spring.datasource.password=ENC(k9r/2dfhXPQz+2jR8yzUYw==)
# JVM arg:
java -Djasypt.encryptor.password=masterSecret -jar app.jarМногодокументные YAML-файлы
YAML-файлы поддерживают несколько документов, разделённых с помощью ---. Используйте spring.config.activate.on-profile внутри каждого документа для встроенной конфигурации, зависящей от профиля.
server:
port: 8080
---
spring:
config:
activate:
on-profile: prod
server:
port: 443Быстрая проверка
Какая аннотация связывает группу связанных свойств с классом Java с проверкой типов?
Итоги
Используйте application.properties / application.yml для конфигурации. @Value — для отдельных значений; @ConfigurationProperties — для групп значений. Профили разделяют окружения. Переменные окружения переопределяют свойства — это важно для контейнеров.
Часто задаваемые вопросы
Урок «Свойства приложения и профили» бесплатный?
Да — полный текст урока «Свойства приложения и профили» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Java Academy, подпишись на CoddyKit PRO. Курс Java Academy содержит 4 уроков всего.
Чему я научусь в уроке «Свойства приложения и профили»?
Выносите конфигурацию во внешний файл с помощью application.properties/yml, определяйте профили и внедряйте значения через @Value и @ConfigurationProperties. Ты практикуешь Java Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Java Academy?
Предыдущий опыт не требуется. Java Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Свойства приложения и профили»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Java Academy?
Да. Каждый урок Java Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Автонастройка и стартеры Spring Boot
- Свойства приложения и профили
- Связывание компонентов: @Component, @Service, @Repository
- Внедрение через конструктор и циклические зависимости