как новичок Spring, я пытаюсь загрузить внешнюю конфигурацию в объект конфигурации, который затем пытаюсь подключить автоматически.
Ниже моя установка разбита до минимума (меньше полей aso):
Пакет-структура:
app
|--Application.java
app.configuration
|--ConfigProperties.java
С моими configuration.properties , расположенными в:
src/main/resources/config
Application.java:
package app;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import app.configuration.ConfigProperties;
@SpringBootApplication
public class Application
{
//just to test if autowire works
@Autowired
public static ConfigProperties config;
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
System.out.println(config.getId());
}
}
ConfigProperties.java:
package app.configuration;
import javax.validation.constraints.NotBlank;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.validation.annotation.Validated;
@Configuration
@PropertySource("classpath:/config/configuration.properties")
@ConfigurationProperties
@Validated
public class ConfigProperties
{
@NotBlank
private String id;
public String getId()
{
return id;
}
public void setId(String id)
{
this.id = id;
}
}
Это приводит к исключению NullPointerException для строки:
System.out.println(config.getId());
в Apllication.java.
Я прочитал несколько сообщений на эту тему, но большинство подразумевает, что собственное создание экземпляров предотвращает автоматическое подключение, что я не делаю, или что сканирование не может найти класс для автоматического подключения, но из того, что я прочитал с моими аннотациями и структурой пакета, не должно быть проблемой.
Где мои ошибки?
PS: кажется, что свойства читаются правильно из файла свойств. Если я проверяю валидацию, ожидаемое сообщение об ошибке выдается для нулевого значения, если пропустить ту часть, где я пытаюсь выполнить автоматическое соединение.