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

相关的文档参考地址:

  • Reactor Core documentation
  • Spring WebFlux reference documentation and javadoc

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-8Hello 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/plainWebFlux 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. Spring WebFlux和Spring Cloud开发响应式微服务

    作者:Piotr Mińkowski 译者:大萝卜爱上小白菜 原文:https://dzone.com/articles/reactive-microservices-with-spring-webf ...

  2. Spring Boot 3.x 系列【23】集成Spring WebFlux开发响应式应用程序

    有道无术,术尚可求,有术无道,止于术. 本系列Spring Boot版本3.0.4 源码地址:https://gitee.com/pearl-organization/study-spring-boo ...

  3. Spring Webflux 响应式编程 (二) - WebFlux编程实战

    第一章 Reactive Stream 第1节 jdk9的响应式流 就是reactive stream,也就是flow.其实和jdk8的stream没有一点关系.说白了就一个发布-订阅模式,一共只有4 ...

  4. 处理Spring WebFlux中出现的错误

    处理Spring WebFlux中出现的错误 案例概述 在本教程中,我们将看一下处理Spring WebFlux项目中错误的各种策略,同时介绍一个实际案例. 我们还将指出在一个策略中使用另一个策略并在 ...

  5. Spring WebFlux 实践

    文章目录 WebFlux 学习之路 1 .WebFlux 简介 2.WebFlux 的数据库操作 WebFlux 实践内容 1 .入门案例 1.1 RouterConfiguration 1.2 Ro ...

  6. 响应式Spring的道法术器(Spring WebFlux 快速上手 + 全面介绍)

    1. Spring WebFlux 2小时快速入门 Spring 5 之使用Spring WebFlux开发响应式应用. lambda与函数式(15min) Reactor 3 响应式编程库(60mi ...

  7. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    作者:李新杰 来自:编程新说 情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用 ...

  8. spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包

    下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...

  9. Spring Webflux: Kotlin DSL [片断]

    原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets 作者:Biju Kunjummen 译者:Jackie Tang ...

最新文章

  1. zabbix监控服务器日志文件,Zabbix对服务器资源进行监控及百度告警的整合
  2. 数学狂想曲(五)——概率分布(2), 自相关互相关卷积
  3. 31 socket客户端. 服务器 异常 语法
  4. Dapp简单的投票小例子
  5. 简短总结一下C#里跨线程更新UI(转)
  6. 如何用MyEclipse在Resin中调试Web应用程序
  7. zerorpc java_Zerorpc 支持暴露多个远程Api接口类
  8. 流式计算之Storm简介
  9. java swing 圆形图标_java swing 圆形按钮
  10. 《水浒传》108将的绰号(ZZ)
  11. 通俗科普:弦论要求空间必须是25维的解释
  12. 2022年打工人转行实录!你后悔转行了吗?
  13. 垃圾网线,毁我青春(ubuntu安装失败)
  14. 幻灯片放映时无法切换到下一张
  15. 如何用Excel做一个战斗模拟器(一)升级经验表
  16. BUUCTF——rsa系列(4)
  17. 机器人制证系统大屏可视化
  18. 2020文献积累:计算机 [1] Reinforcement learning in Economics and Finance
  19. 软件的官方源、二进制地址
  20. React生命周期介绍

热门文章

  1. 搜狗浏览器扩展帮你提升工作效率
  2. 小米4支持android版本,小米4初入Android7.1 比MIUI更流畅
  3. 腾讯云:企业版实名认证步骤
  4. IT和服务管理专业化的演变
  5. RelativeLayout 相对布局
  6. 马云的996言论存在三大谬论 是一种洗脑文化
  7. g2o原理及应用(一)
  8. WebGIS开发总结
  9. 巡回牧师matlab编程,唐崇荣牧师10月将巡回布道 警惕表面悔改成为对神的操控
  10. iOS开发之高级视图—— UITableView(四)自定义Cell