>我正在尝试访问 Spring 启动应用程序的服务类中的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());
}
}
应用程序属性.java如下所示:
@Component
@Getter
@Setter
@ConfigurationProperties
public class ApplicationProperties {
String port;
}
最后,application.properties
文件具有:
port=1234
我什至尝试ApplicationProperties
实例从控制器传递到服务的默认构造函数,但它不起作用。当我调试时,值在应用程序启动时保持不变,但是当我进行休息 Web 服务 POST 调用时,它是空的。
在控制器MyController
中,您必须注入服务,替换:
MyService ss = new MyService();
由:
@Autowired
MyService ss;
此外,您可以使用 Spring 中的@Value
注释来从application.properties
文件加载属性,而不是 ApplicationProperties
类。看看这段代码:
import org.springframework.beans.factory.annotation.Value;
// ...
@Service
public class MyService {
@Value("${port}")
private String port;
// ...
}
我遇到了同样的问题,但出于其他原因。对我来说,解决方案是添加弹簧。在应用程序属性中的每个参数之前。例如"spring.flyway.user=root"。