0Pricing
Java Academy · Урок

Свойства приложения и профили

Выносите конфигурацию во внешний файл с помощью 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 — локальная установка не требуется.

Все уроки этого курса

  1. Автонастройка и стартеры Spring Boot
  2. Свойства приложения и профили
  3. Связывание компонентов: @Component, @Service, @Repository
  4. Внедрение через конструктор и циклические зависимости
← Назад к Java Academy