我有以下課程:
@Component
public class Scheduler {
@Value("${build.version}")
private String buildVersion;
public void test() {
System.out.println(this.buildVersion);
}
}
我正在從控制器呼叫方法 test():
@RestController
public class ApiController {
@GetMapping("/status")
public StatusResponse status() {
Scheduler scheduler = new Scheduler();
scheduler.update();
}
build.version但是,即使該類具有@Component注釋,spring 也不會注入該值。
我在控制器中使用相同的屬性,它作業正常。
我究竟做錯了什么?
uj5u.com熱心網友回復:
嘗試這種方式,因為您使用 new 創建實體而不是依賴 Spring 物件管理(控制反轉)
@RestController
public class ApiController {
private Scheduler scheduler;
@Autowired
public ApiController(Scheduler scheduler) {
this.scheduler = scheduler
}
@GetMapping("/status")
public StatusResponse status() {
scheduler.update();
}
}
uj5u.com熱心網友回復:
如果您application.yml要為這些屬性提供值@ConfigurationProperties,請在類的頂部使用。您不需要給出@Value每個屬性值,例如:
@Component
@Data
@ConfigurationProperties(prefix = "build")
public class SchedulerProperties {
private String buildVersion;
}
在application.yml定義如下
build:
buildVersion: "XYZ"
然后你可以從屬性類中呼叫版本
@Component
public class Scheduler {
@Autowired
private SchedulerProperties schedulerProperties;
public void test() {
System.out.println(schedulerProperties.getBuildVersion());
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495513.html
下一篇:MySQL選擇查詢花費太多時間
