Spring Boot - присваивает значение члену класса из файла YML - исключение нулевого указателя - PullRequest
1 голос
/ 30 марта 2020

Я использую аннотации ниже в своем классе конфигурации, чтобы получить значения из файла свойств (yml). Configuration EnableConfigurationProperties ConfigurationProperties (prefix = "messages")

Я могу получить значения внутри методов publi c без проблем, используя класс. Но я получаю сообщение об ошибке «Ошибка создания компонента», когда пытаюсь присвоить значение переменной экземпляра класса с помощью класса конфигурации.

Ниже приведен мой код. Может кто-нибудь, пожалуйста, пролить немного света.

Это мой класс конфигурации

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties (prefix = "notification")
public class NotifyYaml {

private String subscriptionId;

public String getSubscriptionId() {
    return subscriptionId;
}

public void setSubscriptionId(String subscriptionId) {
    this.subscriptionId = subscriptionId;
}

Ниже приведен класс, в котором я получаю ошибку при запуске.

@Component
public class PubSubController {

    @Autowired
    private NotifyYaml notify;

    public PubSubController() {
        // TODO Auto-generated constructor stub
    }

String projectId = "ccc-g-pre-proj-cacdate";
    //Error in this line
    String subscriptionId = notify.getSubscriptionId();

1 Ответ

0 голосов
/ 30 марта 2020

Объект @Autowired заполняется только после объекта.

Это означает, что во время создания объекта он пытается вызвать метод из null object.

Я бы предложил использовать что-то вроде @PostConstruct метода. (Примечание: вам нужно как-то включить javax.annotations в ваш проект.)

String subscriptions; // remove the value for now...

@PostConstruct
private void init() {
    subscriptions = notify.getSubscriptionId(); // ...and add it back in here.
}
...