Java项目部署(后端)
前言jar包和war包启动区别
-
jar包:执行SpringBootApplication的run方法,启动IOC容器,然后创建嵌入式Servlet容器
-
war包: 先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动IOC容器
一、Liunx war包部署:
1.部署环境:
- jdk
- tomcat
- 其余环境自行配置(诸如:redis,activeMq,mySql)
2.将项目打成war包并使用工具上传
-
1.如果是springboot/springCloud项目需要修改启动类下面的 pom.xml文件
-
修改打包方式 (不存在可以自定义添加)
<packaging>war</packaging>
-
移除tomcat依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency>
-
添加支持 外部tomcat 依赖,用于编译和测试
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!-- 该包只在编译和测试的时候使用 --> <scope>provided</scope> </dependency>
-
配置启动类Springboot和springCloud的启动类:继承*SpringBootServletInitializer,重写configure,让war包支持tomcat启动
@Configuration @EnableAutoConfiguration @ComponentScan public class StartApplication extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(StartApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(StartApplication.class); } }
-
注:
- 为了避免资源无法访问可以在pom.xml中设置如下操作
<build>
<!-- 应与application.properties(或application.yml)中context-path保持一致 -->
<finalName></finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- 配置java版本-->
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.7</source>
<target>1.7</target>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
- 4.使用maven 的intall指令打成war包(采用项目名即父类模块 install 这样可以不用考虑顺序一键完成所有项目打包)
- 5.将打好的war上传到tomcat 的webapps目录下即可(可以使用WinScp连接服务进行拖拽上传)
3.修改tomcat信息:(修改 tomcat下的conf/server.xml文件)
-
1.修改tomcat的端口号:将8080端口修改为 80(修改后如下)
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-
2.配置虚拟路径
<Host name="localhost" appBase="/alidata/www/" unpackWARs="true" autoDeploy="true"> <Context path="/" docBase="/alidata/www/shop" debug="0"/> <Context path="/file" docBase="/alidata/www/image" debug="0"/> <Context path="/solr" docBase="/alidata/www/solr" debug="0"/> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
<Host name="localhost" appBase="/alidata/www/"/>
- name:对应的是你项目的域名; 默认localhost即可;域名可以直接给外网配置域名即可。
- appBase :war包的存放位置:默认为:webapps在tomcat的webapps中,如果不想存储在tomcat 的webapps文件中可以再此处修改;tomcat运行后自动部署的文件配置指的就是此处。
<Context path="/file" docBase="E:/goods" debug="0" reloadable="true" crossContext="true" />
- path: 浏览器访问路径:本地 —— localhost:端口+path
- docBase: path路径访问的根目录文件:本地 —— localhost:端口+path 代表浏览器访问 本地的 E盘下的goods
注:Context 标签可以配置多个,前提是path唯一 并且服务气的内存足够大可以保证项目运行,即多个虚拟路径,Context虚拟路径;第一个Context支持 ip+"/" 也支持 ip +path值;亦或 域名+ / or 域名 + path值。
4、注意事项:
注:前后端不分离的项目或者项目前端页面是tomcat进行虚拟映射配置需要注意。例如:项目名叫
path="/file" 使用file作为虚拟路径,在页面 Css和Js引入
中存在如何引入:
<link href="/file/css/perfect-scrollbar.min.css" rel="stylesheet" type="text/css" />
则上传到服务的tomcat前需要修改为
<link href="/file/file/css/perfect-scrollbar.min.css" rel="stylesheet" type="text/css" />
因为至第一个/file 表示的是前端页面存放的位置,E:/goods目标引入文件在 E:/goods/shop 即虚拟路径/file替代了 E:/goods
- 解决方法 起一个和Css等引入路径不冲突的变量为 虚拟路径名称
- 上传前修改前端页面中 Css等文件的引用路径,即增加一个 tomcat中配置的path名称
二、Windows 服务部署 war
操作过程大致如上
三、Linux服务部署 jar(推荐用于 springBoot,springCloud项目部署)
1.服务环境配置
- jdk
- 其余环境自行配置(诸如:redis,activeMq,mySql)
2.项目直接使用 mvn指令 install 打成jar包
3.使用远程连接软件(如WinScp等)拖拽上传
4.使用指令进行项目启动
java -jar sparrow.jar
含义:启动sparrow.jar项目,窗口被锁定。关闭指令框者服务关闭
推荐使用如下指令:
nohup java -jar sparrow.jar > sparrow.txt 2>&1 &
含义: 不断执行 java sparrow.jar项目并将完整日志输入到sparrow.txt文件中
- nohup 是linux不断执行的意思可以保证jar启动后可以再后台一直运行(即管理指令框项目不会关闭)
sparrow.txt 标准日志输出的文件位置
- 2>&1 也就表示将错误重定向到标准输出上(不加上 日志输出不完整)
注:如果服务内存过小可以指定Xms(分配堆最小内存)和Xmx(最大内存) 实现服务内存资源性能最大化。
nohup java -Xms128m -Xmx512m -jar sparrow.jar > sparrow.txt 2>&1 &
- Xms分配堆最小内存,默认为物理内存的1/64;-Xmx分配最大内存,默认为物理内存的1/4。
四、Windows部署 jar包
1.服务环境配置
- jdk
- 其余环境自行配置(诸如:redis,activeMq,mySql)
2.项目直接使用 mvn指令 install 打成jar包
3.使用远程连接软件(如WinScp等)拖拽上传
4.打开cmd: doc界面运行如下指令,进行项目启动(doc界面不能关闭)
java -jar sparrow.jar
注:如果想要保证项目在后台运行,可以执行百度