, args);
在创建springboot项目时,默认是jar包,如果是想要打成war包,需要修改pom.xml,打包方式跟生成路径跟jar的一样,过程的最后一步是确保嵌入的servlet容器不会干扰部署war文件的servlet容器。为此,需要将嵌入式servlet容器依赖项标记为所提供的。
<!--默认jar-->
<packaging>war</packaging>
<!-- 如需打成war包 确保嵌入的servlet容器不会干扰部署war文件的servlet容器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!--构建工具-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
得到war包后把它丢到服务容器里(放在webapps文件夹下)run起来就行了,要注意的是使用了外部容器,要记得改Tomcat的端口,在server.xml的Connector节点
友情翻译:如果使用Spring引导构建工具,将嵌入的servlet容器依赖项标记为提供,将生成一个可执行的war文件,并将提供的依赖项打包在lib提供的目录中。这意味着,除了可以部署到servlet容器之外,还可以在命令行上使用java -jar运行应用程序。
打成war包丢到服务器里面运行启动报错,还不知道是什么问题,都是照着参考手册来的...,先记录到这里;推荐直接使用jar的方式运行,war报错的原因,有空再去研究。
2019-06-24补充:我将我们前面写的IM系统按照步骤打成war包,但启动Tomcat报错
2019-07-12补充,后面看文档后发现,我们漏了一下东西,如果使用Logback,还需要告诉WebLogic选择打包版本,而不是预先安装在服务器上的版本。而SpringBoot默认使用Logback,同时,之前我们也漏了 implements WebApplicationInitializer
将所有的东西都补全后还是报错...
上网查了一下,说两种问题:1、Tomcat问题,2、jar包问题
我们之前的Tomcat版本是apache-tomcat-7.0.53,去官网看来下,支持6 and later(7 and later for WebSocket)
发现9.0.x版的Tomcat也支持1.8及1.8以上,我们项目用的jdk版本是1.8.0_131,我们直接下载最新版Tomcat试一下
同时我们也注意到,springboot 2.x的内置Tomcat使用的是9.x
1、由于使用外部服务器,我们在项目的配置文件配置的server.port=10081已经没有用了,端口信息需要咋Tomcat的server.xml进行配置
<Connector port="10081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8"/>
2、解决Tomcat中文乱码,修改conf/logging.properties
java.util.logging.ConsoleHandler.encoding = GBK
3、为了安全,webapps只保留项目文件
4、Tomcat的本质是文件夹,默认配置下访问项目要加war包名称,例如: :端口/war包名/路径
这是因为我们server.xml的host节点的默认appBase="webapps"
新增一个默认访问路径就可以不用加war包名称了,例如:
然后就可以这样访问了
到这里war包启动报错的问题终于解决!
2019-08-26补充:补充一下如何云安装java的jdk,以及mysql数据库,这里主要参考以下博客文章(亲测可用):
linux在线安装JDK(1.8版本):https://blog.csdn.net/zxb730916/article/details/80899429?tdsourcetag=s_pctim_aiomsg
Linux之yum安装MySQL:https://www.jianshu.com/p/136003ffce41
//查看是否已安装JDK,卸载
yum list installed |grep java
//卸载CentOS系统Java环境
// *表时卸载所有openjdk相关文件输入
yum -y remove java-1.8.0-openjdk*
// 卸载tzdata-java
yum -y remove tzdata-java.noarch
//列出java环境安装包
yum -y list java*
// 安装JDK,如果没有java-1.8.0-openjdk-devel就没有javac命令
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
使用 java -version 查看版本号确认是否安装成功
mysql
下载、安装
//下载
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
//安装
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
启动、配置
//启动
systemctl start mysqld.service
//查看root初始密码
grep "password" /var/log/mysqld.log
//使用root登录mysql
mysql -uroot -p
//设置安全级别
set global validate_password_policy=0
//默认密码长度为8,可以设置为其它值,最小4位
set global validate_password_length=4
//修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
//可视化工具的登录授权:(如果授权不成功,请查看防火墙)
grant all on *.* to root@'%' identified by 'root';
配置到这里就可以使用数据库工具去连接操作数据库了
jar包瘦身
2021-08-09更新
我们正常打的jar包,是会把依赖的相关jar也打进去,一般情况下,项目正常运行后我们极少会去修改相关依赖的版本
因此,我们可以把相关依赖jar包从我们的jar包中剔除出来,运行项目时再指定相关依赖包的路径,减少jar包的大小,方便进行传输
pom文件修改
<!-- 原打包配置 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 文件名以及输出路径 -->
<configuration>
<finalName>${project.artifactId}-thin</finalName>
<outputDirectory>../package</outputDirectory>
</configuration>
</plugin>
<!-- jar包瘦身,移除相关依赖jar-打包配置 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 文件名以及输出路径 -->
<configuration>
<finalName>${project.artifactId}-thin</finalName>
<outputDirectory>../package</outputDirectory>
${project.artifactId}-thin
jar包瘦身,不把依赖包打进jar中,可减少jar包大小,
需要在启动命令指定依赖包路径:-Dloader.path="D:develop/shared/fjar"
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>cn.huanzi.qch.springbootjarwar.SpringbootJarWarApplication</mainClass>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
我们分别打包测试,看下到底能瘦身多少,直接运行package
震惊!一个17M,一个90K
首先,需要先将正常jar包里的相关依赖jar包lib先解压到外面,然后在启动命令指定依赖jar包路径
瘦身后的jar包启动:java -jar -Dloader.path="D:\github-code\springBoot\package\lib" springboot-jar-war-thin.jar
将相关依赖jar包从我们的jar包移除,大大减少了我们jar包的体积大小,如果再配合上我们之前的《WebJar的打包和使用》,将静态资源打成WebJar,然后再在pom文件中引用,将静态资源变成相关依赖jar包,这样又可以减少不少jar包体积大小,真正做到瘦成一道闪电!
代码已经开源、托管到我的GitHub、码云:
GitHub:https://github.com/huanzi-qch/springBoot
码云:https://gitee.com/huanzi-qch/springBoot