linux部署SpringBoot项目
小白第一次使用Linux部署springboot项目,期间遇到一些问题,通过这篇文章记录下来。
SpringBoot部署有两种方式一是打包成jar文件运行,另外是打包war文件放到tomcat下运行。本文记录了运行jar文件方式进行部署(打包动作在Eclipse下进行)。
项目打包
首先对application.properties文件进行配置:
设置开发配置,默认为"dev"。打包时改为“prod”,启用生产配置。
#Profile设置
spring.profiles.active=dev
SpringBoot中内置tomcat,配置内置tomcat端口,注意不与已被占用端口号冲突,并且Linux中防火墙允许该端口
#内置tomcat端口配置
server.port=8081
application.properties文件需要添加的东西不多,然后在pom.xml上添加相关插件和依赖:
<!-- 给maven指定jdk版本编译 -->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf8</encoding>
</configuration>
</plugin>
<!-- maven单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<!--maven打包Spring项目为jar文件或war文件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打包方式也要修改成jar文件
<packaging>jar</packaging>
然后,对启动类进行修改,我的项目启动类为Application.class,给启动类继承SpringBootServletInitializer类,并重写configure方法。一开始我没有做这个操作,打包成jar文件后,jar文件内的MANIFEST.MF中缺少主清单属性,在linux下运行是会报错“no main manifest attribute, in xxxx.jar”:
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
return application.sources(Application.class);
}
}
接下来通过maven对项目进行打包生成jar文件,打包有两种方式:1.项目—运行方式—Maven build,输入执行代码“clean package -Dmaven.test.skip=true”; 2.项目—运行方式—Maven install;顺利的话,打包成功,jar文件在项目target文件夹下。
但在打包过程中,我遇到一些问题。
第一个是报错“[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?”,这个错误就是需要你改jdk编译环境,在Eclipse上 Window—Preference—Java—installed JREs,然后选择jdk。
修改后,原来的错误解决了,但还有新的错误,控制台报错找不到包和符号,百度一通也没解决,就将它报出缺少的包在pom.xml上都添加上,运行成功。不过这些包有些也是不需要的,需要自己一个一个试然后删除,否则生成的jar文件运行会出现包冲突情况。
linux导入sql文件
想要jar文件正常运行,得在Linux下创建对应的数据库,并将数据库内的数据结构,数据导入。外部sql文件生成就不说了,说下怎么将sql导入Linux下:
将sql文件传输到linux下,存在哪个目录自定义,以“/usr/sql”为例;
mysql -u root -p 进入mysql;
.>create database xxx(数据库名);
.>use xxx(数据库名)
.>source /usr/sql/xxx.sql
完成导入
Linux运行jar文件
首先把jar文件拉入Linux里面,目录自定义,以“/usr/project”为例;
cd /usr/project 进入jar文件所在目录
java -jar xxx.jar
运行成功!