Spring WebFlux 案例

Spring WebFlux 案例

这个工程是基于Spring Boot + Spring WebFlux实现的完整案例。

我们将有两个子项目:

  • stock-quotes is a functional WebFlux app which streams stock quotes
  • trading-service is an annotation-based WebFlux app using a datastore, HTML views, and several browser-related technologies

相关的文档参考地址:

Stock Quotes application

create a Quote Generator

为了能够模拟真实的股票价格,创建了QuoteGenerator类来每过一段时间生成这些值,以及对应的实体类Quote

Functional web applications with “WebFlux.fn”

Spring WebFlux 有两种形式的应用:annotation based and functional。这个项目我们使用的是基于函数式的。

进来的HTTP 请求,通过HandlerFunction处理,返回一个Mono。与之对应的声明式是一个controller方法。

但是这些进来的请求怎么被发送到对应的 handler ?

我们使用RouterFunction,这个函数的作用是传入一个ServerRequest,返回一个Mono<HandlerFunction>. 如果一个请求匹配某个特定的路由,对应的函数就会返回;否则返回一个空的Mono. RouterFunction有点类似于@Controller声明类里的@RequestMapping.

Create your first HandlerFunction + RouterFunction

首先,建一个QuoteHandler类,标记为@Component;这个类具有所有handler functions的方法。创建一个hello方法返回格式为text/plain格式的HTTP 响应。

QuoteHandler.java

public Mono<ServerResponse> hello(ServerRequest request){
		return ok().contentType(TEXT_PLAIN)
				.body(BodyInserters.fromObject("Hello Spring!"));
	}

为了能给这个类发送请求,需要把RouterFunction暴露给Spring Boot。创建一个QuoteRouter配置类(添加@Configuration),返回一个RouterFunction<ServerResponse>类。

修改QuoteRouter类,目的是发送给QuoteHandler#hello的get请求,能发送给QuoteRouter类。

Since QuoteHandler is a component, you can inject it in @Bean methods as a method parameter.

Your application should now behave like this:

$ curl http://localhost:8081/hello -i
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: text/plain;charset=UTF-8

Hello Spring!%

完成以后,增加另一个端点 :

QuoteHandler类里,

  • with a HandlerFunction echo that echoes the request body in the response, as “text/plain”
  • and an additional route in our existing RouterFunction that accepts POST requests on "/echo" with a “text/plain” body and returns responses with the same content type.

You can also use this new endpoint with:

$ curl http://localhost:8081/echo -i -d "WebFlux workshop" -H "Content-Type: text/plain"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: text/plain

WebFlux workshop%

Expose the Flux<Quotes> as a web service

First, let’s inject our QuoteGenerator instance in our QuoteHandler, instantiate a Flux<Quote> from it that emits a Quote every 200 msec and can be shared between multiple subscribers (look at the Flux operators for that). This instance should be kept as an attribute for reusability.

Now create a streamQuotes handler that streams those generated quotes with the "application/stream+json" content type. Add the corresponding part in the RouterFunction, on the "/quotes" endpoint.

$ curl http://localhost:8081/quotes -i -H "Accept: application/stream+json"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/stream+json

{"ticker":"CTXS","price":84.0,"instant":1494841666.633000000}
{"ticker":"DELL","price":67.1,"instant":1494841666.834000000}
{"ticker":"GOOG","price":869,"instant":1494841667.034000000}
{"ticker":"MSFT","price":66.5,"instant":1494841667.231000000}
{"ticker":"ORCL","price":46.13,"instant":1494841667.433000000}
{"ticker":"RHT","price":86.9,"instant":1494841667.634000000}
{"ticker":"VMW","price":93.7,"instant":1494841667.833000000}

Let’s now create a variant of that — instead of streaming all values (with an infinite stream), we can now take the last “n” elements of that Flux and return those as a collection of Quotes with the content type "application/json". Note that you should take the requested number of Quotes from the request itself, with the query parameter named "size" (or pick 10 as the default size if none was provided).

curl http://localhost:8081/quotes -i -H "Accept: application/json"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/json

[{"ticker":"CTXS","price":85.8,"instant":1494842241.716000000},{"ticker":"DELL","price":64.69,"instant":1494842241.913000000},{"ticker":"GOOG","price":856.5,"instant":1494842242.112000000},{"ticker":"MSFT","price":68.2,"instant":1494842242.317000000},{"ticker":"ORCL","price":47.4,"instant":1494842242.513000000},{"ticker":"RHT","price":85.6,"instant":1494842242.716000000},{"ticker":"VMW","price":96.1,"instant":1494842242.914000000},{"ticker":"CTXS","price":85.5,"instant":1494842243.116000000},{"ticker":"DELL","price":64.88,"instant":1494842243.316000000},{"ticker":"GOOG","price":889,"instant":1494842243.517000000}]%

以上案例,通过启动StockQuotesApplication,在Windows10下,安装curl工具即可进行测试

Integration tests with WebTestClient

Spring WebFlux (actually the spring-test module) includes a WebTestClient that can be used to test WebFlux server endpoints with or without a running server. Tests without a running server are comparable to MockMvc from Spring MVC where mock request and response are used instead of connecting over the network using a socket. The WebTestClient however can also perform tests against a running server.

WebTestClient vs WebClient

Simply put, WebClient is an interface representing the main entry point for performing web requests.

It has been created as a part of the Spring Web Reactive module and will be replacing the classic RestTemplate in these scenarios. The new client is a reactive, non-blocking solution that works over the HTTP/1.1 protocol.

Finally, the interface has a single implementation – the DefaultWebClient class – which we’ll be working with.

The WebTestClient is the main entry point for testing WebFlux server endpoints. It has very similar API to the WebClient, and it delegates most of the work to an internal WebClient instance focusing mainly on providing a test context. The DefaultWebTestClient class is a single interface implementation.

通过运行StockQuotesApplicationTests,会有如下信息:

"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar=2807:E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests
15:42:59.586 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:42:59.606 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
15:42:59.626 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
15:42:59.656 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
15:42:59.696 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests], using SpringBootContextLoader
15:42:59.706 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: class path resource [com/viagra/spring/workshop/stockquotes/StockQuotesApplicationTests-context.xml] does not exist
15:42:59.706 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: class path resource [com/viagra/spring/workshop/stockquotes/StockQuotesApplicationTestsContext.groovy] does not exist
15:42:59.706 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: no resource found for suffixes {-context.xml, Context.groovy}.
15:42:59.706 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: StockQuotesApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
15:42:59.786 [main] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@2114874018 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_101\jre\bin, java.vm.version=25.101-b13, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes, java.runtime.version=1.8.0_101-b13, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\HASEE\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_101\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\HASEE, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar, user.name=HASEE, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests, java.home=C:\Program Files\Java\jdk1.8.0_101\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_101, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@911312317 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-34LFR52, NO_PROXY=192.168.99.100, PROCESSOR_LEVEL=6, VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\, M3=E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, LNKEVN=C:\Program Files (x86)\Internet Explorer\iexplore.exe, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, MOZ_PLUGIN_PATH=E:\software\Foxit Software\Foxit PhantomPDF\plugins\, USERNAME=HASEE, ProgramFiles(x86)=C:\Program Files (x86), FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.RB;.RBW, COMPOSE_CONVERT_WINDOWS_PATHS=true, DriverData=C:\Windows\System32\Drivers\DriverData, GOPATH=F:\go_system, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, RABBITMQ_SERVER=C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10, HOMEPATH=\Users\HASEE, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, HADOOP_HOME=E:\software\hadoop-common-2.2.0-bin-master, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, windir=C:\WINDOWS, =::=::\, ZOOKEEPER_HOME=F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4, LOCALAPPDATA=C:\Users\HASEE\AppData\Local, IntelliJ IDEA=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;, DOCKER_HOST=tcp://192.168.99.100:2376, USERDOMAIN=DESKTOP-34LFR52, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-34LFR52, JAVA_HOME=C:\Program Files\Java\jdk1.8.0_101, CUDA_SDK_LIB_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64, CUBA_LIB_PATH= C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64, WebStorm=E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, GRADLE_HOME=F:\Gradle_Build\gradle-4.9, ANT_HOME=E:\ApacheSoftwareFoundation\apache-ant-1.10.5, OneDrive=C:\Users\HASEE\OneDrive, APPDATA=C:\Users\HASEE\AppData\Roaming, DOCKER_MACHINE_NAME=default, GRADLE_USER_HOME=E:\ApacheSoftwareFoundation\maven_Repository, DOCKER_CERT_PATH=C:\Users\HASEE\.docker\machine\machines\default, CUDA_SDK_BIN_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64, M3_HOME=E:\ApacheSoftwareFoundation\apache-maven-3.5.0, NODE_PATH=E:\software\Nodejs\node_modules, SCALA_HOME=C:\Program Files (x86)\scala, CommonProgramFiles=C:\Program Files\Common Files, Path=E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, PyCharm=E:\software\JetBrains\PyCharm 2018.3.2\bin;, OS=Windows_NT, COMPUTERNAME=DESKTOP-34LFR52, NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, CATALINA_HOME=E:\software\tomcat Server\apache-tomcat-7.0.78, SBT_HOME=C:\Program Files (x86)\sbt, CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, PROCESSOR_REVISION=9e09, CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar;E:\software\tomcat Server\apache-tomcat-7.0.78\common\lib\servlet.jar;C:\Program Files (x86)\sbt\conf;, CommonProgramW6432=C:\Program Files\Common Files, GOROOT=C:\Go\, ComSpec=C:\WINDOWS\system32\cmd.exe, CUDA_SDK_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, NVCUDASAMPLES9_0_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, RUBYOPT=-Eutf-8, CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin, DOCKER_TLS_VERIFY=1, SystemRoot=C:\WINDOWS, TEMP=C:\Users\HASEE\AppData\Local\Temp, HOMEDRIVE=C:, USERPROFILE=C:\Users\HASEE, TMP=C:\Users\HASEE\AppData\Local\Temp, CUDA_PATH_V9_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, NUMBER_OF_PROCESSORS=8}}]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved classpath location [com/viagra/spring/workshop/stockquotes/] to resources [URL [file:/D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/test-classes/com/viagra/spring/workshop/stockquotes/], URL [file:/D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/classes/com/viagra/spring/workshop/stockquotes/]]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes] for files matching pattern [D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/test-classes/com/viagra/spring/workshop/stockquotes/*.class]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes] for files matching pattern [D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/classes/com/viagra/spring/workshop/stockquotes/*.class]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/viagra/spring/workshop/stockquotes/*.class] to resources [file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplicationTests.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\Quote.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteGenerator.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteHandler.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteRouter.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplication.class]]
15:42:59.956 [main] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplication.class]
15:42:59.956 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.viagra.spring.workshop.stockquotes.StockQuotesApplication for test class com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests
15:43:00.246 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: using defaults.
15:43:00.246 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
15:43:00.266 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [javax/servlet/ServletContext]
15:43:00.616 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [org/springframework/transaction/interceptor/TransactionAttributeSource]
15:43:00.626 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [org/springframework/transaction/interceptor/TransactionAttribute]
15:43:00.626 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@78ffe6dc, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@8317c52, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@76f2bbc1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@68e965f5, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@6f27a732, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@6c779568, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@f381794, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@2cdd0d4b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@7e9131d5]
15:43:00.636 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.636 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.666 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@65f095f8 testClass = StockQuotesApplicationTests, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [ReactiveWebMergedContextConfiguration@59af0466 testClass = StockQuotesApplicationTests, locations = '{}', classes = '{class com.viagra.spring.workshop.stockquotes.StockQuotesApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@86be70a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d70d1b1, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38bc8ab5, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@60285225, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@63440df3], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]], class annotated with @DirtiesContext [false] with mode [null].
15:43:00.666 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.666 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.676 [main] DEBUG org.springframework.test.context.support.DependencyInjectionTestExecutionListener - Performing dependency injection for test context [[DefaultTestContext@65f095f8 testClass = StockQuotesApplicationTests, testInstance = com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests@41e1e210, testMethod = [null], testException = [null], mergedContextConfiguration = [ReactiveWebMergedContextConfiguration@59af0466 testClass = StockQuotesApplicationTests, locations = '{}', classes = '{class com.viagra.spring.workshop.stockquotes.StockQuotesApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@86be70a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d70d1b1, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38bc8ab5, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@60285225, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@63440df3], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]]].
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1671507048 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_101\jre\bin, java.vm.version=25.101-b13, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes, java.runtime.version=1.8.0_101-b13, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\HASEE\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_101\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\HASEE, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar, user.name=HASEE, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests, java.home=C:\Program Files\Java\jdk1.8.0_101\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_101, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@687059528 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-34LFR52, NO_PROXY=192.168.99.100, PROCESSOR_LEVEL=6, VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\, M3=E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, LNKEVN=C:\Program Files (x86)\Internet Explorer\iexplore.exe, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, MOZ_PLUGIN_PATH=E:\software\Foxit Software\Foxit PhantomPDF\plugins\, USERNAME=HASEE, ProgramFiles(x86)=C:\Program Files (x86), FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.RB;.RBW, COMPOSE_CONVERT_WINDOWS_PATHS=true, DriverData=C:\Windows\System32\Drivers\DriverData, GOPATH=F:\go_system, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, RABBITMQ_SERVER=C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10, HOMEPATH=\Users\HASEE, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, HADOOP_HOME=E:\software\hadoop-common-2.2.0-bin-master, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, windir=C:\WINDOWS, =::=::\, ZOOKEEPER_HOME=F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4, LOCALAPPDATA=C:\Users\HASEE\AppData\Local, IntelliJ IDEA=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;, DOCKER_HOST=tcp://192.168.99.100:2376, USERDOMAIN=DESKTOP-34LFR52, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-34LFR52, JAVA_HOME=C:\Program Files\Java\jdk1.8.0_101, CUDA_SDK_LIB_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64, CUBA_LIB_PATH= C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64, WebStorm=E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, GRADLE_HOME=F:\Gradle_Build\gradle-4.9, ANT_HOME=E:\ApacheSoftwareFoundation\apache-ant-1.10.5, OneDrive=C:\Users\HASEE\OneDrive, APPDATA=C:\Users\HASEE\AppData\Roaming, DOCKER_MACHINE_NAME=default, GRADLE_USER_HOME=E:\ApacheSoftwareFoundation\maven_Repository, DOCKER_CERT_PATH=C:\Users\HASEE\.docker\machine\machines\default, CUDA_SDK_BIN_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64, M3_HOME=E:\ApacheSoftwareFoundation\apache-maven-3.5.0, NODE_PATH=E:\software\Nodejs\node_modules, SCALA_HOME=C:\Program Files (x86)\scala, CommonProgramFiles=C:\Program Files\Common Files, Path=E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, PyCharm=E:\software\JetBrains\PyCharm 2018.3.2\bin;, OS=Windows_NT, COMPUTERNAME=DESKTOP-34LFR52, NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, CATALINA_HOME=E:\software\tomcat Server\apache-tomcat-7.0.78, SBT_HOME=C:\Program Files (x86)\sbt, CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, PROCESSOR_REVISION=9e09, CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar;E:\software\tomcat Server\apache-tomcat-7.0.78\common\lib\servlet.jar;C:\Program Files (x86)\sbt\conf;, CommonProgramW6432=C:\Program Files\Common Files, GOROOT=C:\Go\, ComSpec=C:\WINDOWS\system32\cmd.exe, CUDA_SDK_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, NVCUDASAMPLES9_0_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, RUBYOPT=-Eutf-8, CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin, DOCKER_TLS_VERIFY=1, SystemRoot=C:\WINDOWS, TEMP=C:\Users\HASEE\AppData\Local\Temp, HOMEDRIVE=C:, USERPROFILE=C:\Users\HASEE, TMP=C:\Users\HASEE\AppData\Local\Temp, CUDA_PATH_V9_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, NUMBER_OF_PROCESSORS=8}}]
15:43:00.716 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'Inlined Test Properties' with highest search precedence

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

2019-10-23 15:43:01.261  INFO 10152 --- [           main] c.v.s.w.s.StockQuotesApplicationTests    : Starting StockQuotesApplicationTests on DESKTOP-34LFR52 with PID 10152 (started by HASEE in D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes)
2019-10-23 15:43:01.263  INFO 10152 --- [           main] c.v.s.w.s.StockQuotesApplicationTests    : No active profile set, falling back to default profiles: default
2019-10-23 15:43:01.311  INFO 10152 --- [           main] onfigReactiveWebServerApplicationContext : Refreshing org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:02.772  INFO 10152 --- [           main] o.s.w.r.f.s.s.RouterFunctionMapping      : Mapped ((GET && /hello) && Accept: [text/plain]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$269/470132045@704b2127
((POST && /echo) && (Accept: [text/plain] && Content-Type: [text/plain])) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$271/1237144823@3ee39da0
((GET && /quotes) && Accept: [application/json]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$272/1511180072@5d332969
((GET && /quotes) && Accept: [application/stream+json]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$273/2041264753@7cc9ce8
2019-10-23 15:43:02.802  INFO 10152 --- [           main] o.s.w.r.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2019-10-23 15:43:02.802  INFO 10152 --- [           main] o.s.w.r.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2019-10-23 15:43:02.932  INFO 10152 --- [           main] o.s.w.r.r.m.a.ControllerMethodResolver   : Looking for @ControllerAdvice: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:06.469  INFO 10152 --- [ctor-http-nio-1] r.ipc.netty.tcp.BlockingNettyContext     : Started HttpServer on /0:0:0:0:0:0:0:0:2830
2019-10-23 15:43:06.469  INFO 10152 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port(s): 2830
2019-10-23 15:43:06.479  INFO 10152 --- [           main] c.v.s.w.s.StockQuotesApplicationTests    : Started StockQuotesApplicationTests in 5.763 seconds (JVM running for 8.222)
2019-10-23 15:43:08.529  INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes   : | onSubscribe([Fuseable] FluxFlattenIterable.FlattenIterableSubscriber)
2019-10-23 15:43:08.539  INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes   : | request(256)
2019-10-23 15:43:09.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=85.1, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=64.28, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=867, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=66.3, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=47.8, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=87.0, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=92.049, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.599  INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes   : | request(6)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=84.0, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=65.1, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=885, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=65.32, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=47.3, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=84.067, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=92.0072, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=83.9, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=65.5, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=879, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=67.4, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=46.91, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=88.0, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=92.17, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=82.87, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=66.3, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=891, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=67.9, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=48.0, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=85.4, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=96.1, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=85.9, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=64.98, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=852.7, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=68.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=47.7, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=87.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=94.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=82.66, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=65.4, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=856.4, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=65.72, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=46.66, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=85.3, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=92.94, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:14.559 ERROR 10152 --- [ctor-http-nio-6] o.s.w.s.adapter.HttpWebHandlerAdapter    : Unhandled failure: 你的主机中的软件中止了一个已建立的连接。, response already set (status=200)
2019-10-23 15:43:14.559  WARN 10152 --- [ctor-http-nio-6] o.s.h.s.r.ReactorHttpHandlerAdapter      : Handling completed with error: 你的主机中的软件中止了一个已建立的连接。
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=82.60, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=66.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=852.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=67.7, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=46.89, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=87.3, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='VMW', price=95.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='CTXS', price=84.2, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='DELL', price=65.3, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='GOOG', price=877, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='MSFT', price=67.7, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='ORCL', price=47.9, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | request(1)
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | onNext(Quote{ticker='RHT', price=84.42, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549  INFO 10152 --- [     parallel-2] com.viagra.spring.workshop.stockquotes   : | cancel()
2019-10-23 15:43:16.579  INFO 10152 --- [      Thread-11] onfigReactiveWebServerApplicationContext : Closing org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:16.589  INFO 10152 --- [      Thread-11] r.ipc.netty.tcp.BlockingNettyContext     : Stopped HttpServer on /0:0:0:0:0:0:0:0:2830

Trading Service application

Use Tomcat as a web engine

By default, spring-boot-starter-webflux transitively brings spring-boot-starter-reactor-netty and Spring Boot auto-configures Reactor Netty as a web server. For this application, we’ll use Tomcat as an alternative.

Note that Spring Boot supports as well Undertow and Jetty.

Use a reactive datastore

We’d like to insert users in our datastore when the application starts up. For that, create a UsersCommandLineRunner component that implements Spring Boot’s CommandLineRunner. In the run method, use the reactive repository to insert TradingUser instances in the datastore.

Since the run method returns void, it expects a blocking implementation. This is why you should use the blockLast(Duration) operator on the Flux returned by the repository when inserting data. You can also then().block(Duration) to turn that Flux into a Mono<Void> that waits for completion.

Create and Configure a WebSocketHandler

WebFlux includes functional reactive WebSocket client and server support.

On the server side there are two main components: WebSocketHandlerAdapter will handle the incoming requests by delegating to the configured WebSocketService and WebSocketHandler will be responsible to handle WebSocket session.

Take a look at the code samples in Reactive WebSocket Support documentation

First, create an EchoWebSocketHandler class; it has to implement WebSocketHandler. Now implement handle(WebSocketSession session) method. The handler echoes the incoming messages with a delay of 1s.

To route requests to that handler, you need to map the above WebSocket handler to a specific URL: here, "/websocket/echo". Create a WebSocketRouter configuration class (i.e. annotated with @Configuration) that creates a bean of type HandlerMapping. Create one additional bean of type WebSocketHandlerAdapter which will delegate the processing of the incoming request to the default WebSocketService which is HandshakeWebSocketService.

Now create a WebSocketController annotated with @Controller and add a method that renders the websocket.html template for incoming "GET /websocket" requests.

Add the following template file to your application:

trading-service/src/main/resources/templates/websocket.html

link:../trading-service/src/main/resources/templates/websocket.html[]

不过这个无法运行TradingServiceApplication,只能运行test目录下的测试用例。

sourcecode download

以下是一个简单的 Spring WebFlux 案例: 1. 首先,需要创建一个 Maven 项目,并在 pom.xml 文件中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> ``` 2. 接下来,创建一个简单的 REST API,用于返回一些用户数据。在 src/main/java 目录下创建一个名为 UserController 的类: ``` package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Flux; @RestController public class UserController { @GetMapping("/users") public Flux<User> getUsers() { return Flux.just( new User("John", "Doe"), new User("Jane", "Doe"), new User("Bob", "Smith") ); } public static class User { private String firstName; private String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } } } ``` 3. 启动 Spring Boot 应用程序并访问 http://localhost:8080/users,即可获取用户数据。 这是一个简单的 Spring WebFlux 案例,它使用了 Reactor 的组件来实现响应式编程。使用 Spring WebFlux,可以轻松地构建响应式 Web 应用程序,以满足大量并发访问的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值