Spring Boot支持传统部署和更现代的部署形式。jar跟war都支持,这里参考springboot参考手册学习记录html
springboot项目支持建立可执行Jar,参考手册第11.5. Creating an Executable Jar就有对这样的介绍,我这里充当一回搬运工(你们好,我是大天然勤劳的搬运工~~):mysql
咱们经过建立一个彻底自包含的可执行jar文件来完成咱们的示例,该文件能够在生产环境中运行。可执行jar(有时称为“胖jar”)是包含编译类和代码须要运行的全部jar依赖项的归档文件linux
要建立一个可执行jar,咱们须要将spring-boot-maven-plugin添加到咱们的pom.xml中。为此,在dependencies部分下面插入如下几行:git
<!--构建工具--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
若是须要制定jar包名称、生成路径,以及跳过测试github
<!--构建工具--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 文件名以及输出路径--> <configuration> <finalName>${project.artifactId}</finalName> <outputDirectory>../package</outputDirectory> </configuration> </plugin> <!-- 跳过启动测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> </plugins> </build>
若是是在父类的pom文件进行统一管理,而后子类引入父类,这须要加pluginManagement标签web
<!--构建工具--> <build> <pluginManagement>
... </pluginManagement> </build>
2019-08-23补充:以前打包都是一个多个工程管理,在父类的pom文件配置这个,打包会在目录下面生成,由于用的是../packagespring
最近打包一个单独的项目,路径我改为package,没有../了,打包后并无在项目下面生成package目录,jar不知道打去哪了。。。我全局搜也搜不出来sql
后面改为绝对路径F:/package,终于有jar包了,但文件名不对,咱们明明设置读取的是${project.artifactId},但打出来仍是带上了版本号。。。,缘由暂时未知
可使用命令行来打包,或者使用Maven Projects来打包
打包成功,在target目录下就会看到jar包
要运行该应用程序,cmd命令,进入到jar所在路径文件,使用 java -jar 命令;win下直接双击用java方式打开便可运行(Ctrl+C退出)
那么Linux下面如何部署运行呢?
=====Linux部署命令======
0、查看运行的项目 pgrep java | xargs ps 1、先kill掉旧服务 pkill -f myspringboot-0.0.1-SNAPSHOT 2、后台启动新服务(nohup后台运行,&后台运行的区别: 使用nohup运行程序: 结果默认会输出到nohup.out 使用Ctrl + C发送SIGINT信号,程序关闭 关闭session发送SIGHUP信号,程序免疫 使用&后台运行程序: 结果会输出到终端 使用Ctrl + C发送SIGINT信号,程序免疫 关闭session发送SIGHUP信号,程序关闭 ) nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar & 如需输出日志 nohup java -jar /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.jar > /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log & 3、查看日志 tail -f /home/myspringboot/myspringboot-0.0.1-SNAPSHOT.log
2019-07-08补充:
1、当咱们打包后上传Linux服务器,发现有些代码还须要修改,从新打包、上传又比较慢,若是只是少许代码,而且是前端代码、配置文件等,那么咱们能够直接修改jar包内容
一、先cd进到jar位置,而后使用 vim 命令进入jar包
二、使用 / 命令模糊搜索定位文件,例如main.js
三、按回车进入文件,修改完成后使用 :wq 保存退出文件,回到jar包目录,使用 :q 退出jar包,便可成功修改文件内容
PS:修改jar,重启生效
2、若是咱们须要改动的是后端java代码,那么我就须要在本地改好后从新编译代码,把对应的java、class文件都替换到jar包
springboot项目支持建立一个可部署的War文件,参考手册第92.1 Create a Deployable War File就有对这样的介绍,我这里充当一回搬运工(你们好,我是大天然勤劳的搬运工~~):
因为Spring WebFlux并不严格依赖于Servlet API,而且应用程序默认部署在嵌入式反应器Netty服务器上,因此WebFlux应用程序不支持War部署。
生成可部署war文件的第一步是提供SpringBootServletInitializer子类并覆盖其配置方法。这样作能够利用Spring Framework的Servlet 3.0支持,让您在Servlet容器启动应用程序时配置它。一般,您应该更新应用程序的主类以扩展SpringBootServletInitializer,同时,要将Spring应用程序部署到外部服务器,必须确保servlet初始化器直接实现WebApplicationInitializer(即便是从已经实现它的基类扩展而来)。以下例所示:
@SpringBootApplication public class MyspringbootApplication extends SpringBootServletInitializer implements WebApplicationInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyspringbootApplication.class); } public static void main(String[] args) { SpringApplication.run(MyspringbootApplication.class, 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
将全部的东西都补全后仍是报错...
上网查了一下,说两种问题:一、Tomcat问题,二、jar包问题
咱们以前的Tomcat版本是apache-tomcat-7.0.53,去官网看来下,只支持6 and later(7 and later for WebSocket)
但咱们项目用的jdk版本是1.8.0_131,须要9.0.x版的Tomcat才支持,直接下载最新版Tomcat
成功启动
PS:
一、因为使用外部服务器,咱们在项目的配置文件配置的server.port=10081已经没有用了,端口信息须要咋Tomcat的server.xml进行配置
<Connector port="10081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
二、解决Tomcat中文乱码,修改conf/logging.properties
java.util.logging.ConsoleHandler.encoding = GBK
三、为了安全,webapps只保留项目文件
四、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
//查看是否已安装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';
配置到这里就可使用数据库工具去链接操做数据库了
代码已经开源、托管到个人GitHub、码云: