使用 Intellij IDEA 重新加载远程 spring 启动应用程序时出现异常
Exception on reloading remote spring boot application with Intellij IDEA
我正在尝试使用 spring devtools, docker and IntelliJ. All started with this article 设置远程 spring- 引导环境。不幸的是,它随机失败并出现异常。下面的配置:
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"]
docker-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 build
和 docker-compose up
命令。
在 IntelliJ 中,我准备了以下 java 应用程序配置:
其中 docker:8888
是 docker 机器的 IP 和 spring 应用程序使用的端口。配置为运行后输出如下:
/\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: (v1.3.5.RELEASE)
2016-07-06 12:48:51.997 INFO 17731 --- [ main] o.s.b.devtools.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] o.s.b.devtools.RemoteSpringApplication : No active profile set, falling back to default profiles: default
2016-07-06 12:48:52.106 INFO 17731 --- [ main] s.c.a.AnnotationConfigApplicationContext : 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] o.s.b.d.r.c.RemoteClientConfiguration : 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] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
2016-07-06 12:48:54.499 INFO 17731 --- [ main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 3.793 seconds (JVM running for 5.004)
不幸的是,对代码进行了一些更改后,出现了以下异常:
2016-07-06 12:49:29.141 INFO 17731 --- [ File Watcher] o.s.b.d.r.c.ClassPathChangeUploader : Uploaded 1 class resource
2016-07-06 12:49:31.056 INFO 17731 --- [ File Watcher] o.s.b.d.r.c.ClassPathChangeUploader : 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.access0(FileSystemWatcher.java:41)
at org.springframework.boot.devtools.filewatch.FileSystemWatcher.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] o.s.b.d.r.c.ClassPathChangeUploader : Uploaded 1 class resource
logs 我看到上下文已重新加载。可能是什么问题?
Spring boot 的 DevTools 中有一个 bug,这意味着如果您对应用程序进行更改,而由先前更改触发的重启仍在进行中,则尝试上传更改将失败。我认为我们可能需要更新 DevTools 以重试上传尝试。
与此同时,唯一的 "solution" 是在您看到由于 java.net.ConnectException: Connection refused
.
导致的故障时停止并重新启动您的 RemoteSpringApplication
我正在尝试使用 spring devtools, docker and IntelliJ. All started with this article 设置远程 spring- 引导环境。不幸的是,它随机失败并出现异常。下面的配置:
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"]
docker-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 build
和 docker-compose up
命令。
在 IntelliJ 中,我准备了以下 java 应用程序配置:
其中 docker:8888
是 docker 机器的 IP 和 spring 应用程序使用的端口。配置为运行后输出如下:
/\ / ___'_ __ _ _(_)_ __ __ _ ___ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | | _ \___ _ __ ___| |_ ___ \ \ \ \
\/ ___)| |_)| | | | | || (_| []::::::[] / -_) ' \/ _ \ _/ -_) ) ) ) )
' |____| .__|_| |_|_| |_\__, | |_|_\___|_|_|_\___/\__\___|/ / / /
=========|_|==============|___/===================================/_/_/_/
:: Spring Boot Remote :: (v1.3.5.RELEASE)
2016-07-06 12:48:51.997 INFO 17731 --- [ main] o.s.b.devtools.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] o.s.b.devtools.RemoteSpringApplication : No active profile set, falling back to default profiles: default
2016-07-06 12:48:52.106 INFO 17731 --- [ main] s.c.a.AnnotationConfigApplicationContext : 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] o.s.b.d.r.c.RemoteClientConfiguration : 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] o.s.b.d.a.OptionalLiveReloadServer : Unable to start LiveReload server
2016-07-06 12:48:54.499 INFO 17731 --- [ main] o.s.b.devtools.RemoteSpringApplication : Started RemoteSpringApplication in 3.793 seconds (JVM running for 5.004)
不幸的是,对代码进行了一些更改后,出现了以下异常:
2016-07-06 12:49:29.141 INFO 17731 --- [ File Watcher] o.s.b.d.r.c.ClassPathChangeUploader : Uploaded 1 class resource
2016-07-06 12:49:31.056 INFO 17731 --- [ File Watcher] o.s.b.d.r.c.ClassPathChangeUploader : 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.access0(FileSystemWatcher.java:41)
at org.springframework.boot.devtools.filewatch.FileSystemWatcher.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] o.s.b.d.r.c.ClassPathChangeUploader : Uploaded 1 class resource
logs 我看到上下文已重新加载。可能是什么问题?
Spring boot 的 DevTools 中有一个 bug,这意味着如果您对应用程序进行更改,而由先前更改触发的重启仍在进行中,则尝试上传更改将失败。我认为我们可能需要更新 DevTools 以重试上传尝试。
与此同时,唯一的 "solution" 是在您看到由于 java.net.ConnectException: Connection refused
.
RemoteSpringApplication