Невозможно получить доступ к Spring boot application.properties

Я пытаюсь получить доступ к значениям application.properties в классе обслуживания приложения весенней загрузки. Но каждый раз, когда значение равно нулю, он выдает NullPointException. Я могу получить правильное значение для порта в классе контроллера (если я добавлю @Autowired в контроллер), но не в классе обслуживания. Какие изменения необходимы, чтобы эти свойства стали доступны через приложение?

Контроллер выглядит так:

@RestController
public class MyController {

MyService ss = new MyService();


 @RequestMapping(value = "/myapp/abcd", method = RequestMethod.POST, consumes = {"application/json"})
    public ResponseMessage sendPostMethod(@RequestBody String request) {
        log.debug(" POST Request received successfully; And request body is:"+ request);

        ResponseMessage response = ss.processRequest(request);
        return response;

    }

}

И класс Услуга:

@Service
public class MyService {

    private ApplicationProperties p;

    @Autowired 
    public setProps(ApplicationProperties config) {
           this.p = config;
    }

    public ResponseMessage processRequest(String request) {
          System.out.println("Property value is:"+ p.getPort());
    }

}

ApplicationProperties.java выглядит так:

@Component
@Getter
@Setter
@ConfigurationProperties
public class ApplicationProperties {

     String port;
}

Наконец, файл application.properties содержит:

port=1234

Я даже попытался передать экземпляр ApplicationProperties из контроллера в конструктор службы по умолчанию, но это не сработало. Когда я отлаживаю, значение сохраняется при запуске приложения, но когда я делаю POST-вызов веб-службы отдыха, оно равно нулю.

Проблема в этой строке. MyService ss = new MyService();, вы должны автоматически подключать его, а не создавать с помощью new

pvpkiran 16.01.2019 23:25

Вы имеете в виду "@Autowired MyService ss;" ?

Nomad 16.01.2019 23:27

да. Если вы создаете объект с новым. Это не весенний боб

pvpkiran 16.01.2019 23:28

Правильно. Спасибо...

Nomad 16.01.2019 23:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
4
3 145
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В вашем контроллере MyController вы должны ввести службу, заменив:

MyService ss = new MyService();

от:

@Autowired
MyService ss;

Кроме того, вместо вашего класса ApplicationProperties вы можете использовать аннотацию @Value из Spring для загрузки свойств из файла application.properties. Взгляните на этот код:

import org.springframework.beans.factory.annotation.Value;
// ...

@Service
public class MyService {

    @Value("${port}")
    private String port;

    // ...
}

У меня была такая же проблема, но по другим причинам. Для меня решением было добавить весну. перед каждым параметром в application.properties. Так, например, "spring.flyway.user = root".

Другие вопросы по теме