Не удается получить доступ к загрузочному приложению Spring.properties - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь получить доступ к 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-вызов остальной веб-службы, это значение равно нулю.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

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

0 голосов
/ 17 января 2019

В вашем контроллере 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;

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...