假设我有这个application.yml(将取决于环境,例如通过Spring概要文件):
app.remote:
url: http://whatever.url.it.is:8080/
并匹配Java样式的配置属性类:
@Configuration
@ConfigurationProperties("app.remote")
public class MyRemoteProperties {
@NotBlank
private String url;
// matching getter/setter...
}
我想要某种客户端作为我的远程URL:
@Service
@FeignClient(value = "remote", url = "${app.remote.url}")
public interface MyRemote {
@GetMapping("/what/ever/rest/api")
String stuff();
}
不幸的是,我无法获得MyRemoteProperties的验证工作,例如,当app.remote.url属性为空(空)时,应用程序无法启动(Spring无法连接MyRemote Bean),并且出现此错误:
原因:java.lang.IllegalStateException:没有为loadBalancing定义的Feign客户端。 您是否忘了包含spring-cloud-starter-netflix-ribbon?
(并且我不希望负载平衡;我认为这是因为URL有时是空的,所以它需要一些负载平衡器配置,因此在错误消息中位于功能区)。
或者也许我不知道如何将其插入MyRemote接口的配置,例如,我也尝试过:
@FeignClient(value = "remote", configuration = MyRemoteProperties.class)
但结果相同。
如何使此验证功能生效?
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.1.8.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-openfeign
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR3
pom
import
在某个时候调用该接口:
@Service
public RandomServiceOrController {
@Autowired
private MyRemote myRemote;
public void processMyStuff() {
// ...
String myStuff = myRemote.stuff();
// ...
}
}