В моем приложении SpringBoot (с MVC) @Value или Environment не читает значение из файла конфигурации.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 В моем приложении SpringBoot (с MVC) @Value или Environment не читает значение из файла конфигурации.

Сообщение Anonymous »


У меня есть приложение SpringBoot с MVC. Здесь у меня есть класс AppConfig, как показано ниже. У меня есть файл конфигурации app.conf в папке «/etc/config/». Файл имеет следующие свойства

logging.level.org.gtri=DEBUG log.file=/var/log/myapp/app.log log.file.rolling.naming.pattern=/var/log/myapp/app.%i.log log.file.rolling.size=10 МБ app.feature.enabled=Истина Проблема, с которой я столкнулся, заключается в том, что
[*]При использовании аннотации @Value значение свойства всегда равно нулю. [*]Пытался с помощью Environment getProperty, но выдается исключение синтаксического анализа.
Журнал:

[2024-01-05 14:13:36,391] [INFO] localhost-startStop-6 o.g.d.c.AppConfig.applicationFeatureStatus - [---DEV_TEST---] Значение включения функции приложения из файла = null [2024-01-05 14:13:36,408] [ОШИБКА] localhost-startStop-6 o.g.d.c.AppConfig.applicationFeatureStatus — произошло исключение при анализе applicationFeatureStatus. java.lang.NullPointerException: ноль Класс AppConfig:

@Configuration @PropertySources({ @PropertySource(value = "file:/etc/config/app.conf", ignoreResourceNotFound = true), @PropertySource(value = "classpath:/local-config-${spring.profiles.active}.conf", ignoreResourceNotFound = true) }) @EnableWebMvc @EnableScheduling @EnableAspectJAutoProxy @Slf4j общедоступный класс AppConfig реализует WebMvcConfigurer { @Autowired PageRequestInterceptor pageRequestInterceptor; @Autowired Окружающая среда; @Value("${app.featrue.enabled:False}") частная строка appFeatureEnabled; @Бин общедоступное логическое приложениеFeatureStatus() { Логическое appFeatureStatus = false; пытаться { log.info("[---DEV_TEST---] Значение включения функции приложения из файла = {} , TIMEOUT = {}", appFeatureEnabled); log.info("[---DEV_TEST---] Флаг функции приложения (ENV) = {}", env.getProperty("app.featrue.enabled")); log.info("[---DEV_TEST---] Статус анализируемой функции приложения = {}", Boolean.parseBoolean(appFeatureEnabled)); appFeatureStatus = Boolean.parseBoolean(appFeatureEnabled); } поймать (Исключение ex) { log.error("Исключение произошло при анализе appFeatureEnabled.", ex); } вернуть статус приложенияFeatureStatus; } @Бин общественный LogInterceptor loggingAspects () {вернуть новый LogInterceptor (); } @Override public void addResourceHandlers (реестр ResourceHandlerRegistry) { //.......Код для ресурсов //...... } @Override общественный недействительный addInterceptors (реестр InterceptorRegistry) {register.addInterceptor (pageRequestInterceptor); } } Как я исправил: Я добавил новый класс конфигурации MyConfig ниже и переместил все источники компонентов applicationFeatureStatus и свойств. Теперь значение свойства считывается из файла и можно использовать @Value и Environment в обоих классах конфигурации.

@Configuration @EnableWebMvc @EnableScheduling @EnableAspectJAutoProxy @Slf4j общедоступный класс AppConfig реализует WebMvcConfigurer { @Autowired PageRequestInterceptor pageRequestInterceptor; @Autowired Окружающая среда; @Value("${app.featrue.enabled:False}") частная строка appFeatureEnabled; @Бин общественный недействительный тестBeanForAppFeatureStatus() { пытаться { log.info("[---DEV_TEST---] Значение включения функции приложения из файла = {} , TIMEOUT = {}", appFeatureEnabled); log.info("[---DEV_TEST---] Флаг функции приложения (ENV) = {}", env.getProperty("app.featrue.enabled")); log.info("[---DEV_TEST---] Статус анализируемой функции приложения = {}", Boolean.parseBoolean(appFeatureEnabled)); appFeatureStatus = Boolean.parseBoolean(appFeatureEnabled); } поймать (Исключение ex) { log.error("Исключение произошло при анализе appFeatureEnabled.", ex); } } @Бин общественный LogInterceptor loggingAspects () {вернуть новый LogInterceptor (); } @Override public void addResourceHandlers (реестр ResourceHandlerRegistry) { //....... Код для ресурсов //...... } @Override общественный недействительный addInterceptors (реестр InterceptorRegistry) {register.addInterceptor (pageRequestInterceptor); } } @Configuration @PropertySources({ @PropertySource(value = "file:/etc/config/app.conf", ignoreResourceNotFound = true), @PropertySource(value = "classpath:/local-config-${spring.profiles.active}.conf", ignoreResourceNotFound = true) }) @Slf4j общедоступный класс MyConfig { @Autowired Окружающая среда; @Value("${app.featrue.enabled:False}") частная строка appFeatureEnabled; @Бин общедоступное логическое приложениеFeatureStatus() { Логическое appFeatureStatus = false; пытаться { log.info("[---DEV_TEST---] Значение включения функции приложения из файла = {} , TIMEOUT = {}", appFeatureEnabled); log.info("[---DEV_TEST---] Флаг функции приложения (ENV) = {}", env.getProperty("app.featrue.enabled")); log.info("[---DEV_TEST---] Статус анализируемой функции приложения = {}", Boolean.parseBoolean(appFeatureEnabled)); appFeatureStatus = Boolean.parseBoolean(appFeatureEnabled); } поймать (Исключение ex) { log.error("Исключение произошло при анализе appFeatureEnabled.", ex); } вернуть статус приложенияFeatureStatus; } } Несмотря на то, что я это исправил, я понятия не имею, почему @Value или Environment не работают в классе конфигурации, AppConfig реализует WebMvcConfigurer
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»