无法访问 Spring 引导应用程序属性



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

相关内容

  • 没有找到相关文章

最新更新