springboot项目打包部署,由于springboot内置tomcat,所以 springboot应用部署有两种方式: 1,打jar包运行; 2,打war包放到tomcat中运行
1:打jar包运行
打jar包可以直接用Java -jar 命令运行;前后端分离项目在本地可以分别启动服务器启动,但是部署到Linux系统上时需要合二为一, 所以操作步骤是: 1,前端项目将后端IP链接配置改为linux服务器地址之后, 运行 npm run build 命令 构建好前端项目;2,将前端项目复制到后端项目的resource目录下的static 文件夹下,若果没有就创建一个(spring boot默认将static作为请前端静态文件根目录),之后运行后端打 jar包,在pom.xml文件里面配置打jar包还是war包;注意这里有两个小坑:打包可能会漏掉某些格式的配置文件,像一些二进制的静态文件直接打包可能会损坏,此时需要添加一些maven打包配置,配置如下:
<!-- resource插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<!--配置以下格式的二进制文件打包时不进行转码操作-->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
<!--springboot项目maven打jar包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
这样打好jar包就可以去linux部署了; 用xshell链接linux系统,,配置好Java及Java_home之后,在你想要部署的目录下 运行 rz 命令调起上传文件框,将jar包上传至linux系统,运行 nohup java -jar xxx.jar & 命令就可以后台运行你的web应用了; 之后会在当前文件夹下生成日志文件,tail nohup.out 命令查看日志,看看是否启动成功; 运行 ps -ef |grep java 查找java 进程 拿到pid 之后 运行 kill -9 pid 杀死进程就能停掉你的web项目
这种方式启动,停止都很方便,但是会带来其他问题,如果你的应用在运行期间动态生成了临时文件,然后还以路劲的形式去读取此文件时就会报 文件找不到异常,因为jar包是在内存中解压运行的,临时文件会生成到jar包里面,然后以路径的方式去访问时遇到jar包,由于其不是文件夹,所以会报错;此时如果项目有这种业务需求时,则可以考虑打war包运行,因为tomcat会先将其解压
2:打war包运行
这种方式就比较常见了,同样,前端build好项目之后,放到后台static目录下,后台打war包,同样为避免打包文件损坏或丢失问题,加上以下配置:
<!-- compiler插件, 设定JDK版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<showWarnings>true</showWarnings>
</configuration>
</plugin>
<!-- resource插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<!--配置以下格式的二进制文件打包时不进行转码操作-->
<nonFilteredFileExtensions>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
<!-- war打包插件, 设定war包名称不带版本号 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warName>${project.artifactId}</warName>
<!--将类文件打成jar包-->
<archiveClasses>true</archiveClasses>
<!--将资源文件打到classes目录下-->
<webResources>
<resource>
<directory>src/main/resources</directory>
<targetPath>WEB-INF/classes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
打好war包之后,用xshell链接linux系统,,配置好Java及Java_home之后,运行 rz 命令调起上传文件框,将jar包上传至linux系统,找到tomcat所在 目录,,使用root用户 运行 sudo chmod -R 777 /xxx/xxx(tomcat所在目录) 命令;分配给 tomcat目录及其子目录 读写 以及执行 的权限 ; 在此之后将war包 放置 tomcat 的webapps目录下,之后启动 tomcat,,tomcat就会自动解压你的war包并运行你的项目,此时在浏览器 输入 服务器ip 加上tomcat端口,加上你的应用名加上首页(index.html)访问成功,则说明项目部署成功! 同样 ,运行 ps -ef |grep java 查找java 相关, tomcat 的进程 拿到pid 之后 运行 kill -9 pid 杀死进程就能停掉你的web项目
总结:打包会使某些二进制文件损坏这中问题还是头次遇到,特此记录下来; 另外打war包和jar包 看似差不多,却会因为 运行的方式不同而导致出现不同的问题,比如这次遇到的,若生成临时静态文件,并需要以路径的方式去读取时就出现文件找不到的问题,这就是打jar包导致的!