Spring WebFlux 案例
这个工程是基于Spring Boot + Spring WebFlux实现的完整案例。
我们将有两个子项目:
stock-quotes
is a functional WebFlux app which streams stock quotestrading-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-8
Hello Spring!%
完成以后,增加另一个端点 :
在QuoteHandler
类里,
- with a HandlerFunction
echo
that echoes the request body in the response, as “text/plain” - and an additional route in our existing
RouterFunction
that accepts POST requests on"/echo"
with a “text/plain” body and returns responses with the same content type.
You can also use this new endpoint with:
$ curl http://localhost:8081/echo -i -d "WebFlux workshop" -H "Content-Type: text/plain"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: text/plain
WebFlux workshop%
Expose the Flux<Quotes>
as a web service
First, let’s inject our QuoteGenerator
instance in our QuoteHandler
, instantiate a Flux<Quote>
from it that emits a Quote
every 200 msec and can be shared between multiple subscribers (look at the Flux
operators for that). This instance should be kept as an attribute for reusability.
Now create a streamQuotes
handler that streams those generated quotes with the "application/stream+json"
content type. Add the corresponding part in the RouterFunction
, on the "/quotes"
endpoint.
$ curl http://localhost:8081/quotes -i -H "Accept: application/stream+json"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/stream+json
{"ticker":"CTXS","price":84.0,"instant":1494841666.633000000}
{"ticker":"DELL","price":67.1,"instant":1494841666.834000000}
{"ticker":"GOOG","price":869,"instant":1494841667.034000000}
{"ticker":"MSFT","price":66.5,"instant":1494841667.231000000}
{"ticker":"ORCL","price":46.13,"instant":1494841667.433000000}
{"ticker":"RHT","price":86.9,"instant":1494841667.634000000}
{"ticker":"VMW","price":93.7,"instant":1494841667.833000000}
Let’s now create a variant of that — instead of streaming all values (with an infinite stream), we can now take the last “n” elements of that Flux
and return those as a collection of Quotes with the content type "application/json"
. Note that you should take the requested number of Quotes from the request itself, with the query parameter named "size"
(or pick 10
as the default size if none was provided).
curl http://localhost:8081/quotes -i -H "Accept: application/json"
HTTP/1.1 200 OK
transfer-encoding: chunked
Content-Type: application/json
[{"ticker":"CTXS","price":85.8,"instant":1494842241.716000000},{"ticker":"DELL","price":64.69,"instant":1494842241.913000000},{"ticker":"GOOG","price":856.5,"instant":1494842242.112000000},{"ticker":"MSFT","price":68.2,"instant":1494842242.317000000},{"ticker":"ORCL","price":47.4,"instant":1494842242.513000000},{"ticker":"RHT","price":85.6,"instant":1494842242.716000000},{"ticker":"VMW","price":96.1,"instant":1494842242.914000000},{"ticker":"CTXS","price":85.5,"instant":1494842243.116000000},{"ticker":"DELL","price":64.88,"instant":1494842243.316000000},{"ticker":"GOOG","price":889,"instant":1494842243.517000000}]%
以上案例,通过启动StockQuotesApplication
,在Windows10下,安装curl
工具即可进行测试
Integration tests with WebTestClient
Spring WebFlux (actually the spring-test
module) includes a WebTestClient
that can be used to test WebFlux server endpoints with or without a running server. Tests without a running server are comparable to MockMvc from Spring MVC where mock request and response are used instead of connecting over the network using a socket. The WebTestClient however can also perform tests against a running server.
WebTestClient vs WebClient
Simply put, WebClient is an interface representing the main entry point for performing web requests.
It has been created as a part of the Spring Web Reactive module and will be replacing the classic RestTemplate in these scenarios. The new client is a reactive, non-blocking solution that works over the HTTP/1.1 protocol.
Finally, the interface has a single implementation – the DefaultWebClient class – which we’ll be working with.
The WebTestClient is the main entry point for testing WebFlux server endpoints. It has very similar API to the WebClient, and it delegates most of the work to an internal WebClient instance focusing mainly on providing a test context. The DefaultWebTestClient class is a single interface implementation.
通过运行StockQuotesApplicationTests
,会有如下信息:
"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar=2807:E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin" -Dfile.encoding=UTF-8 -classpath "E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests
15:42:59.586 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:42:59.606 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
15:42:59.626 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
15:42:59.656 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
15:42:59.696 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests], using SpringBootContextLoader
15:42:59.706 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: class path resource [com/viagra/spring/workshop/stockquotes/StockQuotesApplicationTests-context.xml] does not exist
15:42:59.706 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: class path resource [com/viagra/spring/workshop/stockquotes/StockQuotesApplicationTestsContext.groovy] does not exist
15:42:59.706 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: no resource found for suffixes {-context.xml, Context.groovy}.
15:42:59.706 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: StockQuotesApplicationTests does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
15:42:59.786 [main] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:42:59.807 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@2114874018 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_101\jre\bin, java.vm.version=25.101-b13, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes, java.runtime.version=1.8.0_101-b13, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\HASEE\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_101\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\HASEE, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar, user.name=HASEE, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests, java.home=C:\Program Files\Java\jdk1.8.0_101\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_101, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@911312317 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-34LFR52, NO_PROXY=192.168.99.100, PROCESSOR_LEVEL=6, VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\, M3=E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, LNKEVN=C:\Program Files (x86)\Internet Explorer\iexplore.exe, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, MOZ_PLUGIN_PATH=E:\software\Foxit Software\Foxit PhantomPDF\plugins\, USERNAME=HASEE, ProgramFiles(x86)=C:\Program Files (x86), FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.RB;.RBW, COMPOSE_CONVERT_WINDOWS_PATHS=true, DriverData=C:\Windows\System32\Drivers\DriverData, GOPATH=F:\go_system, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, RABBITMQ_SERVER=C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10, HOMEPATH=\Users\HASEE, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, HADOOP_HOME=E:\software\hadoop-common-2.2.0-bin-master, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, windir=C:\WINDOWS, =::=::\, ZOOKEEPER_HOME=F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4, LOCALAPPDATA=C:\Users\HASEE\AppData\Local, IntelliJ IDEA=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;, DOCKER_HOST=tcp://192.168.99.100:2376, USERDOMAIN=DESKTOP-34LFR52, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-34LFR52, JAVA_HOME=C:\Program Files\Java\jdk1.8.0_101, CUDA_SDK_LIB_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64, CUBA_LIB_PATH= C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64, WebStorm=E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, GRADLE_HOME=F:\Gradle_Build\gradle-4.9, ANT_HOME=E:\ApacheSoftwareFoundation\apache-ant-1.10.5, OneDrive=C:\Users\HASEE\OneDrive, APPDATA=C:\Users\HASEE\AppData\Roaming, DOCKER_MACHINE_NAME=default, GRADLE_USER_HOME=E:\ApacheSoftwareFoundation\maven_Repository, DOCKER_CERT_PATH=C:\Users\HASEE\.docker\machine\machines\default, CUDA_SDK_BIN_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64, M3_HOME=E:\ApacheSoftwareFoundation\apache-maven-3.5.0, NODE_PATH=E:\software\Nodejs\node_modules, SCALA_HOME=C:\Program Files (x86)\scala, CommonProgramFiles=C:\Program Files\Common Files, Path=E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, PyCharm=E:\software\JetBrains\PyCharm 2018.3.2\bin;, OS=Windows_NT, COMPUTERNAME=DESKTOP-34LFR52, NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, CATALINA_HOME=E:\software\tomcat Server\apache-tomcat-7.0.78, SBT_HOME=C:\Program Files (x86)\sbt, CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, PROCESSOR_REVISION=9e09, CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar;E:\software\tomcat Server\apache-tomcat-7.0.78\common\lib\servlet.jar;C:\Program Files (x86)\sbt\conf;, CommonProgramW6432=C:\Program Files\Common Files, GOROOT=C:\Go\, ComSpec=C:\WINDOWS\system32\cmd.exe, CUDA_SDK_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, NVCUDASAMPLES9_0_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, RUBYOPT=-Eutf-8, CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin, DOCKER_TLS_VERIFY=1, SystemRoot=C:\WINDOWS, TEMP=C:\Users\HASEE\AppData\Local\Temp, HOMEDRIVE=C:, USERPROFILE=C:\Users\HASEE, TMP=C:\Users\HASEE\AppData\Local\Temp, CUDA_PATH_V9_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, NUMBER_OF_PROCESSORS=8}}]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved classpath location [com/viagra/spring/workshop/stockquotes/] to resources [URL [file:/D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/test-classes/com/viagra/spring/workshop/stockquotes/], URL [file:/D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/classes/com/viagra/spring/workshop/stockquotes/]]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes]
15:42:59.827 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes] for files matching pattern [D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/test-classes/com/viagra/spring/workshop/stockquotes/*.class]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes] for files matching pattern [D:/java/spring-project/Spring-Framework/webflux-workshop/stock-quotes/target/classes/com/viagra/spring/workshop/stockquotes/*.class]
15:42:59.836 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/viagra/spring/workshop/stockquotes/*.class] to resources [file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplicationTests.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\Quote.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteGenerator.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteHandler.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\QuoteRouter.class], file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplication.class]]
15:42:59.956 [main] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes\com\viagra\spring\workshop\stockquotes\StockQuotesApplication.class]
15:42:59.956 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.viagra.spring.workshop.stockquotes.StockQuotesApplication for test class com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests
15:43:00.246 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]: using defaults.
15:43:00.246 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
15:43:00.266 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [javax/servlet/ServletContext]
15:43:00.616 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [org/springframework/transaction/interceptor/TransactionAttributeSource]
15:43:00.626 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [org/springframework/transaction/interceptor/TransactionAttribute]
15:43:00.626 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@78ffe6dc, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@8317c52, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@76f2bbc1, org.springframework.test.context.support.DirtiesContextTestExecutionListener@68e965f5, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@6f27a732, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@6c779568, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@f381794, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@2cdd0d4b, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@7e9131d5]
15:43:00.636 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.636 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.656 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.666 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@65f095f8 testClass = StockQuotesApplicationTests, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [ReactiveWebMergedContextConfiguration@59af0466 testClass = StockQuotesApplicationTests, locations = '{}', classes = '{class com.viagra.spring.workshop.stockquotes.StockQuotesApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@86be70a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d70d1b1, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38bc8ab5, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@60285225, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@63440df3], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]], class annotated with @DirtiesContext [false] with mode [null].
15:43:00.666 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.666 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests]
15:43:00.676 [main] DEBUG org.springframework.test.context.support.DependencyInjectionTestExecutionListener - Performing dependency injection for test context [[DefaultTestContext@65f095f8 testClass = StockQuotesApplicationTests, testInstance = com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests@41e1e210, testMethod = [null], testException = [null], mergedContextConfiguration = [ReactiveWebMergedContextConfiguration@59af0466 testClass = StockQuotesApplicationTests, locations = '{}', classes = '{class com.viagra.spring.workshop.stockquotes.StockQuotesApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@86be70a, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d70d1b1, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@38bc8ab5, org.springframework.boot.test.web.reactive.server.WebTestClientContextCustomizer@60285225, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@63440df3], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> false]]].
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1671507048 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_101\jre\bin, java.vm.version=25.101-b13, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes, java.runtime.version=1.8.0_101-b13, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\HASEE\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_101\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\HASEE, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit-rt.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\test-classes;D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes\target\classes;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-webflux\2.0.2.RELEASE\spring-boot-starter-webflux-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter\2.0.2.RELEASE\spring-boot-starter-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot\2.0.2.RELEASE\spring-boot-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-context\5.0.6.RELEASE\spring-context-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-aop\5.0.6.RELEASE\spring-aop-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-expression\5.0.6.RELEASE\spring-expression-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-autoconfigure\2.0.2.RELEASE\spring-boot-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-logging\2.0.2.RELEASE\spring-boot-starter-logging-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-json\2.0.2.RELEASE\spring-boot-starter-json-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-databind\2.9.5\jackson-databind-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\core\jackson-core\2.9.5\jackson-core-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.5\jackson-datatype-jdk8-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.5\jackson-datatype-jsr310-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.5\jackson-module-parameter-names-2.9.5.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.0.2.RELEASE\spring-boot-starter-reactor-netty-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\ipc\reactor-netty\0.7.7.RELEASE\reactor-netty-0.7.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-http\4.1.24.Final\netty-codec-http-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec\4.1.24.Final\netty-codec-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler\4.1.24.Final\netty-handler-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-buffer\4.1.24.Final\netty-buffer-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport\4.1.24.Final\netty-transport-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-resolver\4.1.24.Final\netty-resolver-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-handler-proxy\4.1.24.Final\netty-handler-proxy-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-codec-socks\4.1.24.Final\netty-codec-socks-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-epoll\4.1.24.Final\netty-transport-native-epoll-4.1.24.Final-linux-x86_64.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-common\4.1.24.Final\netty-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\netty\netty-transport-native-unix-common\4.1.24.Final\netty-transport-native-unix-common-4.1.24.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hibernate\validator\hibernate-validator\6.0.9.Final\hibernate-validator-6.0.9.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-web\5.0.6.RELEASE\spring-web-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-beans\5.0.6.RELEASE\spring-beans-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-webflux\5.0.6.RELEASE\spring-webflux-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\io\projectreactor\reactor-core\3.1.7.RELEASE\reactor-core-3.1.7.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\reactivestreams\reactive-streams\1.0.2\reactive-streams-1.0.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-multipart-parser\1.1.0\nio-multipart-parser-1.1.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\synchronoss\cloud\nio-stream-storage\1.1.3\nio-stream-storage-1.1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-starter-test\2.0.2.RELEASE\spring-boot-starter-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test\2.0.2.RELEASE\spring-boot-test-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.2.RELEASE\spring-boot-test-autoconfigure-2.0.2.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;E:\ApacheSoftwareFoundation\maven_Repository\junit\junit\4.12\junit-4.12.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;E:\ApacheSoftwareFoundation\maven_Repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-core\5.0.6.RELEASE\spring-core-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-jcl\5.0.6.RELEASE\spring-jcl-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\springframework\spring-test\5.0.6.RELEASE\spring-test-5.0.6.RELEASE.jar;E:\ApacheSoftwareFoundation\maven_Repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\lib\idea_rt.jar, user.name=HASEE, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.viagra.spring.workshop.stockquotes.StockQuotesApplicationTests, java.home=C:\Program Files\Java\jdk1.8.0_101\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_101, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_101\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_101\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_101\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_101\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@687059528 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-34LFR52, NO_PROXY=192.168.99.100, PROCESSOR_LEVEL=6, VS140COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\, M3=E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, LNKEVN=C:\Program Files (x86)\Internet Explorer\iexplore.exe, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, MOZ_PLUGIN_PATH=E:\software\Foxit Software\Foxit PhantomPDF\plugins\, USERNAME=HASEE, ProgramFiles(x86)=C:\Program Files (x86), FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW;.RB;.RBW, COMPOSE_CONVERT_WINDOWS_PATHS=true, DriverData=C:\Windows\System32\Drivers\DriverData, GOPATH=F:\go_system, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, RABBITMQ_SERVER=C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10, HOMEPATH=\Users\HASEE, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, HADOOP_HOME=E:\software\hadoop-common-2.2.0-bin-master, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, windir=C:\WINDOWS, =::=::\, ZOOKEEPER_HOME=F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4, LOCALAPPDATA=C:\Users\HASEE\AppData\Local, IntelliJ IDEA=E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;, DOCKER_HOST=tcp://192.168.99.100:2376, USERDOMAIN=DESKTOP-34LFR52, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-34LFR52, JAVA_HOME=C:\Program Files\Java\jdk1.8.0_101, CUDA_SDK_LIB_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64, CUBA_LIB_PATH= C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64, WebStorm=E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, GRADLE_HOME=F:\Gradle_Build\gradle-4.9, ANT_HOME=E:\ApacheSoftwareFoundation\apache-ant-1.10.5, OneDrive=C:\Users\HASEE\OneDrive, APPDATA=C:\Users\HASEE\AppData\Roaming, DOCKER_MACHINE_NAME=default, GRADLE_USER_HOME=E:\ApacheSoftwareFoundation\maven_Repository, DOCKER_CERT_PATH=C:\Users\HASEE\.docker\machine\machines\default, CUDA_SDK_BIN_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64, M3_HOME=E:\ApacheSoftwareFoundation\apache-maven-3.5.0, NODE_PATH=E:\software\Nodejs\node_modules, SCALA_HOME=C:\Program Files (x86)\scala, CommonProgramFiles=C:\Program Files\Common Files, Path=E:\software\Xmanager\Xlpd 6\;E:\software\Xmanager\Xshell 6\;E:\software\Xmanager\Xmanager 6\;F:\oracle12c\product\12.1.0\dbhome_1\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp;E:\software\Anaconda;E:\software\Anaconda\Library\mingw-w64\bin;E:\software\Anaconda\Library\usr\bin;E:\software\Anaconda\Library\bin;E:\software\Anaconda\Scripts;C:\Program Files\Java\jdk1.8.0_101\bin;C:\Program Files\Java\jdk1.8.0_101\jre\bin;C:\ProgramData\Oracle\Java\javapath;E:\software\database\oracle11g\product\11.2.0\dbhome_1\bin;E:\software\tomcat Server\apache-tomcat-8.0.28\bin;E:\software\database\mysql\MySQL Server 5.5\bin;C:\Windows\System32;E:\software\WinSCP\WinSCP\;E:\software\Git\bin;E:\software\Git\cmd;C:\Program Files (x86)\scala\bin;C:\Program Files (x86)\scala\jre\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files (x86)\sbt\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\software\hadoop-common-2.2.0-bin-master\sbin;%ERLANG_HOME%\bin;C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.10\sbin;E:\software\redis\;E:\software\MongoDB\bin;E:\software\Microsoft VS Code\bin;F:\Gradle_Build\gradle-4.9\bin;C:\WINDOWS\System32\OpenSSH\;E:\software\TortoiseSVN\bin;C:\Go\bin;C:\Program Files (x86)\scala\bin;E:\software\hadoop-common-2.2.0-bin-master\bin;E:\ApacheSoftwareFoundation\apache-ant-1.10.5\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\bin\win64;C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\common\lib\x64;E:\software\cuda\bin;E:\software\cuda\include;E:\software\cuda\lib\x64;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\software\mysql-8.0.11-winx64\bin;F:\java_system\MQ\Zookeeper\Source_code\zookeeper-branch-3.4\bin;E:\software\Python2.7;E:\software\Nodejs\;E:\software\Brackets\command;E:\software\UltraEdit;E:\software\TortoiseGit\bin;C:\Program Files\Git\cmd;E:\software\curl-7.66.0-win64-mingw\bin;E:\software\Ruby24-x64\bin;E:\software\Ruby22-x64\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;E:\ApacheSoftwareFoundation\apache-maven-3.5.0\bin;E:\software\Nodejs\node_global;E:\software\Microsoft VS Code\bin;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;F:\Program Files\Docker Toolbox;C:\Users\HASEE\AppData\Local\Microsoft\WindowsApps;E:\software\JetBrains\PyCharm 2018.3.2\bin;E:\software\JetBrains\IntelliJ IDEA 2019.1.2\IntelliJ IDEA 2018.3\bin;;C:\Users\HASEE\AppData\Roaming\npm;E:\software\JetBrains\WebStorm2019.1.2\WebStorm 2019.1.2\bin;, PyCharm=E:\software\JetBrains\PyCharm 2018.3.2\bin;, OS=Windows_NT, COMPUTERNAME=DESKTOP-34LFR52, NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, CATALINA_HOME=E:\software\tomcat Server\apache-tomcat-7.0.78, SBT_HOME=C:\Program Files (x86)\sbt, CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, PROCESSOR_REVISION=9e09, CLASSPATH=.;C:\Program Files\Java\jdk1.8.0_101\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_101\lib\tools.jar;E:\software\tomcat Server\apache-tomcat-7.0.78\common\lib\servlet.jar;C:\Program Files (x86)\sbt\conf;, CommonProgramW6432=C:\Program Files\Common Files, GOROOT=C:\Go\, ComSpec=C:\WINDOWS\system32\cmd.exe, CUDA_SDK_PATH= C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, NVCUDASAMPLES9_0_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0, RUBYOPT=-Eutf-8, CUDA_BIN_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin, DOCKER_TLS_VERIFY=1, SystemRoot=C:\WINDOWS, TEMP=C:\Users\HASEE\AppData\Local\Temp, HOMEDRIVE=C:, USERPROFILE=C:\Users\HASEE, TMP=C:\Users\HASEE\AppData\Local\Temp, CUDA_PATH_V9_0=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, NUMBER_OF_PROCESSORS=8}}]
15:43:00.716 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=0}
15:43:00.716 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'Inlined Test Properties' with highest search precedence
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.2.RELEASE)
2019-10-23 15:43:01.261 INFO 10152 --- [ main] c.v.s.w.s.StockQuotesApplicationTests : Starting StockQuotesApplicationTests on DESKTOP-34LFR52 with PID 10152 (started by HASEE in D:\java\spring-project\Spring-Framework\webflux-workshop\stock-quotes)
2019-10-23 15:43:01.263 INFO 10152 --- [ main] c.v.s.w.s.StockQuotesApplicationTests : No active profile set, falling back to default profiles: default
2019-10-23 15:43:01.311 INFO 10152 --- [ main] onfigReactiveWebServerApplicationContext : Refreshing org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:02.772 INFO 10152 --- [ main] o.s.w.r.f.s.s.RouterFunctionMapping : Mapped ((GET && /hello) && Accept: [text/plain]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$269/470132045@704b2127
((POST && /echo) && (Accept: [text/plain] && Content-Type: [text/plain])) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$271/1237144823@3ee39da0
((GET && /quotes) && Accept: [application/json]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$272/1511180072@5d332969
((GET && /quotes) && Accept: [application/stream+json]) -> com.viagra.spring.workshop.stockquotes.QuoteRouter$$Lambda$273/2041264753@7cc9ce8
2019-10-23 15:43:02.802 INFO 10152 --- [ main] o.s.w.r.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2019-10-23 15:43:02.802 INFO 10152 --- [ main] o.s.w.r.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.reactive.resource.ResourceWebHandler]
2019-10-23 15:43:02.932 INFO 10152 --- [ main] o.s.w.r.r.m.a.ControllerMethodResolver : Looking for @ControllerAdvice: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:06.469 INFO 10152 --- [ctor-http-nio-1] r.ipc.netty.tcp.BlockingNettyContext : Started HttpServer on /0:0:0:0:0:0:0:0:2830
2019-10-23 15:43:06.469 INFO 10152 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 2830
2019-10-23 15:43:06.479 INFO 10152 --- [ main] c.v.s.w.s.StockQuotesApplicationTests : Started StockQuotesApplicationTests in 5.763 seconds (JVM running for 8.222)
2019-10-23 15:43:08.529 INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes : | onSubscribe([Fuseable] FluxFlattenIterable.FlattenIterableSubscriber)
2019-10-23 15:43:08.539 INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes : | request(256)
2019-10-23 15:43:09.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=85.1, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=64.28, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=867, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=66.3, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=47.8, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=87.0, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.589 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=92.049, instant=2019-10-23T07:43:09.549Z})
2019-10-23 15:43:09.599 INFO 10152 --- [ctor-http-nio-6] com.viagra.spring.workshop.stockquotes : | request(6)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=84.0, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=65.1, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=885, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=65.32, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=47.3, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=84.067, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=92.0072, instant=2019-10-23T07:43:10.549Z})
2019-10-23 15:43:10.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=83.9, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=65.5, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=879, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=67.4, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=46.91, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=88.0, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=92.17, instant=2019-10-23T07:43:11.549Z})
2019-10-23 15:43:11.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=82.87, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=66.3, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=891, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=67.9, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=48.0, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=85.4, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=96.1, instant=2019-10-23T07:43:12.549Z})
2019-10-23 15:43:12.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=85.9, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=64.98, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=852.7, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=68.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=47.7, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=87.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=94.0, instant=2019-10-23T07:43:13.549Z})
2019-10-23 15:43:13.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=82.66, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=65.4, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=856.4, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=65.72, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=46.66, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=85.3, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=92.94, instant=2019-10-23T07:43:14.549Z})
2019-10-23 15:43:14.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:14.559 ERROR 10152 --- [ctor-http-nio-6] o.s.w.s.adapter.HttpWebHandlerAdapter : Unhandled failure: 你的主机中的软件中止了一个已建立的连接。, response already set (status=200)
2019-10-23 15:43:14.559 WARN 10152 --- [ctor-http-nio-6] o.s.h.s.r.ReactorHttpHandlerAdapter : Handling completed with error: 你的主机中的软件中止了一个已建立的连接。
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=82.60, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=66.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=852.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=67.7, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=46.89, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=87.3, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='VMW', price=95.6, instant=2019-10-23T07:43:15.549Z})
2019-10-23 15:43:15.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='CTXS', price=84.2, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='DELL', price=65.3, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='GOOG', price=877, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='MSFT', price=67.7, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='ORCL', price=47.9, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | request(1)
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | onNext(Quote{ticker='RHT', price=84.42, instant=2019-10-23T07:43:16.549Z})
2019-10-23 15:43:16.549 INFO 10152 --- [ parallel-2] com.viagra.spring.workshop.stockquotes : | cancel()
2019-10-23 15:43:16.579 INFO 10152 --- [ Thread-11] onfigReactiveWebServerApplicationContext : Closing org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@45385f75: startup date [Wed Oct 23 15:43:01 CST 2019]; root of context hierarchy
2019-10-23 15:43:16.589 INFO 10152 --- [ Thread-11] r.ipc.netty.tcp.BlockingNettyContext : Stopped HttpServer on /0:0:0:0:0:0:0:0:2830
Trading Service application
Use Tomcat as a web engine
By default, spring-boot-starter-webflux
transitively brings spring-boot-starter-reactor-netty
and Spring Boot auto-configures Reactor Netty as a web server. For this application, we’ll use Tomcat as an alternative.
Note that Spring Boot supports as well Undertow and Jetty.
Use a reactive datastore
We’d like to insert users in our datastore when the application starts up. For that, create a UsersCommandLineRunner
component that implements Spring Boot’s CommandLineRunner
. In the run
method, use the reactive repository to insert TradingUser
instances in the datastore.
Since the
run
method returns void, it expects a blocking implementation. This is why you should use theblockLast(Duration)
operator on theFlux
returned by the repository when inserting data. You can alsothen().block(Duration)
to turn thatFlux
into aMono<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
目录下的测试用例。