0
我想建立到控制器方法的URL鏈接。我使用這種方法:如何在Spring的@Scheduled任務中構建URL?
URI uri = MvcUriComponentsBuilder.fromMethodCall
(on(MyController.class).myMethod(...))
.build().encode().toUri();
生成URL(例如,定期發送包含鏈接的電子郵件)。
的問題是,Spring的@Scheduled任務中運行時,不能得到RequestContext
,所以它拋出這個異常:
java.lang.IllegalStateException: Could not find current request via RequestContextHolder
at org.springframework.util.Assert.state(Assert.java:392)
at org.springframework.web.servlet.support.ServletUriComponentsBuilder.getCurrentRequest(ServletUriComponentsBuilder.java:190)
at org.springframework.web.servlet.support.ServletUriComponentsBuilder.fromCurrentServletMapping(ServletUriComponentsBuilder.java:166)
at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.getBaseUrlToUse(MvcUriComponentsBuilder.java:412)
如果在測試環境中,這可以通過注射MockHttpServletRequest
來解決,但它不不工作,因爲這不在一個環境中。
如何解決?
我使用Google搜索並獲得了一些變通方法,例如硬編碼方案和主機來構建URL,但我不想對任何主機名進行硬編碼,是否還有其他動態解決方案?
環境:
spring-boot-starter-web:jar:1.4.3.RELEASE
spring-webmvc:jar:4.3.2.RELEASE
另外根據我的經驗,唯一的方法是在可配置的屬性中配置基礎URL –