[英]How to pass command line argument for Spring's @PropertySource annotation?
[英]Spring boot: How to pass a command line argument into an annotation value?
這是我正在嘗試做的事情:
@SpringBootApplication public class App {
public static final String NAME;
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
@Autowired public App(ApplicationArguments arguments) {
NAME = arguments.getSourceArgs()[0]; // ERROR (1)
}
@GetMapping("/" + NAME) public void test() { // ERROR (2)
return NAME;
}
}
代碼無法按原樣運行,因為(1)無法分配NAME
,(2) @GetMapping
注釋值必須是常量表達式。
我只是希望@GetMapping
使用基於命令行參數的值。 如何才能做到這一點?
在第一個請求中。 spring mvc將初始化資源。 所以你把你的動態網址放在haddlermapping中。
我們需要三個班級。 MyController
MyDispatcherServlet
DispatcherServletCustomConfiguration
MyController.java
@Component(value="MyController")
public class MyController {
@Autowired
ClaimService claimService;
public ResponseEntity<HttpStatus> insertClaim() {
return new ResponseEntity<>(HttpStatus.OK);
}
}
MyDispatcherServlet.java。 在initStrategies.put之后,你的動態url進入handdlerMapping。
public class MyDispatcherServlet extends DispatcherServlet {
private String url;
public MyDispatcherServlet(String url) {
super();
this.url = url;
}
@Override
protected void onRefresh(ApplicationContext context) {
initStrategies(context);
List<HandlerMapping> handlerMappings = getHandlerMappings();
for (HandlerMapping handlerMapping : handlerMappings) {
if (handlerMapping instanceof RequestMappingHandlerMapping) {
RequestMappingHandlerMapping requestMappingHandlerMapping = ((RequestMappingHandlerMapping) handlerMapping);
RequestMappingInfo.Builder n = RequestMappingInfo
.paths(url)
.methods(RequestMethod.GET);
try {
Method method = MyController.class.getDeclaredMethod("insertClaim");
requestMappingHandlerMapping.registerMapping(n.build(), "MyController", method);
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
}
}
DispatcherServletCustomConfiguration.java
@Configuration
public class DispatcherServletCustomConfiguration {
@Value("${myUrl}")
private String url;
@Bean
public DispatcherServlet dispatcherServlet() {
return new MyDispatcherServlet(url);
}
}
使用命令java -jar stackoverflow-1.0-SNAPSHOT.jar --myUrl=abcd
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.