无法访问 Spring 启动 application.properties

Not able to access Spring boot application.properties

我正在尝试访问 spring 引导应用程序服务 class 中的 application.properties 值。但是每次 value 都是 null,所以它抛出 NullPointException。我可以在控制器 class 中获得正确的端口值(如果我在控制器中添加 @Autowired)但不能在服务 class 中获得。需要进行哪些更改才能使此属性在整个应用程序中可用?

控制器 看起来像:

@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;

    }

}

服务 class是:

@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 调用时,它为空。

在您的控制器 MyController 中,您必须注入服务,替换:

MyService ss = new MyService();

作者:

@Autowired
MyService ss;

此外,您可以使用 @Value 注释,而不是 ApplicationProperties class,从 Spring 加载application.properties 文件中的属性。看看这段代码:

import org.springframework.beans.factory.annotation.Value;
// ...

@Service
public class MyService {

    @Value("${port}")
    private String port;

    // ...
}

我遇到了同样的问题,但出于其他原因。 对我来说,解决方案是添加 spring。在 application.properties 中的每个参数之前。 所以例如"spring.flyway.user=root".