【发布时间】:2016-01-04 21:27:41
【问题描述】:
我最近升级了我的应用程序以使用 v1.3.1,以便我可以删除管理上下文路径问题的解决方法。当我现在尝试启动应用程序时,它只是抱怨无效的 JVM 参数,但除了春季启动版本更改之外,jvm 参数或应用程序没有变化。
我并排安装了旧(w/boot v1.3.0)和新(w/boot v1.3.1)版本,init.d 服务脚本似乎有问题。以下是我在 vagrant ubuntu 主机上并排安装的不同版本的示例服务 -
v0.0.1-218655-SNAPSHOT = with spring boot v1.3.1
v0.0.1-218570-SNAPSHOT = with sprint boot v1.3.0
Ubuntu 版本
vagrant@account-service-ubuntu:~$ cat /etc/issue
Ubuntu 14.04.3 LTS \n \l
Java 版本
vagrant@account-service-ubuntu:~$ which java
/opt/java/oracle/jdk1.8.0_60/bin/java
自定义启动脚本的服务版本和conf文件-
vagrant@account-service-ubuntu:~$ ls -rtl /var/account-service/
total 64308
-rwxr-xr-x 1 account-service account-service 32941156 Jan 4 11:48 account-service-0.0.1-218655-SNAPSHOT.jar
-rwxr-xr-x 1 account-service account-service 304 Jan 4 11:48 account-service-0.0.1-218655-SNAPSHOT.conf
-rwxr-x--- 1 account-service account-service 32895698 Jan 4 12:09 account-service-0.0.1-218570-SNAPSHOT.jar
-rwxr-x--- 1 account-service account-service 304 Jan 4 12:09 account-service-0.0.1-218570-SNAPSHOT.conf
跨应用版本的Spring boot版本-
vagrant@account-service-ubuntu:~$ sudo /opt/java/oracle/jdk1.8.0_60/bin/jar tf /var/account-service/account-service-0.0.1-218570-SNAPSHOT.jar | grep "spring-boot-1"
lib/spring-boot-1.3.0.RELEASE.jar
vagrant@account-service-ubuntu:~$ sudo /opt/java/oracle/jdk1.8.0_60/bin/jar tf /var/account-service/account-service-0.0.1-218655-SNAPSHOT.jar | grep "spring-boot-1"
lib/spring-boot-1.3.1.RELEASE.jar
只是为了澄清启动自定义conf文件之间没有区别-
vagrant@account-service-ubuntu:~$ sudo diff /var/account-service/account-service-0.0.1-218570-SNAPSHOT.conf /var/account-service/account-service-0.0.1-218655-SNAPSHOT.conf -s
Files /var/account-service/account-service-0.0.1-218570-SNAPSHOT.conf and /var/account-service/account-service-0.0.1-218655-SNAPSHOT.conf are identical
每个 conf 文件都有以下环境变量 -
vagrant@account-service-ubuntu:~$ cat /var/account-service/account-service-0.0.1-218655-SNAPSHOT.conf
JAVA_HOME=/opt/java/oracle/jdk1.8.0_60
JAVA_OPTS="-Xms256m -Xmx256m -XX:MaxMetaspaceSize=128m -XX:HeapDumpPath=/var/account-service/ -Xloggc:/var/account-service/gc.log"
RUN_ARGS="--server.tomcat.basedir=/var/account-service/tomcat --spring.profiles.active=dev"
使用使用spring boot v1.3.0的版本启动应用程序,它可以正常启动
vagrant@account-service-ubuntu:~$ ls -rtl /etc/init.d/account-service
lrwxrwxrwx 1 root root 62 Jan 4 12:09 /etc/init.d/account-service -> /var/account-service/account-service-0.0.1-218570-SNAPSHOT.jar
vagrant@account-service-ubuntu:~$ sudo service account-service start
Started [18293]
vagrant@account-service-ubuntu:~$ ps -ef | grep -i java
account+ 19221 1 96 12:10 ? 00:00:05 /opt/java/oracle/jdk1.8.0_60/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Xms256m -Xmx256m -XX:MaxMetaspaceSize=128m -XX:HeapDumpPath=/var/account-service/ -Xloggc:/var/account-service/gc.log -jar /var/account-service/account-service-0.0.1-218570-SNAPSHOT.jar --server.tomcat.basedir=/var/account-service/tomcat --spring.profiles.active=dev
vagrant@account-service-ubuntu:~$ curl http://localhost:8081/account/manage/info
{"build":{"artifact":"account-service","name":"Account Service","version":"0.0.1-218570-SNAPSHOT"}}
现在,将符号链接更新为使用 spring boot v1.3.1 的应用版本
vagrant@account-service-ubuntu:~$ sudo service account-service stop
Stopped [19221]
vagrant@account-service-ubuntu:~$ sudo ln -f -s /var/account-service/account-service-0.0.1-218655-SNAPSHOT.jar /etc/init.d/account-service
vagrant@account-service-ubuntu:~$ ls -rtl /etc/init.d/account-service
lrwxrwxrwx 1 root root 62 Jan 4 12:17 /etc/init.d/account-service -> /var/account-service/account-service-0.0.1-218655-SNAPSHOT.jar
vagrant@account-service-ubuntu:~$ sudo service account-service start
Started [19631]
Shell 报告服务已启动,但没有进程在运行,查看控制台日志失败并出现以下 JVM 错误 -
vagrant@account-service-ubuntu:~$ cat /var/log/account-service-console.log
Invalid initial heap size: -Xms256m -Xmx256m -XX:MaxMetaspaceSize=128m -XX:HeapDumpPath=/var/account-service/ -Xloggc:/var/account-service/gc.log
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
如果我直接绕过 init 脚本启动应用程序并传递与启动自定义 conf 文件中定义的相同的环境变量,它可以正常启动
vagrant@account-service-ubuntu:~$ sudo /opt/java/oracle/jdk1.8.0_60/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Xms256m -Xmx256m -XX:MaxMetaspaceSize=128m -XX:HeapDumpPath=/var/account-service/ -Xloggc:/var/account-service/gc.log -jar /var/account-service/account-service-0.0.1-218655-SNAPSHOT.jar --server.tomcat.basedir=/var/account-service/tomcat --spring.profiles.active=dev
vagrant@account-service-ubuntu:~$ curl http://localhost:8081/manage/info
{"build":{"artifact":"account-service","name":"Account Service","version":"0.0.1-218655-SNAPSHOT"}}
还有人看到这个吗?我找不到任何关于堆栈溢出讨论的问题。我什至尝试在 github 上区分 spring boot v1.3.0 和 v1.3.1 标签,但没有发现任何明显的东西。
【问题讨论】:
-
在 1.3.1 中有几个回归,我们已经意识到了这个问题。我在#4872 中添加了指向该主题的链接。请留意更新。
标签: spring-boot