使用Intellij IDEA重新加载远程弹簧启动应用程序的例外

我试图使用spring devtools ,docker和IntelliJ来设置远程的spring-boot环境。 一切从这篇文章开始。 不幸的是,它随机失败,例外。 在configuration下面:

Dockerfile

FROM java:8 EXPOSE 8888 WORKDIR /app ADD build.gradle /app/build.gradle ADD gradlew /app/gradlew ADD gradle /app/gradle ADD src /app/src RUN ["chmod", "+x", "/app/gradlew"] 

泊坞窗,compose.yml

 backend: build: . env_file: environment ports: - "8888:8888" volumes: - ./.gradle-docker:/root/.gradle command: "/app/gradlew clean bootRun" links: - db db: image: postgres:9.5.3 env_file: environment ports: - "5454:5432" 

整个应用程序从命令行开始: docker-compose builddocker-compose up命令。

在IntelliJ中,我准备了下面的java应用程序configuration: 组态

docker:8888是Spring应用程序使用的docker-machine和port的IP地址。 configuration运行后是以下输出:

 /\\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \ \\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) ) ' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / / =========|_|==============|___/===================================/_/_/_/ :: Spring Boot Remote :: (v1.3.5.RELEASE) 2016-07-06 12:48:51.997 INFO 17731 --- [ main] osbdevtools.RemoteSpringApplication : Starting RemoteSpringApplication v1.3.5.RELEASE on opal-mac.local with PID 17731 (/Users/opal/.gradle/caches/modules-2/files-2.1/org.springframework.boot/spring-boot-devtools/1.3.5.RELEASE/ab035bdc1e6297ff4c8676edd93ed307b11353c2/spring-boot-devtools-1.3.5.RELEASE.jar started by opal in /Users/opal/projects/backend) 2016-07-06 12:48:52.013 INFO 17731 --- [ main] osbdevtools.RemoteSpringApplication : No active profile set, falling back to default profiles: default 2016-07-06 12:48:52.106 INFO 17731 --- [ main] scaAnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@441772e: startup date [Wed Jul 06 12:48:52 CEST 2016]; root of context hierarchy 2016-07-06 12:48:54.016 WARN 17731 --- [ main] osbdrcRemoteClientConfiguration : The connection to http://docker:8888 is insecure. You should use a URL starting with 'https://'. 2016-07-06 12:48:54.419 WARN 17731 --- [ main] osbdaOptionalLiveReloadServer : Unable to start LiveReload server 2016-07-06 12:48:54.499 INFO 17731 --- [ main] osbdevtools.RemoteSpringApplication : Started RemoteSpringApplication in 3.793 seconds (JVM running for 5.004) 

不幸的是,在对代码进行了一些更改之后,会发生以下exception:

 2016-07-06 12:49:29.141 INFO 17731 --- [ File Watcher] osbdrcClassPathChangeUploader : Uploaded 1 class resource 2016-07-06 12:49:31.056 INFO 17731 --- [ File Watcher] osbdrcClassPathChangeUploader : Uploaded 1 class resource Exception in thread "File Watcher" java.lang.IllegalStateException: java.net.ConnectException: Connection refused at org.springframework.boot.devtools.remote.client.ClassPathChangeUploader.onApplicationEvent(ClassPathChangeUploader.java:107) at org.springframework.boot.devtools.remote.client.ClassPathChangeUploader.onApplicationEvent(ClassPathChangeUploader.java:56) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:166) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:138) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:335) at org.springframework.boot.devtools.classpath.ClassPathFileChangeListener.publishEvent(ClassPathFileChangeListener.java:68) at org.springframework.boot.devtools.classpath.ClassPathFileChangeListener.onChange(ClassPathFileChangeListener.java:64) at org.springframework.boot.devtools.filewatch.FileSystemWatcher.fireListeners(FileSystemWatcher.java:230) at org.springframework.boot.devtools.filewatch.FileSystemWatcher.updateSnapshots(FileSystemWatcher.java:223) at org.springframework.boot.devtools.filewatch.FileSystemWatcher.scan(FileSystemWatcher.java:183) at org.springframework.boot.devtools.filewatch.FileSystemWatcher.access$100(FileSystemWatcher.java:41) at org.springframework.boot.devtools.filewatch.FileSystemWatcher$1.run(FileSystemWatcher.java:150) Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) at sun.net.www.http.HttpClient.New(HttpClient.java:308) at sun.net.www.http.HttpClient.New(HttpClient.java:326) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1169) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:933) at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:80) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:93) at org.springframework.boot.devtools.remote.client.HttpHeaderInterceptor.intercept(HttpHeaderInterceptor.java:57) at org.springframework.http.client.InterceptingClientHttpRequest$InterceptingRequestExecution.execute(InterceptingClientHttpRequest.java:85) at org.springframework.http.client.InterceptingClientHttpRequest.executeInternal(InterceptingClientHttpRequest.java:69) at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48) at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:53) at org.springframework.boot.devtools.remote.client.ClassPathChangeUploader.onApplicationEvent(ClassPathChangeUploader.java:102) ... 12 more 

在docker和IntelliJ中:

 2016-07-06 12:49:29.141 INFO 17731 --- [ File Watcher] osbdrcClassPathChangeUploader : Uploaded 1 class resource 

日志我看到上下文重新加载。 可能是什么问题?

Spring Boot的DevTools中存在一个错误 ,这意味着如果在前一次更改触发的重新启动过程中对应用程序进行了更改,则尝试上传更改将失败。 我想我们可能需要更新DevTools来重试上传尝试。

与此同时,唯一的解决scheme是在发生由于java.net.ConnectException: Connection refused而导致失败的RemoteSpringApplication时,停止并重新启动RemoteSpringApplication