无法访问Spring Boot application.properties

时间:2019-01-16 22:21:09

标签: java spring spring-boot application.properties

我正在尝试访问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。

2 个答案:

答案 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”。