get demo [BlockingLoadbalancer] from https://github.com/spring-projects-experimental/spring-native/pull/1143
native compile is ok,then native-image run successfully
after add hits in main class [BlockingLoadbalancerClienSampleApplication]
@InitializationHint(types = ColorConverter.class, initTime = InitializationTime.BUILD)
@TypeHint(
types = {
org.springframework.context.annotation.Conditional.class
},
methods = {@MethodHint(name = "value")}
)
@TypeHint(types = {org.springframework.context.annotation.ConfigurationClassPostProcessor.class
, org.springframework.context.event.EventListenerMethodProcessor.class
, org.springframework.context.event.DefaultEventListenerFactory.class
, org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.class
, org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.class
, org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration.class
}
, typeNames = {"org.springframework.boot.autoconfigure.condition.OnBeanCondition"},
methods = {
@MethodHint(name = "")
}
)
@TypeHint(types = org.springframework.cloud.context.named.NamedContextFactory.class,
methods = {
@MethodHint(name = "destroy")
, @MethodHint(name = "getContextNames")
, @MethodHint(name = "getParent")
, @MethodHint(name = "getInstance"
, parameterTypes = {java.lang.String.class, java.lang.Class.class})
, @MethodHint(name = "createContext"
, parameterTypes = {java.lang.String.class})
, @MethodHint(name = "getContext"
, parameterTypes = {java.lang.String.class})
, @MethodHint(name = "getInstance"
, parameterTypes = {java.lang.String.class, java.lang.Class.class, java.lang.Class[].class})
, @MethodHint(name = "getInstance"
, parameterTypes = {java.lang.String.class, org.springframework.core.ResolvableType.class})
, @MethodHint(name = "getInstances"
, parameterTypes = {java.lang.String.class, java.lang.Class.class})
, @MethodHint(name = "getLazyProvider"
, parameterTypes = {java.lang.String.class, java.lang.Class.class})
, @MethodHint(name = "getProvider"
, parameterTypes = {java.lang.String.class, java.lang.Class.class})
, @MethodHint(name = "setApplicationContext"
, parameterTypes = {org.springframework.context.ApplicationContext.class})
, @MethodHint(name = "setConfigurations"
, parameterTypes = {java.util.List.class})
}
)
@TypeHint(types = org.springframework.context.support.PropertySourcesPlaceholderConfigurer.class,
methods = {@MethodHint(name = "getAppliedPropertySources")
, @MethodHint(name = "postProcessBeanFactory", parameterTypes = org.springframework.beans.factory.config.ConfigurableListableBeanFactory.class)
, @MethodHint(name = "setPropertySources", parameterTypes = org.springframework.core.env.PropertySources.class)}
)
@TypeHint(types = org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration.class,
methods = {
@MethodHint(name = "")
, @MethodHint(name = "propertySourcesPlaceholderConfigurer")
}
)
@TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean.class,
methods = {@MethodHint(name = "annotation")
, @MethodHint(name = "ignored")
, @MethodHint(name = "ignoredType")
, @MethodHint(name = "name")
, @MethodHint(name = "parameterizedContainer")
, @MethodHint(name = "search")
, @MethodHint(name = "type")
, @MethodHint(name = "value")}
)
@TypeHint(types = org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class,
methods = {
@MethodHint(name = "")
, @MethodHint(name = "loadBalancedRestTemplateInitializerDeprecated", parameterTypes = org.springframework.beans.factory.ObjectProvider.class)
, @MethodHint(name = "loadBalancerRequestFactory", parameterTypes = org.springframework.cloud.client.loadbalancer.LoadBalancerClient.class)
}
)
@TypeHint(types = org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.class,
methods = {
@MethodHint(name = "choose", parameterTypes = java.lang.String.class)
, @MethodHint(name = "choose", parameterTypes = {java.lang.String.class
, org.springframework.cloud.client.loadbalancer.Request.class})
, @MethodHint(name = "execute", parameterTypes = {java.lang.String.class
, org.springframework.cloud.client.ServiceInstance.class
, org.springframework.cloud.client.loadbalancer.LoadBalancerRequest.class})
, @MethodHint(name = "execute", parameterTypes = {java.lang.String.class
, org.springframework.cloud.client.loadbalancer.LoadBalancerRequest.class})
, @MethodHint(name = "reconstructURI", parameterTypes = {org.springframework.cloud.client.ServiceInstance.class
, java.net.URI.class})
}
)
@TypeHint(types = org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class,
methods = {
@MethodHint(name = "", parameterTypes = org.springframework.beans.factory.ObjectProvider.class)
, @MethodHint(name = "loadBalancerClientFactory", parameterTypes = org.springframework.cloud.client.loadbalancer.LoadBalancerClientsProperties.class)
, @MethodHint(name = "zoneConfig", parameterTypes = org.springframework.core.env.Environment.class)
}
)
@TypeHint(types = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class,
methods = {
@MethodHint(name = "getInstance", parameterTypes = java.lang.String.class)
, @MethodHint(name = "getProperties", parameterTypes = java.lang.String.class)
}
)
@TypeHint(types = org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration.class,
methods = {
@MethodHint(name = "")
, @MethodHint(name = "blockingLoadBalancerClient", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class)
, @MethodHint(name = "loadBalancerServiceInstanceCookieTransformer", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class)
, @MethodHint(name = "xForwarderHeadersTransformer", parameterTypes = org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class)
}
)
@TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnBean.class,
methods = {@MethodHint(name = "annotation")
, @MethodHint(name = "name")
, @MethodHint(name = "parameterizedContainer")
, @MethodHint(name = "search")
, @MethodHint(name = "type")
, @MethodHint(name = "value")}
)
@TypeHint(types = org.springframework.boot.autoconfigure.condition.ConditionalOnBean.class,
methods = {@MethodHint(name = "annotation")
, @MethodHint(name = "name")
, @MethodHint(name = "parameterizedContainer")
, @MethodHint(name = "search")
, @MethodHint(name = "type")
, @MethodHint(name = "value")}
)
@InitializationHint(types = {
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration.class
, org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration.class
, org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory.class
, org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.class
}, initTime = InitializationTime.BUILD)
@TypeHint(typeNames = "com.example.loadbalancerclient.config.CustomServiceInstanceListSupplier")
but i get error when try a rest test ,and i have no idea to fix,so is there any certain result for support resttemplate with eureka
need help @OlgaMaciaszek
2022-05-06 11:33:42.081 ERROR 11513 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for custom-test-service] with root cause
java.lang.IllegalStateException: No instances available for custom-test-service
at org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient.execute(BlockingLoadBalancerClient.java:84) ~[loadbalancer-client-blocking:3.1.1]
at org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor.intercept(LoadBalancerInterceptor.java:56) ~[na:na]
at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) ~[na:na]
at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:77) ~[na:na]
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) ~[na:na]
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:66) ~[na:na]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:776)
change to webclient instead of resttemplate
I get same error,
WARN 2022-05-07 10:48:31.276 [speed4j.hlw.app [http-nio-8090-exec-3] WARN [http-nio-8090-exec-3] o.s.c.c.l.r.ReactorLoadBalancerExchangeFilterFunction - LoadBalancer does not contain an instance for the service ims-param-basics
DEBUG 2022-05-07 10:48:31.277 [speed4j.hlw.app [http-nio-8090-exec-3] DEBUG [http-nio-8090-exec-3] o.s.core.codec.ByteArrayDecoder - Read 74 bytes
org.springframework.web.reactive.function.client.WebClientResponseException$ServiceUnavailable: 503 Service Unavailable from UNKNOWN
Spring Native is now superseded by Spring Boot 3 official native support, see the related reference documentation for more details.
As a consequence, I am closing this issue, and recommend trying your use case with latest Spring Boot 3 version. If you still experience the issue reported here, please open an issue directly on the related Spring project (Spring Framework, Data, Security, Boot, Cloud, etc.) with a reproducer.
Thanks for your contribution on the experimental Spring Native project, we hope you will enjoy the official native support introduced by Spring Boot 3.