Spring boot вводит свойства во время инициализации контекста приложения. Это происходит (запускается) в строке:
appCtxt.run(args);
Но вы пытаетесь получить доступ к свойству перед этой строкой - вот почему это не работает.
Итак, суть в том, что использование «@Value» в основном методе не работает и не должно.
Теперь из фрагмента кода, похоже, вы могли бы просто следовать «стандартам» весенней загрузки и создайте файл application.properties
с помощью:
server.port=1234
Процесс запуска встроенного веб-сервера при весенней загрузке учитывает это свойство, и в нижней строке он будет иметь тот же эффект, и Tomcat будет запущен на порту 1234
Обновление 1
На основе комментария OP:
Итак, как я могу иметь несколько application.properties.
В документации Spring Boot написано, что application.properties
разрешаются из пути к классам. Итак, вы можете попробовать следующее, если у вас есть разные модули A, B, C и веб-приложение D:
Создайте src/main/resources/application.properties
внутри каждого из 4 модулей и упакуйте все вместе. Значения конфигурации будут объединены (надеюсь, они не будут sh)
Если вы настаиваете на именовании свойств A.properties, B.properties и C .properties для каждого не веб-модулей, вы можете сделать следующее (я покажу для модуля A, но B и C могут делать то же самое).
@Configuration
@PropertySource("classpath:A.properties")
public class AConfiguration {
}
Create in Module A: src/main/resources/A.properties
Если вам нужно загрузить AConfiguration автоматически - сделайте модуль A стартером (используя функцию автоконфигурации spring -boot):
Создайте файл src/resources/META-INF/spring.factories
со следующим содержимым :
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
<package_of_AConfiguration>.AConfiguration
Также требовалось отделить C от всего пакета, где он может работать как пакет для некоторых и как отдельный для некоторых
Хотя я не совсем понял требования, но вы можете использовать @ConditionalOnProperty
для конфигурации CConfiguration
(которая будет создана так же, как AConfiguration.java
в моем предыдущем примере), но на этот раз для модуля C.
Если условие выполнено, конфигурация будет запущена и загрузить некоторые beans / загрузить свои собственные свойства или что-то еще. В целом условные выражения (и, в частности, профили весной) могут помочь достичь желаемой гибкости.