Автор оригинала: mkyong.
Весенняя загрузка @ConfigurationProperties
позволяет разработчику отображать весь .свойства
и yml
легко преобразуйте файл в объект.
P.S Протестирован с пружинной загрузкой 2.1.2.РЕЛИЗ
1. @Значение
1.1 Обычно мы используем @Значение
для ввода значения .properties
по одному, это хорошо для небольших и простых файлов .properties
. Например,
email=test@mkyong.com thread-pool=12
@Component @PropertySource("classpath:global.properties") public class GlobalProperties { @Value("${thread-pool}") private int threadPool; @Value("${email}") private String email; //getters and setters }
1.2 Эквивалент в @Свойства конфигурации
import org.springframework.boot.context.properties.ConfigurationProperties; @Component @PropertySource("classpath:global.properties") @ConfigurationProperties public class GlobalProperties { private int threadPool; private String email; //getters and setters }
2. @Свойства конфигурации
2.1 Обзор сложной структуры .свойства
или yml
файл ниже, как мы будем сопоставлять значения через @Value
?
#Logging logging.level.org.springframework.web=ERROR logging.level.com.mkyong=DEBUG #Global email=test@mkyong.com thread-pool=10 #App app.menus[0].title=Home app.menus[0].name=Home app.menus[0].path=/ app.menus[1].title=Login app.menus[1].name=Login app.menus[1].path=/login app.compiler.timeout=5 app.compiler.output-folder=/temp/ app.error=/error/
или эквивалент в YAML.
logging: level: org.springframework.web: ERROR com.mkyong: DEBUG email: test@mkyong.com thread-pool: 10 app: menus: - title: Home name: Home path: / - title: Login name: Login path: /login compiler: timeout: 5 output-folder: /temp/ error: /error/
2.2 @ConfigurationProperties
приходит на помощь:
package com.mkyong; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Component @ConfigurationProperties("app") // prefix app, find app.* values public class AppProperties { private String error; private List
package com.mkyong; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties // no prefix, find root level values. public class GlobalProperties { private int threadPool; private String email; //getters and setters }
3. @Проверка свойств конфигурации
Это @Свойства конфигурации
поддерживает проверку компонентов JSR-303.
3.1 Добавьте @Validated
в класс @ConfigurationProperties
и javax.validation
примечания к полям, которые мы хотим проверить.
package com.mkyong; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; @Component @ConfigurationProperties @Validated public class GlobalProperties { @Max(5) @Min(0) private int threadPool; @NotEmpty private String email; //getters and setters }
3.2 Набор
#Global email=test@mkyong.com thread-pool=10
3.3 Запустите весеннюю загрузку, и мы получим следующее сообщение об ошибке:
*************************** APPLICATION FAILED TO START *************************** Description: Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under '' to com.mkyong.GlobalProperties failed: Property: .threadPool Value: 10 Origin: class path resource [application.properties]:7:13 Reason: must be less than or equal to 5 Action: Update your application's configuration
4. ДЕМОНСТРАЦИЯ
$ git clone https://github.com/mkyong/spring-boot.git $ cd externalize-config-properties-yaml $ mvn spring-boot:run access localhost:8080
Скачать Исходный Код
доступ к локальному хосту: 8080
Рекомендации
- Конфигурация с внешней загрузкой Spring
- Пример Spring @PropertySource
- JSR 303: Проверка компонентов
Оригинал: “https://mkyong.com/spring-boot/spring-boot-configurationproperties-example/”