Я пытаюсь получить доступ к значениям 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-вызов веб-службы отдыха, оно равно нулю.
Вы имеете в виду "@Autowired MyService ss;" ?
да. Если вы создаете объект с новым. Это не весенний боб
Правильно. Спасибо...




В вашем контроллере 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".
Проблема в этой строке.
MyService ss = new MyService();, вы должны автоматически подключать его, а не создавать с помощьюnew