Coder Social home page Coder Social logo

spring-cloud-openfeign's Introduction

Build

Features

  • Declarative REST Client: Feign creates a dynamic implementation of an interface decorated with JAX-RS or Spring MVC annotations

Building

Basic Compile and Test

To build the source you will need to install JDK 17.

Spring Cloud uses Maven for most build-related activities, and you should be able to get off the ground quite quickly by cloning the project you are interested in and typing

$ ./mvnw install
Note
You can also install Maven (>=3.3.3) yourself and run the mvn command in place of ./mvnw in the examples below. If you do that you also might need to add -P spring if your local Maven settings do not contain repository declarations for spring pre-release artifacts.
Note
Be aware that you might need to increase the amount of memory available to Maven by setting a MAVEN_OPTS environment variable with a value like -Xmx512m -XX:MaxPermSize=128m. We try to cover this in the .mvn configuration, so if you find you have to do it to make a build succeed, please raise a ticket to get the settings added to source control.

The projects that require middleware (i.e. Redis) for testing generally require that a local instance of [Docker](https://www.docker.com/get-started) is installed and running.

Documentation

The spring-cloud-build module has a "docs" profile, and if you switch that on it will try to build asciidoc sources using Antora from modules/ROOT/.

As part of that process it will look for a docs/src/main/asciidoc/README.adoc and process it by loading all the includes, but not parsing or rendering it, just copying it to ${main.basedir} (defaults to ${basedir}, i.e. the root of the project). If there are any changes in the README it will then show up after a Maven build as a modified file in the correct place. Just commit it and push the change.

Working with the code

If you don’t have an IDE preference we would recommend that you use Spring Tools Suite or Eclipse when working with the code. We use the m2eclipse eclipse plugin for maven support. Other IDEs and tools should also work without issue as long as they use Maven 3.3.3 or better.

Activate the Spring Maven profile

Spring Cloud projects require the 'spring' Maven profile to be activated to resolve the spring milestone and snapshot repositories. Use your preferred IDE to set this profile to be active, or you may experience build errors.

Importing into eclipse with m2eclipse

We recommend the m2eclipse eclipse plugin when working with eclipse. If you don’t already have m2eclipse installed it is available from the "eclipse marketplace".

Note
Older versions of m2e do not support Maven 3.3, so once the projects are imported into Eclipse you will also need to tell m2eclipse to use the right profile for the projects. If you see many different errors related to the POMs in the projects, check that you have an up to date installation. If you can’t upgrade m2e, add the "spring" profile to your settings.xml. Alternatively you can copy the repository settings from the "spring" profile of the parent pom into your settings.xml.

Importing into eclipse without m2eclipse

If you prefer not to use m2eclipse you can generate eclipse project metadata using the following command:

$ ./mvnw eclipse:eclipse

The generated eclipse projects can be imported by selecting import existing projects from the file menu.

Contributing

Note
Spring Cloud is released under the non-restrictive Apache 2.0 license. If you would like to contribute to this section of the documentation or if you find an error, please find the source code and issue trackers in the project at {github-project}[github].

License

The project license file is available here.

spring-cloud-openfeign's People

Contributors

aloren avatar bijukunjummen avatar brenuart avatar bslota avatar cbezmen avatar cdupuis avatar daniellavoie avatar dependabot[bot] avatar eacdy avatar galaxy-sea avatar gzurowski avatar holy12345 avatar jebeaudet avatar jkschneider avatar jmnarloch avatar kennysoft avatar lowzj avatar marcingrzejszczak avatar matt62king avatar mbenson avatar nkonev avatar olgamaciaszek avatar philwebb avatar royclarkson avatar ryanjbaxter avatar spencergibb avatar spring-builds avatar syemon avatar tcharl avatar vanroy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-cloud-openfeign's Issues

Support @MatrixVariable in Feign

If I have a method defined as:

@RequestMapping(value = "/api/events{matrixParam:.*}", method = RequestMethod.GET)
EventList getEvents(@MatrixVariable(pathVar = "matrixParam") Map<String, List<String>> matrixParams)

When I try to call this I get the exception

java.lang.IllegalArgumentException: Illegal character in path at index 35: http://mio-event-service/api/events{matrixParam:.*}
    at java.net.URI.create(URI.java:859)

Which implies that matrix parameters aren't supported. The RequestMapping definating works fine in the severing web app though.

Any ideas?

Thanks

@PathVariable is not getting interpolated if the variable is null

@RequestMapping(value = "/items/{id}", method = RequestMethod.PUT)
  ItemResponse updateItem(@PathVariable("id") final Integer id, ItemRequest request);

FeignClient is not throwing any Null pointer exception or Errors when id is null while invoking the above feign client method; it simply send a string {id} to the service, instead of trying to interpolate and fail. This is very misleading IMHO.

My server side was a spring boot app and it had the similar configuration for the PUT endpoint and it went to a http500 with the following exception.
java.lang.NumberFormatException: For input string: "{id}"

When i use openfeign, Spring boot can't be started.

Question

I use spring boot and spring cloud open feign to call rest service. After i change spring "spring-cloud-starter-feign" to "spring-cloud-starter-openfeign", Spring boot start errors.

Bug report

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.IllegalArgumentException: Cannot find class [org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration]
at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:287)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:176)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:102)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:68)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:121)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:68)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:337)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at ext.huawei.pms.specialtopic.InsightApplication.main(InsightApplication.java:31)
... 5 more
Caused by: java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:151)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:284)
... 17 more

This is my POM:

org.springframework.boot spring-boot-starter-parent 1.4.2.RELEASE
<!-- feign jar 
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-feign</artifactId>
		<version>1.1.5.RELEASE</version>
	</dependency>-->
	
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
	    <version>1.4.3.RELEASE</version>
	</dependency>
    <dependency>
        <groupId>io.github.openfeign.form</groupId>
        <artifactId>feign-form-spring</artifactId>
        <version>3.2.2</version>
    </dependency>

when Feign Service is closing,throwing a exception:BeanCreationNotAllowedException

when I use STS develop a Feign-Service,if I do what it is a run-as Spring-boot-App。the console will show a error this it is a exception:
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
but I do what it is a run-as Java Application,the error is nothing.
I don't understand what the reason is.,please help me

spring-cloud-starter-openfeign not spring-cloud-openfeign-core dependency

i use spring-cloud-starter-openfeign 2.0.0.m2 version

but i not found spring-cloud-openfeign-core dependency

mvn dependency:tree

[INFO] +- org.springframework.cloud:spring-cloud-starter-openfeign:jar:2.0.0.M2:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-starter:jar:2.0.0.M9:compile
[INFO] |  |  +- org.springframework.cloud:spring-cloud-context:jar:2.0.0.M9:compile
[INFO] |  |  \- org.springframework.security:spring-security-rsa:jar:1.0.5.RELEASE:compile
[INFO] |  |     \- org.bouncycastle:bcpkix-jdk15on:jar:1.56:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-netflix-core:jar:2.0.0.M8:compile
[INFO] |  +- org.springframework.cloud:spring-cloud-commons:jar:2.0.0.M9:compile
[INFO] |  |  +- org.springframework.security:spring-security-crypto:jar:5.0.3.RELEASE:compile
[INFO] |  |  \- org.apache.httpcomponents:httpclient:jar:4.5.5:compile
[INFO] |  |     \- org.apache.httpcomponents:httpcore:jar:4.4.9:compile
[INFO] |  +- io.github.openfeign:feign-core:jar:9.5.1:compile
[INFO] |  +- io.github.openfeign:feign-slf4j:jar:9.5.1:compile
[INFO] |  +- io.github.openfeign:feign-hystrix:jar:9.5.1:compile
[INFO] |  |  +- com.netflix.archaius:archaius-core:jar:0.7.5:compile
[INFO] |  |  |  \- com.google.code.findbugs:jsr305:jar:3.0.1:runtime
[INFO] |  |  \- com.netflix.hystrix:hystrix-core:jar:1.5.12:compile

spring-cloud-starter-openfeign's pom.xml

<parent>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-netflix</artifactId>
		<version>2.0.0.M2</version>
	</parent>
	<artifactId>spring-cloud-starter-openfeign</artifactId>
	<name>Spring Cloud Starter OpenFeign</name>
	<description>Spring Cloud Starter OpenFeign</description>
	<url>https://projects.spring.io/spring-cloud</url>
	<organization>
		<name>Pivotal Software, Inc.</name>
		<url>https://www.spring.io</url>
	</organization>
	<properties>
		<main.basedir>${basedir}/../../..</main.basedir>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-netflix-core</artifactId>
		</dependency>
  ...

Issues with @EnableFeignClients(basePackages) scanning in Spring cloud version Finchley.RC1

Hi;
I'm getting issue with @enablefeignclients(basePackages) scanning in Spring cloud version Finchley.RC1;

Getting runtime exception saying that beans are not registered, Basically @enablefeignclients(basePackages = {"com.xxx.aa", "com.yyy.bb"}) are not scanning the packages and beans not getting registered.I'm getting base package beans classes from dependency artifacts.

It will great help if you guys provide a feasible solution or let us know in which version this issues can be solved.

The above issue used to work in spring cloud version 'Finchley.M5' before spring cmade have changes in feign client.

Thanks
Ravi

Feign: use parameter name as default for @PathVariable

The Feign integration currently requires explicitly specifying the name of an @PathVariable. Since interfaces will usually use the same identifier in the URI template and the method signature, it would be convenient to support MVC's behavior of defaulting the @PathVariable (and @RequestParam) template variables to the parameter name.

Error creating bean with name 'traceFeignObjectWrapper' without ribbon dependency

Question

I want to use spring-cloud-openfeign (Finchley.RC1) without ribbon and hystrix。so I exclude this dependency

 configurations {
        all.collect { configuration ->
            configuration.exclude group: 'org.springframework.cloud', module: 'spring-cloud-netflix-ribbon'
            configuration.exclude group: 'org.springframework.cloud', module: 'spring-cloud-netflix-archaius'
            configuration.exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-netflix-ribbon'
            configuration.exclude group: 'org.springframework.cloud', module: 'spring-cloud-starter-netflix-archaius'
            configuration.exclude group: 'io.github.openfeign', module: 'feign-hystrix'
        }
    }

and with follow exception

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'traceFeignObjectWrapper' defined in class path resource [org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignClientAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignObjectWrapper] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:556) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.1.RELEASE.jar:2.0.1.RELEASE]
	at com.antfin.pipe.business.huoban.Application.main(Application.java:34) [main/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_102]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.0.1.RELEASE.jar:2.0.1.RELEASE]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignObjectWrapper] from ClassLoader [sun.misc.Launcher$AppClassLoader@2a139a55]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:659) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:519) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.buildLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:207) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.findLifecycleMetadata(InitDestroyAnnotationBeanPostProcessor.java:188) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(InitDestroyAnnotationBeanPostProcessor.java:127) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:297) ~[spring-context-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1016) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	... 20 common frames omitted
Caused by: java.lang.NoClassDefFoundError: org/springframework/cloud/netflix/ribbon/SpringClientFactory
	at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_102]
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_102]
	at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_102]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.5.RELEASE.jar:5.0.5.RELEASE]
	... 27 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.springframework.cloud.netflix.ribbon.SpringClientFactory
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_102]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_102]
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[na:1.8.0_102]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_102]
	... 31 common frames omitted

Could not be found @FeignClient

org.springframework.cloud spring-cloud-starter-openfeign

In the spring cloud 2.0.0.M9, the annotation of '@FeignClient' could not be found.

Expected authority at index 7: http://

Unable to construct URI from @FeignClient annotation.

@FeignClient("avantgarde-security")
interface AuthenticationClient {
@PostMapping
fun authenticate(@RequestBody request: AuthenticationRequest): Token
}

java.lang.IllegalArgumentException: Expected authority at index 7: http://
at java.net.URI.create(URI.java:852) ~[na:1.8.0_152]
at org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient.cleanUrl(LoadBalancerFeignClient.java:100) ~[spring-cloud-openfeign-core-2.0.0.M1.jar:2.0.0.M1]
at org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient.execute(LoadBalancerFeignClient.java:58) ~[spring-cloud-openfeign-core-2.0.0.M1.jar:2.0.0.M1]
at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:97) ~[feign-core-9.5.1.jar:na]
at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-9.5.1.jar:na]
at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103) ~[feign-core-9.5.1.jar:na]

org.springframework.cloud:spring-cloud-starter-openfeign:2.0.0.M1

Dynamically set Content-Type via @RequestHeader

I want to set the Content-Type header programatically. When I try this happens:

Caused by: feign.codec.EncodeException: Invalid mime type "{Content-Type}": does not contain '/'
	at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:346)
	at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:213)
	at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:72)
	at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:108)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:301)
	at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:297)
	at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
	... 27 common frames omitted
Caused by: org.springframework.http.InvalidMediaTypeException: Invalid mime type "{Content-Type}": does not contain '/'
	at org.springframework.http.MediaType.parseMediaType(MediaType.java:425)
	at org.springframework.http.MediaType.valueOf(MediaType.java:410)
	at org.springframework.cloud.netflix.feign.support.SpringEncoder.encode(SpringEncoder.java:64)
	at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:342)
	... 33 common frames omitted
Caused by: org.springframework.util.InvalidMimeTypeException: Invalid mime type "{Content-Type}": does not contain '/'
	at org.springframework.util.MimeTypeUtils.parseMimeType(MimeTypeUtils.java:239)
	at org.springframework.http.MediaType.parseMediaType(MediaType.java:422)
	... 36 common frames omitted
@FeignClient("x")
public interface XClient {
	@RequestMapping(value = "/api/something/{id}", method = POST)
	void x(@RequestHeader("Content-Type") String contentType, @PathVariable("id") Integer id,
		@RequestBody InputStream inputStream);
}

I ended up having to set a X-Content-Type2 header and setting up one of these:

@Bean
public RequestInterceptor contentTypeFilter() {
	return (req) -> {
		req.header("Content-Type", req.headers().get("X-Content-Type2").iterator().next());
	};
}

I am using:
spring-cloud-netflix-core-1.2.5.RELEASE.jar

Support AbstractLoadBalancerAwareClient.customizeLoadBalancerCommandBuilder

I want extend AbstractLoadBalancerAwareClient.customizeLoadBalancerCommandBuilder.but the Spring Cloud not supply the way.I have two idea.

  • First, All subclass of AbstractLoadBalancerAwareClient extend from a new class and implement customizeLoadBalancerCommandBuilder, the method collect all of custom implementation to support requirement.
  • Another, the Spring Cloud Openfeign add SpringLoadBalancerFactory interface to support custom FeignLoadBalancer.

Feign doesn't support regexp in request mapping

If I use interface

public interface UserAPI {
  @RequestMapping(method = GET, path = "/user/{username:[a-z@A-Z\\d\\.-_]+}"
  UserDTO getUserByUsername();
}

And want to create client as

@FeignClient("service")
public interface UserClient extends UserAPI{}

it won't work because feign thinks that pattern is part of path. It's even more impressive if you want to use pattern like .+

Feign client doesn't serialize java.time.LocalDate's correctly

I filed this issue at Spring first and they redirected me here. But I'm expecting you guys to rebuff me as well and argue this issue is caused by some bad Spring cloud integration...

I'm using Spring boot 1.3.6, Spring Cloud Brixton.SR3, Java 1.8.
It is no longer possible to use a Feign client accepting a java.time.LocalDate as a method param where it is supposed to comply with a given format like @DateTimeFormat(iso = ISO.DATE).

If you do, you get a java.time.format.DateTimeParseException: Text '7/11/16' could not be parsed at index 0", where it's clear the serialization format is NOT the requested ISO-8601 uuuu-MM-dd but M/d/uu. I put the whole stacktrace below.

I made a stripped project to reproduce the issue: https://github.com/fabmars/feign-localdate-bug
Just import, run ApplicationServer, ApplicationClient, they are supposed to query a local eureka server, and hit http://localhost:8080/bug

It's worth noticing that LocalDate's used to be serialized correctly back in spring-cloud-netflix:1.0.7, you may even try it in my example project. So there is a strong suspiscion there is a regression since spring-cloud-netflix:1.1.0 at least (before Brixton, even).

2016-07-11 21:48:32.838 ERROR 9398 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.netflix.hystrix.exception.HystrixRuntimeException: getTomorrow failed and no fallback available.] with root cause

feign.FeignException: status 400 reading TimeClient#getTomorrow(LocalDate,String); content:
{"timestamp":1468266512745,"status":400,"error":"Bad Request","exception":"org.springframework.web.method.annotation.MethodArgumentTypeMismatchException","message":"Failed to convert value of type [java.lang.String] to required type [java.time.LocalDate]; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] for value '7/11/16'; nested exception is java.time.format.DateTimeParseException: Text '7/11/16' could not be parsed at index 0","path":"/tomorrow"}
    at feign.FeignException.errorStatus(FeignException.java:62) ~[feign-core-8.16.2.jar:8.16.2]
    at feign.codec.ErrorDecoder$Default.decode(ErrorDecoder.java:91) ~[feign-core-8.16.2.jar:8.16.2]
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:134) ~[feign-core-8.16.2.jar:8.16.2]
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) ~[feign-core-8.16.2.jar:8.16.2]
    at feign.hystrix.HystrixInvocationHandler$1.run(HystrixInvocationHandler.java:97) ~[feign-hystrix-8.16.2.jar:8.16.2]
    at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:293) ~[hystrix-core-1.5.3.jar:1.5.3]
    at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:289) ~[hystrix-core-1.5.3.jar:1.5.3]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.Observable.unsafeSubscribe(Observable.java:8460) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.Observable.unsafeSubscribe(Observable.java:8460) ~[rxjava-1.1.5.jar:1.1.5]
    at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94) ~[rxjava-1.1.5.jar:1.1.5]
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) ~[hystrix-core-1.5.3.jar:1.5.3]
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) ~[hystrix-core-1.5.3.jar:1.5.3]
    at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) ~[hystrix-core-1.5.3.jar:1.5.3]
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[rxjava-1.1.5.jar:1.1.5]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_72]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_72]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_72]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_72]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_72]

Provide an attribute to ignore certain exceptions for Feign Hystrix support

The @FeignClient annotation has an attribute fallback, named appropriately. It'd be nice to have an attribute Class<? extends Throwable>[] ignoreExceptions() default {} that doesn't open the circuit for the exceptions listed. Currently, the workaround is to disable feign support (feign.hystrix.enabled=false will do it globally) and annotate the caller of the feign client with com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand. This is more code to implement what I assume is a common use case.
Also, if any ErrorDocoder is present, ignoreExceptions should honor it, that is give the decoder a chance to translate HTTP status code to exceptions.

See the SO thread here for background.

How to get the Hystrix Execution Exception for Feign without provide my own fallback class?

I use Spring Cloud Feign with Hystrix.
Now, I want to get the com.netflix.hystrix.AbstractCommand#getExecutionException for Feign.

After diving into the code, I find feign.hystrix.FallbackFactory.Default. This is the default fallbackFactory.

But we must use @FeignClient(fallback = xx.class) to use feign.hystrix.FallbackFactory.Default.

The refered code is feign.hystrix.HystrixFeign.Builder#target(feign.Target<T>, T) , like below:

public <T> T target(Target<T> target, T fallback) {
	return build(fallback != null ? new FallbackFactory.Default<T>(fallback) : null)
	.newInstance(target);
}

This code is called by org.springframework.cloud.netflix.feign.HystrixTargeter#targetWithFallback , like below:

private <T> T targetWithFallback(String feignClientName, FeignContext context,
									 Target.HardCodedTarget<T> target,
									 HystrixFeign.Builder builder, Class<?> fallback) {
		T fallbackInstance = getFromContext("fallback", feignClientName, context, fallback, target.type());
		return builder.target(target, fallbackInstance);
	}

And targetWithFallback method is called by org.springframework.cloud.netflix.feign.HystrixTargeter#target , like below:

@Override
	public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign, FeignContext context,
						Target.HardCodedTarget<T> target) {
		if (!(feign instanceof feign.hystrix.HystrixFeign.Builder)) {
			return feign.target(target);
		}
		feign.hystrix.HystrixFeign.Builder builder = (feign.hystrix.HystrixFeign.Builder) feign;
		SetterFactory setterFactory = getOptional(factory.getName(), context,
			SetterFactory.class);
		if (setterFactory != null) {
			builder.setterFactory(setterFactory);
		}
		Class<?> fallback = factory.getFallback();
		if (fallback != void.class) {
			return targetWithFallback(factory.getName(), context, target, builder, fallback);
		}
		Class<?> fallbackFactory = factory.getFallbackFactory();
		if (fallbackFactory != void.class) {
			return targetWithFallbackFactory(factory.getName(), context, target, builder, fallbackFactory);
		}

		return feign.target(target);
	}

I just want to get the cause of fallback, I don't want to provide my own fallback class nor fallbackFactory class.

Is there any way to achieve ?

Add support for HATEOAS Resources in @FeignClient

A Feign client doesn't seem to get the same autoconfiguration love as a RestTemplate because with RestTemplate I can pull down a remote PagedResources<Resource<Message>> but not with a @FeignClient. The HATEOS library configures any RestTemplate beans it finds, but it doesn't know about HttpMessageConverters, which is where Spring Cloud is getting its converters from

Ability to configure Target implementation used by FeignClientFactoryBean

We have a few use cases where a custom Target implementation would be necessary to gain access to the Request to add a header. We found that using the feign.RequestInterceptor had a short coming in that it does not expose the target url that is either load balanced to or hard coded until after the apply is executed line 164 in the SynchronousMethodHandler. We are requiring the full URL in order to generate an OAuth 1.0a secured request to populate the Authorization header. We were able to work around this issue by using the Feign builder with a custom implementation of Target (see https://github.com/Netflix/feign#multiple-interfaces) explicitly instead of the annotation + FeignClientFactoryBean. I am not completely familiar with the FeignClientFactoryBean but it does appear that it could expose an additional autowired bean for the target to use but I might be over looking a different approach. I found a conversation on the feign github that is similar OpenFeign/feign#214.

FeignClient request parameters not encoded as expected

Just converted some code from using feign directly and I am seeing a difference in the url created that the server is rejecting.

Using feign to define the client:

@RequestLine("GET /calendar/events?zonedDateTime={zonedDateTime}")
List<Event> getEvents(@Param("zonedDateTime") ZonedDateTime zonedDateTime);

The date in the request is formatted
?zonedDateTime=2017-09-19T13:08:00.014%2B03:00[Europe/Athens]

Whereas using @FeignClient to define it:

@RequestMapping(method = RequestMethod.GET, value = "/calendar/events")
List<Event> getEvents(@RequestParam("zonedDateTime") ZonedDateTime zonedDateTime);

The date in the request is formatted
?zonedDateTime=2017-09-19T13:08:00.014+03:00[Europe/Athens]

The plus in the offset was encode by feign's @Param but not when using @RequestParam.

Add support to disable parent context inheritance on Feign clients.

For things such as RequestInterceptors and MessageConverters, it is difficult to have a custom feign client configuration that includes only an specific set of interceptors and converters. This makes it harder to implement one-off clients that communicate with third party services that use extraneous APIs. I'd be great if we had a configuration that would disallow inheritance from the parent context.

For example. using the client and configuration below, only a single interceptor would be available to this client regardless of any interceptors registered globally(e.g. via the parent context)

@FeignClient(name = "fancy.client", configuration = FancyClientConfig.class, inheritParentContext = false )
public interface FancyRestClient {
    @RequestMapping(path = "/fancypath",
            method = GET,
            consumes = MediaType.APPLICATION_JSON_VALUE)
    FancyDTO getFancyDto();
}
@Configuration
public class FancyClientConfig {

    @Bean
    public RequestInterceptor FancyInterceptor(){
        return new FancyInterceptor();
    }

}

spring-cloud-feign : @RequestHeader with null value set templated name as value

Hi,

I'm facing an issue about @RequestHeader request parameter with SpringMVCContract. Here is my feign client service :

    @RequestMapping(method = RequestMethod.GET 
                    , value = "/{param1}/{param2}"
                    , produces = { "application/json" } 
                   )
    ResponseEntity<MyResponsePojo> myResource(@PathVariable("param1")  String param1, @PathVariable("param2")  String param2, @RequestHeader(name="my-header-specified")  String myHeaderSpecified);

And my test method which call my feign client

@Test(expected=HystrixBadRequestException.class)
public void should_throw_an_hystrix_bad_request(){
	
	//given
	ResponseEntity<MyResponsePojo> response = myFeignClient.myResource("noComptePayeur", "noReference", null);
}

When I look the log of the mock which receives the request, I see that my-header-specified is set with the templated name whereas I expect either it set no value or doesn't set the 'my-header-specified' header. '

2017-01-06 10:29:32.850 INFO [1250212479@qtp-1103243338-3] WireMock - Request received:
GET /noComptePayeur/noReference HTTP/1.1
Accept: application/json
my-header-specified: {my-header-specified}
User-Agent: Java/1.8.0_72
Host: localhost:3222
Connection: keep-alive

Even If I set , required=false, defaultValue="" as attribute value to my @RequestHeader it doesn't fix it.

After some investigation I noticed in ReflectiveFeign$BuildTemplateByResolvingArgs class the method 'create' simply ignores null values

Override
public RequestTemplate create(Object[] argv) {
RequestTemplate mutable = new RequestTemplate(metadata.template());
...
Map<String, Object> varBuilder = new LinkedHashMap<String, Object>();
for (Entry<Integer, Collection> entry : metadata.indexToName().entrySet()) {
int i = entry.getKey();
Object value = argv[entry.getKey()];
if (value != null) { // Null values are skipped.
if (indexToExpander.containsKey(i)) {
value = expandElements(indexToExpander.get(i), value);
}
for (String name : entry.getValue()) {
varBuilder.put(name, value);
}
}
}
...

The problem is the class RequestHeaderParameterProcessor which process @RequestHeader set the data template header with templated name automatically

@OverRide
public boolean processArgument(AnnotatedParameterContext context, Annotation annotation) {
...
context.setParameterName(name);

    MethodMetadata data = context.getMethodMetadata();
    Collection<String> header = context.setTemplateParameter(name, data.template().headers().get(name));
    data.template().header(name, header);
    return true;
}

So when create method is called it see there is a no value and doesn't try to resolve it. So the templated name is kept.

Do you know any workaround ?

Thanks
Regards

Implement Feign ErrorDecoder that is aware of spring HttpClientErrorException and HttpServerErrorException

In our consumption of feign we ran into an issue where we need access to the response status code and response body associated to a client error. We have implemented the following ErrorDecoder implementation in our code base and wanted to share it with the community. It seems like others that are familiar with spring RestOperations are accustom to HttpClientErrorException and HttpServerErrorException exception trees versus the stripped down FeignException. The only concern with the implementation below is how to handle the response body if an exception where to happen during the copying process from feign response to a given instance of spring HttpStatusCodeException:

public class SpringWebClientErrorDecoder implements ErrorDecoder {

    private ErrorDecoder delegate = new ErrorDecoder.Default();

    @Override
    public Exception decode(String methodKey, Response response) {
        HttpHeaders responseHeaders = new HttpHeaders();
        response.headers().entrySet().stream()
                .forEach(entry -> responseHeaders.put(entry.getKey(), new ArrayList<>(entry.getValue())));

        HttpStatus statusCode = HttpStatus.valueOf(response.status());
        String statusText = response.reason();

        byte[] responseBody;
        try {
            responseBody = IOUtils.toByteArray(response.body().asInputStream());
        } catch (IOException e) {
            throw new RuntimeException("Failed to process response body.", e);
        }

        if (response.status() >= 400 && response.status() <= 499) {
            return new HttpClientErrorException(statusCode, statusText, responseHeaders, responseBody, null);
        }

        if (response.status() >= 500 && response.status() <= 599) {
            return new HttpServerErrorException(statusCode, statusText, responseHeaders, responseBody, null);
        }
        return delegate.decode(methodKey, response);
    }
}

can not start

"C:\Program Files\Java\jdk1.8.0_162\bin\java" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\lib\idea_rt.jar=50577:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_162\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_162\jre\lib\rt.jar;E:\git\welianGit\microservice-framework\framework-ms-base\target\test-classes;E:\git\welianGit\microservice-framework\framework-ms-base\target\classes;E:\git\welianGit\microservice-framework\framework-springboot-base\target\classes;E:\git\welianGit\microservice-framework\framework-kafka\target\classes;E:\git\welianGit\microservice-framework\framework-common\target\classes;C:\Users\Administrator.m2\repository\com\googlecode\juniversalchardet\juniversalchardet\1.0.3\juniversalchardet-1.0.3.jar;C:\Users\Administrator.m2\repository\com\google\code\gson\gson\2.8.2\gson-2.8.2.jar;C:\Users\Administrator.m2\repository\joda-time\joda-time\2.9.9\joda-time-2.9.9.jar;C:\Users\Administrator.m2\repository\org\springframework\kafka\spring-kafka\2.1.4.RELEASE\spring-kafka-2.1.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-messaging\5.0.4.RELEASE\spring-messaging-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\retry\spring-retry\1.2.2.RELEASE\spring-retry-1.2.2.RELEASE.jar;C:\Users\Administrator.m2\repository\org\apache\kafka\kafka-clients\1.0.0\kafka-clients-1.0.0.jar;C:\Users\Administrator.m2\repository\org\lz4\lz4-java\1.4\lz4-java-1.4.jar;C:\Users\Administrator.m2\repository\org\xerial\snappy\snappy-java\1.1.4\snappy-java-1.1.4.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.0.RELEASE\spring-boot-starter-web-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.0.RELEASE\spring-boot-starter-json-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.3\jackson-datatype-jdk8-2.9.3.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.3\jackson-module-parameter-names-2.9.3.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.0.RELEASE\spring-boot-starter-tomcat-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.28\tomcat-embed-core-8.5.28.jar;C:\Users\Administrator.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.28\tomcat-embed-el-8.5.28.jar;C:\Users\Administrator.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.28\tomcat-embed-websocket-8.5.28.jar;C:\Users\Administrator.m2\repository\org\hibernate\validator\hibernate-validator\6.0.7.Final\hibernate-validator-6.0.7.Final.jar;C:\Users\Administrator.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Administrator.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Administrator.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-webmvc\5.0.4.RELEASE\spring-webmvc-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-expression\5.0.4.RELEASE\spring-expression-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.0.RELEASE\spring-boot-starter-aop-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-aop\5.0.4.RELEASE\spring-aop-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-freemarker\2.0.0.RELEASE\spring-boot-starter-freemarker-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\freemarker\freemarker\2.3.27-incubating\freemarker-2.3.27-incubating.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-context-support\5.0.4.RELEASE\spring-context-support-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-data-redis\2.0.0.RELEASE\spring-boot-starter-data-redis-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\data\spring-data-redis\2.0.5.RELEASE\spring-data-redis-2.0.5.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\data\spring-data-keyvalue\2.0.5.RELEASE\spring-data-keyvalue-2.0.5.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\data\spring-data-commons\2.0.5.RELEASE\spring-data-commons-2.0.5.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-oxm\5.0.4.RELEASE\spring-oxm-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\io\lettuce\lettuce-core\5.0.2.RELEASE\lettuce-core-5.0.2.RELEASE.jar;C:\Users\Administrator.m2\repository\io\projectreactor\reactor-core\3.1.5.RELEASE\reactor-core-3.1.5.RELEASE.jar;C:\Users\Administrator.m2\repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;C:\Users\Administrator.m2\repository\io\netty\netty-common\4.1.22.Final\netty-common-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\io\netty\netty-transport\4.1.22.Final\netty-transport-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\io\netty\netty-buffer\4.1.22.Final\netty-buffer-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\io\netty\netty-resolver\4.1.22.Final\netty-resolver-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\io\netty\netty-handler\4.1.22.Final\netty-handler-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\io\netty\netty-codec\4.1.22.Final\netty-codec-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.0.0-SNAPSHOT\mybatis-spring-boot-starter-2.0.0-20180306.174427-203.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.0.RELEASE\spring-boot-starter-jdbc-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\com\zaxxer\HikariCP\2.7.8\HikariCP-2.7.8.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-jdbc\5.0.4.RELEASE\spring-jdbc-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.0.0-SNAPSHOT\mybatis-spring-boot-autoconfigure-2.0.0-20180306.174425-203.jar;C:\Users\Administrator.m2\repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;C:\Users\Administrator.m2\repository\org\mybatis\mybatis-spring\2.0.0-SNAPSHOT\mybatis-spring-2.0.0-20180305.144035-57.jar;C:\Users\Administrator.m2\repository\mysql\mysql-connector-java\5.1.45\mysql-connector-java-5.1.45.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-zipkin\2.0.0.M7\spring-cloud-starter-zipkin-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-sleuth\2.0.0.M7\spring-cloud-starter-sleuth-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-sleuth-core\2.0.0.M7\spring-cloud-sleuth-core-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\aspectj\aspectjrt\1.8.13\aspectjrt-1.8.13.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave\4.16.1\brave-4.16.1.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave-context-log4j2\4.16.1\brave-context-log4j2-4.16.1.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave-instrumentation-spring-web\4.16.1\brave-instrumentation-spring-web-4.16.1.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave-instrumentation-http\4.16.1\brave-instrumentation-http-4.16.1.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave-instrumentation-spring-webmvc\4.16.1\brave-instrumentation-spring-webmvc-4.16.1.jar;C:\Users\Administrator.m2\repository\io\zipkin\brave\brave-instrumentation-servlet\4.16.1\brave-instrumentation-servlet-4.16.1.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-sleuth-zipkin\2.0.0.M7\spring-cloud-sleuth-zipkin-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\io\zipkin\zipkin2\zipkin\2.5.0\zipkin-2.5.0.jar;C:\Users\Administrator.m2\repository\io\zipkin\reporter2\zipkin-reporter\2.3.3\zipkin-reporter-2.3.3.jar;C:\Users\Administrator.m2\repository\io\zipkin\reporter2\zipkin-sender-kafka11\2.3.3\zipkin-sender-kafka11-2.3.3.jar;C:\Users\Administrator.m2\repository\io\zipkin\reporter2\zipkin-sender-amqp-client\2.3.3\zipkin-sender-amqp-client-2.3.3.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-actuator\2.0.0.RELEASE\spring-boot-starter-actuator-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter\2.0.0.RELEASE\spring-boot-starter-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot\2.0.0.RELEASE\spring-boot-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.0.RELEASE\spring-boot-autoconfigure-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Administrator.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.0.0.RELEASE\spring-boot-actuator-autoconfigure-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-actuator\2.0.0.RELEASE\spring-boot-actuator-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-context\5.0.4.RELEASE\spring-context-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.3\jackson-datatype-jsr310-2.9.3.jar;C:\Users\Administrator.m2\repository\io\micrometer\micrometer-core\1.0.1\micrometer-core-1.0.1.jar;C:\Users\Administrator.m2\repository\org\hdrhistogram\HdrHistogram\2.1.10\HdrHistogram-2.1.10.jar;C:\Users\Administrator.m2\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-eureka-client\2.0.0.M7\spring-cloud-starter-netflix-eureka-client-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter\2.0.0.M8\spring-cloud-starter-2.0.0.M8.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-context\2.0.0.M8\spring-cloud-context-2.0.0.M8.jar;C:\Users\Administrator.m2\repository\org\springframework\security\spring-security-rsa\1.0.5.RELEASE\spring-security-rsa-1.0.5.RELEASE.jar;C:\Users\Administrator.m2\repository\org\bouncycastle\bcpkix-jdk15on\1.56\bcpkix-jdk15on-1.56.jar;C:\Users\Administrator.m2\repository\org\bouncycastle\bcprov-jdk15on\1.56\bcprov-jdk15on-1.56.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-netflix-core\2.0.0.M7\spring-cloud-netflix-core-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-netflix-ribbon\2.0.0.M7\spring-cloud-netflix-ribbon-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-netflix-eureka-client\2.0.0.M7\spring-cloud-netflix-eureka-client-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\com\netflix\eureka\eureka-client\1.8.6\eureka-client-1.8.6.jar;C:\Users\Administrator.m2\repository\org\codehaus\jettison\jettison\1.3.7\jettison-1.3.7.jar;C:\Users\Administrator.m2\repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;C:\Users\Administrator.m2\repository\com\netflix\netflix-commons\netflix-eventbus\0.3.0\netflix-eventbus-0.3.0.jar;C:\Users\Administrator.m2\repository\com\netflix\netflix-commons\netflix-infix\0.3.0\netflix-infix-0.3.0.jar;C:\Users\Administrator.m2\repository\commons-jxpath\commons-jxpath\1.3\commons-jxpath-1.3.jar;C:\Users\Administrator.m2\repository\org\antlr\antlr-runtime\3.4\antlr-runtime-3.4.jar;C:\Users\Administrator.m2\repository\org\antlr\stringtemplate\3.2.1\stringtemplate-3.2.1.jar;C:\Users\Administrator.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;C:\Users\Administrator.m2\repository\org\apache\commons\commons-math\2.2\commons-math-2.2.jar;C:\Users\Administrator.m2\repository\com\netflix\archaius\archaius-core\0.7.5\archaius-core-0.7.5.jar;C:\Users\Administrator.m2\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;C:\Users\Administrator.m2\repository\com\netflix\servo\servo-core\0.10.1\servo-core-0.10.1.jar;C:\Users\Administrator.m2\repository\com\netflix\servo\servo-internal\0.10.1\servo-internal-0.10.1.jar;C:\Users\Administrator.m2\repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;C:\Users\Administrator.m2\repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;C:\Users\Administrator.m2\repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;C:\Users\Administrator.m2\repository\org\apache\httpcomponents\httpclient\4.5.5\httpclient-4.5.5.jar;C:\Users\Administrator.m2\repository\org\apache\httpcomponents\httpcore\4.4.9\httpcore-4.4.9.jar;C:\Users\Administrator.m2\repository\commons-codec\commons-codec\1.11\commons-codec-1.11.jar;C:\Users\Administrator.m2\repository\com\google\inject\guice\4.1.0\guice-4.1.0.jar;C:\Users\Administrator.m2\repository\javax\inject\javax.inject\1\javax.inject-1.jar;C:\Users\Administrator.m2\repository\aopalliance\aopalliance\1.0\aopalliance-1.0.jar;C:\Users\Administrator.m2\repository\com\github\vlsi\compactmap\compactmap\1.2.1\compactmap-1.2.1.jar;C:\Users\Administrator.m2\repository\com\github\andrewoma\dexx\dexx-collections\0.2\dexx-collections-0.2.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.3\jackson-core-2.9.3.jar;C:\Users\Administrator.m2\repository\com\netflix\eureka\eureka-core\1.8.6\eureka-core-1.8.6.jar;C:\Users\Administrator.m2\repository\org\codehaus\woodstox\woodstox-core-asl\4.4.1\woodstox-core-asl-4.4.1.jar;C:\Users\Administrator.m2\repository\javax\xml\stream\stax-api\1.0-2\stax-api-1.0-2.jar;C:\Users\Administrator.m2\repository\org\codehaus\woodstox\stax2-api\3.1.4\stax2-api-3.1.4.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-archaius\2.0.0.M7\spring-cloud-starter-netflix-archaius-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-netflix-archaius\2.0.0.M7\spring-cloud-netflix-archaius-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;C:\Users\Administrator.m2\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;C:\Users\Administrator.m2\repository\com\google\guava\guava\18.0\guava-18.0.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-netflix-ribbon\2.0.0.M7\spring-cloud-starter-netflix-ribbon-2.0.0.M7.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon\2.2.4\ribbon-2.2.4.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon-transport\2.2.4\ribbon-transport-2.2.4.jar;C:\Users\Administrator.m2\repository\io\reactivex\rxnetty-contexts\0.4.9\rxnetty-contexts-0.4.9.jar;C:\Users\Administrator.m2\repository\io\reactivex\rxnetty-servo\0.4.9\rxnetty-servo-0.4.9.jar;C:\Users\Administrator.m2\repository\io\reactivex\rxnetty\0.4.9\rxnetty-0.4.9.jar;C:\Users\Administrator.m2\repository\io\netty\netty-transport-native-unix-common\4.1.22.Final\netty-transport-native-unix-common-4.1.22.Final.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon-core\2.2.4\ribbon-core-2.2.4.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon-httpclient\2.2.4\ribbon-httpclient-2.2.4.jar;C:\Users\Administrator.m2\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;C:\Users\Administrator.m2\repository\com\netflix\netflix-commons\netflix-commons-util\0.1.1\netflix-commons-util-0.1.1.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon-loadbalancer\2.2.4\ribbon-loadbalancer-2.2.4.jar;C:\Users\Administrator.m2\repository\com\netflix\netflix-commons\netflix-statistics\0.1.1\netflix-statistics-0.1.1.jar;C:\Users\Administrator.m2\repository\io\reactivex\rxjava\1.3.6\rxjava-1.3.6.jar;C:\Users\Administrator.m2\repository\com\netflix\ribbon\ribbon-eureka\2.2.4\ribbon-eureka-2.2.4.jar;C:\Users\Administrator.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Administrator.m2\repository\com\thoughtworks\xstream\xstream\1.4.9\xstream-1.4.9.jar;C:\Users\Administrator.m2\repository\xmlpull\xmlpull\1.1.3.1\xmlpull-1.1.3.1.jar;C:\Users\Administrator.m2\repository\xpp3\xpp3_min\1.1.4c\xpp3_min-1.1.4c.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-config\2.0.0.M8\spring-cloud-starter-config-2.0.0.M8.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-config-client\2.0.0.M8\spring-cloud-config-client-2.0.0.M8.jar;C:\Users\Administrator.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.3\jackson-databind-2.9.3.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-starter-openfeign\2.0.0.M1\spring-cloud-starter-openfeign-2.0.0.M1.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-openfeign-core\2.0.0.M1\spring-cloud-openfeign-core-2.0.0.M1.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-web\5.0.4.RELEASE\spring-web-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-beans\5.0.4.RELEASE\spring-beans-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\cloud\spring-cloud-commons\2.0.0.M8\spring-cloud-commons-2.0.0.M8.jar;C:\Users\Administrator.m2\repository\org\springframework\security\spring-security-crypto\5.0.3.RELEASE\spring-security-crypto-5.0.3.RELEASE.jar;C:\Users\Administrator.m2\repository\io\github\openfeign\feign-core\9.5.1\feign-core-9.5.1.jar;C:\Users\Administrator.m2\repository\io\github\openfeign\feign-slf4j\9.5.1\feign-slf4j-9.5.1.jar;C:\Users\Administrator.m2\repository\io\github\openfeign\feign-hystrix\9.5.1\feign-hystrix-9.5.1.jar;C:\Users\Administrator.m2\repository\com\netflix\hystrix\hystrix-core\1.5.12\hystrix-core-1.5.12.jar;C:\Users\Administrator.m2\repository\io\github\openfeign\feign-java8\9.5.1\feign-java8-9.5.1.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.0.RELEASE\spring-boot-starter-logging-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Administrator.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Administrator.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Administrator.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Administrator.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.0.RELEASE\spring-boot-starter-test-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-test\2.0.0.RELEASE\spring-boot-test-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.0.RELEASE\spring-boot-test-autoconfigure-2.0.0.RELEASE.jar;C:\Users\Administrator.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Administrator.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Administrator.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Administrator.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Administrator.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Administrator.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Administrator.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Administrator.m2\repository\net\bytebuddy\byte-buddy\1.7.10\byte-buddy-1.7.10.jar;C:\Users\Administrator.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.10\byte-buddy-agent-1.7.10.jar;C:\Users\Administrator.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Administrator.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Administrator.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Administrator.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Administrator.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-core\5.0.4.RELEASE\spring-core-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-jcl\5.0.4.RELEASE\spring-jcl-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-test\5.0.4.RELEASE\spring-test-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Administrator.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter-test\2.0.0-SNAPSHOT\mybatis-spring-boot-starter-test-2.0.0-20180306.174440-203.jar;C:\Users\Administrator.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-test-autoconfigure\2.0.0-SNAPSHOT\mybatis-spring-boot-test-autoconfigure-2.0.0-20180306.174438-203.jar;C:\Users\Administrator.m2\repository\org\springframework\spring-tx\5.0.4.RELEASE\spring-tx-5.0.4.RELEASE.jar;C:\Users\Administrator.m2\repository\org\databene\contiperf\2.1.0\contiperf-2.1.0.jar" com.welian.client.ApplicationLauncher
00:10:33,987 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
00:10:33,987 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
00:10:33,987 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/git/welianGit/microservice-framework/framework-springboot-base/target/classes/logback.xml]
00:10:34,061 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
00:10:34,066 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@1d16f93d - Adding [file:/E:/git/welianGit/microservice-framework/framework-springboot-base/target/classes/logback/logs-console.xml] to configuration watch list.
00:10:34,069 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@1d16f93d - Adding [jar:file:/C:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot/2.0.0.RELEASE/spring-boot-2.0.0.RELEASE.jar!/org/springframework/boot/logging/logback/defaults.xml] to configuration watch list.
00:10:34,069 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@67b92f0a - URL [jar:file:/C:/Users/Administrator/.m2/repository/org/springframework/boot/spring-boot/2.0.0.RELEASE/spring-boot-2.0.0.RELEASE.jar!/org/springframework/boot/logging/logback/defaults.xml] is not of type file
00:10:34,072 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word clr with class [org.springframework.boot.logging.logback.ColorConverter]
00:10:34,072 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wex with class [org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter]
00:10:34,072 |-INFO in ch.qos.logback.core.joran.action.ConversionRuleAction - registering conversion word wEx with class [org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter]
00:10:34,075 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.catalina.startup.DigesterFactory] to ERROR
00:10:34,075 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.catalina.util.LifecycleBase] to ERROR
00:10:34,075 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.coyote.http11.Http11NioProtocol] to WARN
00:10:34,076 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.sshd.common.util.SecurityUtils] to WARN
00:10:34,076 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.apache.tomcat.util.net.NioSelectorPool] to WARN
00:10:34,076 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.eclipse.jetty.util.component.AbstractLifeCycle] to ERROR
00:10:34,076 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.hibernate.validator.internal.util.Version] to WARN
00:10:34,076 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@1d16f93d - Adding [file:/E:/git/welianGit/microservice-framework/framework-springboot-base/target/classes/logback/logs-pattern.xml] to configuration watch list.
00:10:34,078 |-INFO in ch.qos.logback.core.joran.util.ConfigurationWatchListUtil@1d16f93d - Adding [file:/E:/git/welianGit/microservice-framework/framework-springboot-base/target/classes/logback/console-append.xml] to configuration watch list.
00:10:34,079 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
00:10:34,082 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
00:10:34,155 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - This appender no longer admits a layout as a sub-component, set an encoder instead.
00:10:34,155 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - To ensure compatibility, wrapping your layout in LayoutWrappingEncoder.
00:10:34,155 |-WARN in ch.qos.logback.core.ConsoleAppender[CONSOLE] - See also http://logback.qos.ch/codes.html#layoutInsteadOfEncoder for details
00:10:34,156 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
00:10:34,156 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [CONSOLE] to Logger[ROOT]
00:10:34,157 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
00:10:34,158 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2b9627bc - Registering current configuration as safe fallback point

2018-03-08 00:10:35.578 INFO [account-server,,,] 9844 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@52b1beb6: startup date [Thu Mar 08 00:10:35 CST 2018]; root of context hierarchy
2018-03-08 00:10:35.834 INFO [account-server,,,] 9844 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-03-08 00:10:35.885 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$a705e843] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

. ____ _ __ _ _
/\ / ' __ _ () __ __ _ \ \ \
( ( )_
_ | '_ | '| | ' / ` | \ \ \
\/ )| |)| | | | | || (| | ) ) ) )
' |
| .__|| ||| |_, | / / / /
=========|
|==============|/=////
:: Spring Boot :: (v2.0.0.RELEASE)

2018-03-08 00:10:36.341 INFO [account-server,,,] 9844 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://welian.online:10000
2018-03-08 00:10:37.231 INFO [account-server,,,] 9844 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=account-server, profiles=[default], label=default3.0, version=1818, state=null
2018-03-08 00:10:37.232 INFO [account-server,,,] 9844 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='configService', propertySources=[MapPropertySource {name='configClient'}, MapPropertySource {name='svn://120.26.201.191/config/dev/default3.0/account-server.yml'}, MapPropertySource {name='svn://120.26.201.191/config/dev/default3.0/application.yml'}]}
2018-03-08 00:10:37.250 WARN [account-server,,,] 9844 --- [ main] b.c.PropertySourceBootstrapConfiguration : Logging config file location 'classpath:loginboth.xml' cannot be opened and will be ignored
2018-03-08 00:10:37.256 INFO [account-server,,,] 9844 --- [ main] com.welian.client.ApplicationLauncher : No active profile set, falling back to default profiles: default
2018-03-08 00:10:37.273 INFO [account-server,,,] 9844 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@60dce7ea: startup date [Thu Mar 08 00:10:37 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@52b1beb6
2018-03-08 00:10:37.983 INFO [account-server,,,] 9844 --- [ main] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [springContext.xml]
2018-03-08 00:10:38.357 WARN [account-server,,,] 9844 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.welian.client]' package. Please check your configuration.
2018-03-08 00:10:38.499 INFO [account-server,,,] 9844 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode!
2018-03-08 00:10:38.592 INFO [account-server,,,] 9844 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'environmentWebEndpointExtension' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration; factoryMethodName=environmentWebEndpointExtension; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/actuate/autoconfigure/env/EnvironmentEndpointAutoConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.cloud.autoconfigure.LifecycleMvcEndpointAutoConfiguration$EndpointConfiguration; factoryMethodName=environmentWebEndpointExtension; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/cloud/autoconfigure/LifecycleMvcEndpointAutoConfiguration$EndpointConfiguration.class]]
2018-03-08 00:10:38.893 INFO [account-server,,,] 9844 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'transactionManager' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration$DataSourceTransactionManagerConfiguration; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceTransactionManagerAutoConfiguration$DataSourceTransactionManagerConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=myBatisConfig; factoryMethodName=transactionManager; initMethodName=null; destroyMethodName=(inferred); defined in com.welian.config.MyBatisConfig]
2018-03-08 00:10:38.894 INFO [account-server,,,] 9844 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'stringRedisTemplate' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; factoryMethodName=stringRedisTemplate; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/data/redis/RedisAutoConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=redisConfig; factoryMethodName=stringRedisTemplate; initMethodName=null; destroyMethodName=(inferred); defined in com.welian.config.RedisConfig]
2018-03-08 00:10:38.918 INFO [account-server,,,] 9844 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'dataSource' with a different definition: replacing [Root bean: class [null]; scope=refresh; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=false; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari; factoryMethodName=dataSource; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]] with [Root bean: class [org.springframework.aop.scope.ScopedProxyFactoryBean]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in BeanDefinition defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]]
2018-03-08 00:10:38.996 WARN [account-server,,,] 9844 --- [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.welian.mapper]' package. Please check your configuration.
2018-03-08 00:10:39.002 WARN [account-server,,,] 9844 --- [ main] o.s.c.a.ConfigurationClassPostProcessor : Cannot enhance @configuration bean definition 'myBatisConfig' since its singleton instance has been created too early. The typical cause is a non-static @bean method with a BeanDefinitionRegistryPostProcessor return type: Consider declaring such methods as 'static'.
2018-03-08 00:10:39.342 INFO [account-server,,,] 9844 --- [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=7c490eea-047f-325c-8ea8-2107df19e49b
2018-03-08 00:10:39.385 INFO [account-server,,,] 9844 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-03-08 00:10:39.529 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.kafka.annotation.KafkaBootstrapConfiguration' of type [org.springframework.kafka.annotation.KafkaBootstrapConfiguration$$EnhancerBySpringCGLIB$$5e9df6c9] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:39.655 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:39.656 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:39.673 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.annotation.SleuthAnnotationAutoConfiguration' of type [org.springframework.cloud.sleuth.annotation.SleuthAnnotationAutoConfiguration$$EnhancerBySpringCGLIB$$8d512b78] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:39.879 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sleuthAdvisorConfig' of type [org.springframework.cloud.sleuth.annotation.SleuthAdvisorConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:39.892 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$8aebe546] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:39.982 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$a705e843] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.001 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.log.SleuthLogAutoConfiguration$Slf4jConfiguration' of type [org.springframework.cloud.sleuth.log.SleuthLogAutoConfiguration$Slf4jConfiguration$$EnhancerBySpringCGLIB$$11540c27] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.018 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClientAutoConfiguration$FeignBeanPostProcessorConfiguration' of type [org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClientAutoConfiguration$FeignBeanPostProcessorConfiguration$$EnhancerBySpringCGLIB$$ca7dbe0c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.036 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.instrument.async.AsyncDefaultAutoConfiguration' of type [org.springframework.cloud.sleuth.instrument.async.AsyncDefaultAutoConfiguration$$EnhancerBySpringCGLIB$$72cf9165] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.059 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration$RestTemplateConfig' of type [org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration$RestTemplateConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.070 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.instrument.web.TraceHttpAutoConfiguration' of type [org.springframework.cloud.sleuth.instrument.web.TraceHttpAutoConfiguration$$EnhancerBySpringCGLIB$$7169ee95] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.089 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration' of type [org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration$$EnhancerBySpringCGLIB$$c3e90259] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.116 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.boot.context.properties.ConversionServiceDeducer$Factory' of type [org.springframework.boot.context.properties.ConversionServiceDeducer$Factory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.121 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.sleuth-org.springframework.cloud.sleuth.autoconfig.SleuthProperties' of type [org.springframework.cloud.sleuth.autoconfig.SleuthProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.132 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sleuthPropagation' of type [brave.propagation.B3Propagation$1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.144 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'slf4jSpanLogger' of type [org.springframework.cloud.sleuth.log.Slf4jCurrentTraceContext] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.156 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.zipkin2.ZipkinAutoConfiguration' of type [org.springframework.cloud.sleuth.zipkin2.ZipkinAutoConfiguration$$EnhancerBySpringCGLIB$$fe015047] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.201 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sleuthReporterMetrics' of type [zipkin2.reporter.InMemoryReporterMetrics] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.217 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.zipkin-org.springframework.cloud.sleuth.zipkin2.ZipkinProperties' of type [org.springframework.cloud.sleuth.zipkin2.ZipkinProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.231 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.zipkin2.sender.ZipkinKafkaSenderConfiguration' of type [org.springframework.cloud.sleuth.zipkin2.sender.ZipkinKafkaSenderConfiguration$$EnhancerBySpringCGLIB$$2a88a72] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.269 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.kafka-org.springframework.boot.autoconfigure.kafka.KafkaProperties' of type [org.springframework.boot.autoconfigure.kafka.KafkaProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.286 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'kafkaSender' of type [zipkin2.reporter.kafka11.AutoValue_KafkaSender] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.314 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'reporter' of type [zipkin2.reporter.AsyncReporter$BoundedAsyncReporter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.488 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sleuthTracing' of type [brave.Tracing$Default] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.503 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sleuthHttpTracing' of type [brave.http.AutoValue_HttpTracing] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.514 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'tracingClientHttpRequestInterceptor' of type [brave.spring.web.TracingClientHttpRequestInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:40.517 INFO [account-server,,,] 9844 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration$RestTemplateConfig$TraceInterceptorConfiguration' of type [org.springframework.cloud.sleuth.instrument.web.client.TraceWebClientAutoConfiguration$RestTemplateConfig$TraceInterceptorConfiguration$$EnhancerBySpringCGLIB$$8be11397] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-03-08 00:10:41.084 INFO [account-server,,,] 9844 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 21000 (http)
2018-03-08 00:10:41.121 INFO [account-server,,,] 9844 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2018-03-08 00:10:41.121 INFO [account-server,,,] 9844 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.28
2018-03-08 00:10:41.132 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [C:\Program Files\Java\jdk1.8.0_162\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;d:\Program Files (x86)\Bitvise SSH Client;d:\Program Files\Git\cmd;D:\apache-maven-3.3.9\bin;C:\Program Files\Java\jdk1.8.0_162\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;.]
2018-03-08 00:10:41.320 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2018-03-08 00:10:41.320 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 4047 ms
2018-03-08 00:10:41.939 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:41.940 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:41.942 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:41.943 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:43.933 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:43.933 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:43.934 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:43.934 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'traceFilter' to: [/
]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/
]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpTraceFilter' to: [/
]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'webMvcMetricsFilter' to: [/]
2018-03-08 00:10:44.297 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'arequestFilter' to urls: [/
]
2018-03-08 00:10:44.298 INFO [account-server,,,] 9844 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2018-03-08 00:10:44.377 INFO [account-server,,,] 9844 --- [ main] com.welian.init.ApplicationEnvConfig : BuildConfig enable_debug:true
2018-03-08 00:10:44.393 INFO [account-server,,,] 9844 --- [ main] com.welian.init.ApplicationEnvConfig : BuildConfig enable_debug:true
2018-03-08 00:10:44.848 WARN [account-server,,,] 9844 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2018-03-08 00:10:44.848 INFO [account-server,,,] 9844 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2018-03-08 00:10:44.862 INFO [account-server,,,] 9844 --- [ main] c.netflix.config.DynamicPropertyFactory : DynamicPropertyFactory is initialized with configuration sources: com.netflix.config.ConcurrentCompositeConfiguration@3a0b6a
2018-03-08 00:10:45.168 INFO [account-server,,,] 9844 --- [ main] c.netflix.loadbalancer.BaseLoadBalancer : Client: default instantiated a LoadBalancer: {NFLoadBalancer:name=default,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}
2018-03-08 00:10:45.464 INFO [account-server,,,] 9844 --- [ main] o.s.w.s.v.f.FreeMarkerConfigurer : ClassTemplateLoader for Spring macros added to FreeMarker configuration
2018-03-08 00:10:45.560 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:45.561 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:45.562 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:45.562 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:45.696 WARN [account-server,,,] 9844 --- [ main] c.n.c.sources.URLConfigurationSource : No URLs will be polled as dynamic configuration sources.
2018-03-08 00:10:45.696 INFO [account-server,,,] 9844 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath.
2018-03-08 00:10:46.358 INFO [account-server,,,] 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@60dce7ea: startup date [Thu Mar 08 00:10:37 CST 2018]; parent: org.springframework.context.annotation.AnnotationConfigApplicationContext@52b1beb6
2018-03-08 00:10:46.371 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:46.371 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignAcceptGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$4e609e0]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:46.372 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:46.373 INFO [account-server,,,] 9844 --- [ main] o.s.core.annotation.AnnotationUtils : Failed to introspect annotations on [class org.springframework.cloud.openfeign.encoding.FeignContentGzipEncodingAutoConfiguration$$EnhancerBySpringCGLIB$$1a100d89]: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:46.376 INFO [account-server,,,] 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Detected ResponseBodyAdvice bean in baseResultJsonBodyAdvice
2018-03-08 00:10:46.508 INFO [account-server,,,] 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-03-08 00:10:46.509 INFO [account-server,,,] 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-03-08 00:10:46.515 WARN [account-server,,,] 9844 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
2018-03-08 00:10:47.336 INFO [account-server,,,] 9844 --- [ topic=zipkin}}] o.a.k.clients.producer.ProducerConfig : ProducerConfig values:
acks = 0
batch.size = 10
bootstrap.servers = [welian.imwork.net:9092]
buffer.memory = 33554432
client.id =
compression.type = none
connections.max.idle.ms = 540000
enable.idempotence = false
interceptor.classes = null
key.serializer = class org.apache.kafka.common.serialization.ByteArraySerializer
linger.ms = 0
max.block.ms = 60000
max.in.flight.requests.per.connection = 5
max.request.size = 1048576
metadata.max.age.ms = 300000
metric.reporters = []
metrics.num.samples = 2
metrics.recording.level = INFO
metrics.sample.window.ms = 30000
partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner
receive.buffer.bytes = 32768
reconnect.backoff.max.ms = 1000
reconnect.backoff.ms = 50
request.timeout.ms = 30000
retries = 0
retry.backoff.ms = 100
sasl.jaas.config = null
sasl.kerberos.kinit.cmd = /usr/bin/kinit
sasl.kerberos.min.time.before.relogin = 60000
sasl.kerberos.service.name = null
sasl.kerberos.ticket.renew.jitter = 0.05
sasl.kerberos.ticket.renew.window.factor = 0.8
sasl.mechanism = GSSAPI
security.protocol = PLAINTEXT
send.buffer.bytes = 131072
ssl.cipher.suites = null
ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
ssl.endpoint.identification.algorithm = null
ssl.key.password = null
ssl.keymanager.algorithm = SunX509
ssl.keystore.location = null
ssl.keystore.password = null
ssl.keystore.type = JKS
ssl.protocol = TLS
ssl.provider = null
ssl.secure.random.implementation = null
ssl.trustmanager.algorithm = PKIX
ssl.truststore.location = null
ssl.truststore.password = null
ssl.truststore.type = JKS
transaction.timeout.ms = 60000
transactional.id = null
value.serializer = class org.apache.kafka.common.serialization.ByteArraySerializer

2018-03-08 00:10:47.402 INFO [account-server,,,] 9844 --- [ topic=zipkin}}] o.a.kafka.common.utils.AppInfoParser : Kafka version : 1.0.0
2018-03-08 00:10:47.402 INFO [account-server,,,] 9844 --- [ topic=zipkin}}] o.a.kafka.common.utils.AppInfoParser : Kafka commitId : aaa7af6d4a11b29d
2018-03-08 00:10:47.536 WARN [account-server,,,] 9844 --- [ main] z.r.AsyncReporter$BoundedAsyncReporter : Timed out waiting for in-flight spans to send
2018-03-08 00:10:47.536 INFO [account-server,,,] 9844 --- [ main] o.a.k.clients.producer.KafkaProducer : [Producer clientId=producer-1] Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.
2018-03-08 00:10:47.553 INFO [account-server,,,] 9844 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2018-03-08 00:10:47.577 INFO [account-server,,,] 9844 --- [ main] ConditionEvaluationReportLoggingListener :

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-03-08 00:10:47.580 ERROR [account-server,,,] 9844 --- [ main] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
at com.welian.client.ApplicationLauncher.main(ApplicationLauncher.java:23)
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724)
at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531)
at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355)
at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286)
at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120)
at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72)
at java.lang.Class.createAnnotationData(Class.java:3521)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.createAnnotationData(Class.java:3526)
at java.lang.Class.annotationData(Class.java:3510)
at java.lang.Class.getAnnotation(Class.java:3415)
at java.lang.reflect.AnnotatedElement.isAnnotationPresent(AnnotatedElement.java:258)
at java.lang.Class.isAnnotationPresent(Class.java:3425)
at org.springframework.core.annotation.AnnotatedElementUtils.hasAnnotation(AnnotatedElementUtils.java:575)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.isHandler(RequestMappingHandlerMapping.java:177)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:217)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:188)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:129)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)
... 16 common frames omitted

Process finished with exit code 1

Unable to set RetryHandler for LBClient when using Feign

I want to be able to set the MaxAutoRetriesNextServer which is used when executing a LoadBalancerCommand. In my scenario, several instances of the same service might be put out of rotation simultaneously and I want the software load balancer to keep retrying until it finds an available server.

My target service name is quote-service and in my application.yml I have the following properties (inflated on purpose):

quote-service:
  ribbon:
    OkToRetryOnAllOperations: true
    MaxAutoRetriesNextServer: 50
    MaxAutoRetries: 50

Whenever I invoke my feign client instance, the feign.ribbon.RibbonClient.execute(Request, Options) is eventually invoked which in turn requests a vanilla LBClient. This is fetched through the Spring Cloud factories CachingLBClientFactory and SpringLBClientFactory.

The problem I see here is that LBClient constructor always sets a default RetryHandler.

LBClient(ILoadBalancer lb, IClientConfig clientConfig) {
        super(lb, clientConfig);
    this.setRetryHandler(RetryHandler.DEFAULT);
    this.clientConfig = clientConfig;
    connectTimeout = clientConfig.get(CommonClientConfigKey.ConnectTimeout);
    readTimeout = clientConfig.get(CommonClientConfigKey.ReadTimeout);
  }

The default retry handler is eventually fetched when trying to get a request specific retry handler (as done in com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(S, IClientConfig) and client configuration is completely ignored:

  @Override
  public RequestSpecificRetryHandler getRequestSpecificRetryHandler(
      RibbonRequest request, IClientConfig requestConfig) {
    if (clientConfig.get(CommonClientConfigKey.OkToRetryOnAllOperations, false)) {
      return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
    }
    if (!request.toRequest().method().equals("GET")) {
      return new RequestSpecificRetryHandler(true, false, this.getRetryHandler(), requestConfig);
    } else {
      return new RequestSpecificRetryHandler(true, true, this.getRetryHandler(), requestConfig);
    }
  }

I tried to overcome this issues by defining my own @RibbonClient but it is completely ignored. I honestly have no idea how to address this. I assume I should somehow be able to populate the CachingLBClientFactory with global or service specific LBClient but I don't see a way to achieve this.

java.lang.ClassNotFoundException: feign.optionals.OptionalDecoder

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.M9</version> <type>pom</type> <scope>import</scope> </dependency>

The First Question:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
In the spring cloud Finchley.M9, the annotation of '@feignclient' could not be found.
why need to add the dependency of 'spring-cloud-openfeign-core'?

the second Question:
in my project, when dependency other *.jar(the jar is feign project)
in error java.lang.ClassNotFoundException: feign.optionals.OptionalDecoder

Optional request body should be supported by feign

In Spring MVC it is possible to annotate body parameter as optional using @RequestBody(required = false) parameter annotation, e.g.:

@FeignClient("foo-service")
public interface FooService {
    @RequestMapping(value = "/foo", method = RequestMethod.POST)
    void doFoo(@RequestBody(required = false) FilterDto filter);
}

However, Spring-Feign contract does not consider the optionality flag which leads to an IllegalStateException on proxy bootstrapping in consumer when calling something like:

fooService.doFoo(null);
java.lang.IllegalArgumentException: Body parameter 0 was null
    at feign.Util.checkArgument(Util.java:102)
    at feign.ReflectiveFeign$BuildEncodedTemplateFromArgs.resolve(ReflectiveFeign.java:323)
    at feign.ReflectiveFeign$BuildTemplateByResolvingArgs.create(ReflectiveFeign.java:213)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:72)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)

It is expected that null can be passed as parameter since it is optional.

Using:

  • spring-cloud-starter-feign:1.1.0.RELEASE
  • feign-core:8.16.2

@FeignClient should support ignoreExceptions

If I use status 400 to handle "invalid input", with @HystrixCommand I'm able to specify set of exceptions (assuming custom error decoder) to be treated as "handled" and they won't break the circuit. With use of HystrixFeign.builder I have to remove @HystrixCommand and I do not see the way to specify my custom exceptions as well as how to specify that http 400 should not break circuit.

FeignClient: can't set per client hystrix configuration

Hi

As mentione here in this issue spring-cloud/spring-cloud-netflix#1612 i've a problem configuring feign with hystrix fwith different hystrix setting for different feign clients.

Here my problem:

I've just upgraded my spring-cloud-netflix using Dalston.RELEASE and i'm trying to configure hystrix as per client as mentioned before.

my client is configured my client like this:

@FeignClient(
    name = "myclient",
    path = "/api/v1/something",
    url = "${myclient.endpoint:http://localhost:23000}",
    configuration = { ClientConfig.class })
public interface MyClient {
    
    @RequestMapping("/{country}/search")
    public ResponseEntity<Response> search(@RequestParam("param") String param);
    
}

and added a configuration in application.yml like this in order to force hystrix timeout on a specific client but not he others:

hystrix:
  command:
    myclient:
      coreSize: 3
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 1
    default:
      coreSize: 20
      maximumSize: 500
      allowMaximumSizeToDivergeFromCoreSize: true
      maxQueueSize: 50000
      queueSizeRejectionThreshold: 50000
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 1000000

But with this configuration only the default configuration is used in Feign client.

Debugging i've seen that org.springframework.cloud.netflix.feign.HystrixTargeter if no SetterFactor are provided use by default a standard feign.hystrix.SetterFactory. Feign by default (as mentioned here ) instrument Hystrix with a command key that includes the method name (in my case search) so the configuration will be "per single operation" and not " per client" as proof i've changed my configuration changing

hystrix:
    myclient: ...

to

hystrix:
     "MyClient#search(String)": ...

And, with this new weird command key, Hystrix keep non default configuration : Yuppye :)

Right now i've solved my problem by providing a custom SetterFactory where i setup the command key and the goup key in same way like this:

@Bean
@ConditionalOnProperty(name = "feign.hystrix.enabled", matchIfMissing="false") 
public SetterFactory setterFactory() {
  return (target, method) -> HystrixCommand.Setter
        .withGroupKey(HystrixCommandGroupKey.Factory.asKey( target.name()))
        .andCommandKey(HystrixCommandKey.Factory.asKey( target.name()));
}

but i was wondering if

  • i'im doing something wrong
  • this behaviour is expected or not
  • in case if this is not expected maybe HystrixTargeter could auto create a custom setter with different keys (maybe commandKey can be defined as per method using HystrixCommand javanica annotation? ) in order to instrument Hystrix with some more human friendly configs :)

Thanks for your patience

Set url at runtime in FeignClient

Hello guys!

I have a question to a specific use case. A third party provider returns a dynamic url to us that we have to call.
I have tried this by building the client with the Feign.Builder. This works, but I see some issues with this approach. For this manually created client I want to have the exact same configuration as it is defined in your FeignClientsConfiguration (logging, encoders, ...). I was able to do this by autowiring all beans from this class and set it with the builder. But what if some new configuration beans are added to the class? The configuration of my manually created client will not be consistent with yours.

So I digged around in the source code. FeignClientFactoryBean#feign creates a builder with the specified configuration.
Wouldn't it be a good idea if this would be a prototyped bean? Then I could autowire this bean and set target manually and it is guarenteed that the configuration of my manually created feign client is the same as the one of spring.

May also be a solution for #287.

I am excited about your answer!

Thanks in advance!

Christoph

when Feign Service is closing,throwing a exception:BeanCreationNotAllowedException

Hi, please understand that I'm not good at english.

I have a same issue
when I stop spring boot application, exception is occur. I don't know reason why exception is occur

2018-04-17 11:03:50.422  INFO 6411 --- [      Thread-16] s.c.a.AnnotationConfigApplicationContext : Closing FeignContext-escrow: startup date [Tue Apr 17 11:03:45 KST 2018]; parent: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@fade1fc
2018-04-17 11:03:50.427  WARN 6411 --- [      Thread-16] s.c.a.AnnotationConfigApplicationContext : Exception thrown from ApplicationListener handling ContextClosedEvent

org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:214) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1085) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.getTargetBean(ApplicationListenerMethodAdapter.java:291) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:261) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:182) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:144) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:399) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:405) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:353) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:996) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:963) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.cloud.context.named.NamedContextFactory.destroy(NamedContextFactory.java:76) [spring-cloud-context-2.0.0.M9.jar:2.0.0.M9]
	at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:256) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:576) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:552) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:957) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:521) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.destroySingletons(FactoryBeanRegistrySupport.java:226) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:964) [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1037) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1013) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:933) [spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]

below is spring cloud dependecies

dependencyManagement {
	imports {
		mavenBom "org.springframework.boot:spring-boot-dependencies:2.0.0.RELEASE"
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:Finchley.M9"
		mavenBom 'org.springframework.cloud:spring-cloud-openfeign:2.0.0.M2'
	}
}

compile('org.springframework.cloud:spring-cloud-starter-openfeign')
compile("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client")

Thanks

Finchley.RC2->Feign request/response compression appear gibberish

Finchley.RC2->Feign request/response compression appear gibberish

feign:
    compression:
        request:
            enabled: true
            mime-types: text/xml,application/xml,application/json # 配置压缩支持的MIME TYPE
            min-request-size: 2048  # 配置压缩数据大小的下限
        response:
            enabled: true # 配置响应GZIP压缩

image

Http status 406 when requesting actuator endpoint with Feign BOM RC1

Hi,

I have found this strange behavior while working with Spring Boot 2.0.0.RELEASE and Spring Cloud Finchley.RC1 and Spring Cloud OpenFeign 2.0.0.RC1 with the following maven setup:

    <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.0.0.RELEASE</version>
         <relativePath />
    </parent>

    <dependencyManagement>
      <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-openfeign</artifactId>
            <version>2.0.0.RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>    

A curl request like

curl http://localhost:8081/actuator/health

which was previously working fine, it started returning a HTTP status 406.

Only if I add an Accept header

curl -H "Accept: */*;q=1" http://localhost:8081/actuator/health
curl -H "Accept: application/json" http://localhost:8081/actuator/health

then I get a 200 response.

If I downgrade SC OpenFeign to 2.0.0.M2, then the accept header is not required anymore.

I have noticed also that all the endpoints which return a @ResponseBody String present the same behavior.

Error creating bean with name 'requestMappingHandlerMapping'

Finchley.M9-> spring-cloud-openfeign

feign:
    compression:
        request:
            enabled: true
            mime-types: text/xml,application/xml,application/json # 配置压缩支持的MIME TYPE
            min-request-size: 2048  # 配置压缩数据大小的下限
        response:
            enabled: true # 配置响应GZIP压缩
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
	at cn.springcloud.book.feign.SpringCloudFeignApplication.main(SpringCloudFeignApplication.java:13) [classes/:na]
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
	at sun.reflect.annotation.AnnotationParser.parseClassArray(AnnotationParser.java:724) ~[na:1.8.0_112]
	at sun.reflect.annotation.AnnotationParser.parseArray(AnnotationParser.java:531) ~[na:1.8.0_112]
	at sun.reflect.annotation.AnnotationParser.parseMemberValue(AnnotationParser.java:355) ~[na:1.8.0_112]
	at sun.reflect.annotation.AnnotationParser.parseAnnotation2(AnnotationParser.java:286) ~[na:1.8.0_112]
	at sun.reflect.annotation.AnnotationParser.parseAnnotations2(AnnotationParser.java:120) ~[na:1.8.0_112]
	at sun.reflect.annotation.AnnotationParser.parseAnnotations(AnnotationParser.java:72) ~[na:1.8.0_112]
	at java.lang.Class.createAnnotationData(Class.java:3521) ~[na:1.8.0_112]
	at java.lang.Class.annotationData(Class.java:3510) ~[na:1.8.0_112]
	at java.lang.Class.createAnnotationData(Class.java:3526) ~[na:1.8.0_112]
	at java.lang.Class.annotationData(Class.java:3510) ~[na:1.8.0_112]
	at java.lang.Class.getAnnotation(Class.java:3415) ~[na:1.8.0_112]
	at java.lang.reflect.AnnotatedElement.isAnnotationPresent(AnnotatedElement.java:258) ~[na:1.8.0_112]
	at java.lang.Class.isAnnotationPresent(Class.java:3425) ~[na:1.8.0_112]
	at org.springframework.core.annotation.AnnotatedElementUtils.hasAnnotation(AnnotatedElementUtils.java:575) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.isHandler(RequestMappingHandlerMapping.java:177) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:217) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:188) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:129) ~[spring-webmvc-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1769) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
	... 16 common frames omitted

<properties>
        <spring-cloud.version>Finchley.M9</spring-cloud.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

Feign: trigger early initialization of Feign clients

Although Feign client proxy are created during bootstrap, the actual handling chain behind them is created lazily the first time the Feign proxy/client is actually used, i.e. at runtime. This lazy init is performed by CachingLBClientFactory --> SpringLBClientFactorty --> SpringClientFactory.

The runtime init may fail because of bad configuration parameters, so I'd like to trigger it early during startup to avoid issues at runtime.
The only solution I found so far is to:

  • find beans in the context with the @FeignClient annotation
  • get the corresponding serviceId (duplicating the logic found in FeignClientRegistrar
  • call `CachingLBClientFactory.create()

Is there any easiest/cleaner way to do it?

Allow configuration of a Proxy in feign.httpclient

Hi all,

currently it's already possible to configure things like timeout or ssl validation in FeignHttpClientProperties.
My current project requires me to use a http proxy to connect with external services. There are multiple approaches documented on StackOverflow and co but most of them require the usage of manually build FeignClients.
The current solution I implemented is a new Properties configuration which contains a ProxyHost and ProxyPort property. If any of those is set, I overwrite the configuration from OkHttpFeignLoadBalancedConfiguration and set the Proxy in public okhttp3.OkHttpClient client(...).

This way all OkHttpClients will use a configured proxy and I don't need to do it manually.

Wouldn't that be a useful extension of the spring-cloud-openfeign project?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.