我正在尝试访问Spring Boot应用程序服务类中的application.properties
值。但是每次值都为null时,它将抛出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
实例从控制器传递到服务的默认构造函数,但没有用。调试时,值会在应用程序启动时保持不变,但是当我进行其余的Web服务POST调用时,它为null。
答案 0 :(得分:1)
在控制器MyController
中,您必须注入服务,替换为:
MyService ss = new MyService();
作者:
@Autowired
MyService ss;
此外,您可以使用 Spring 中的ApplicationProperties
注释来代替@Value
类,以从application.properties
文件中加载属性。看一下这段代码:
import org.springframework.beans.factory.annotation.Value;
// ...
@Service
public class MyService {
@Value("${port}")
private String port;
// ...
}
答案 1 :(得分:0)
我有同样的问题,但出于其他原因。 对我来说,解决方案是增加弹簧。在application.properties中每个参数之前。 所以例如“ spring.flyway.user = root”。