基于SpringBoot的微服务开发完之后,现在我们可以将它发布并部署到服务器环境中去运行了。(Linux服务器配置可参考文章:https://blog.csdn.net/weixin_41633941/article/details/105376774)
解析:
1.可解决运行Maven是报错:No goals have been specified for this build的问题,可理解为未指定maven执行到生命周期具体哪个阶段。compile意思将执行maven的所有阶段。(选填,我在别的项目中没有报此错误)
compile
2.让maven把src/main/resources下的所有文件进行打包。让maven将src/main/java下所有xml配置文件进行打包。
src/main/resources
**/**
<-- 以下选填 -->
src/main/java
**/*.xml
3.此处指定main方法入口的class,解决未找到主类的问题。相当于指定主类的全限定类名。
com.System.Recruitment.主类类名
4.导入外部引入的jar并进行打包。(非maven管理的jar包)
true
tips:如果项目中存在外部引用jar包,可以参考文章https://www.jb51.net/article/130449.htm
5.项目中有test测试类时在maven打包过程中也会进行运行和测试,出错会导致打包异常,可以选择跳过。
true
另外的一个pom配置小细节,代码大意是让项目打包和输出过程使用UTF-8编码。习惯了打包过程都使用UTF-8编码,不知道不使用会怎么样,下次可以试一下,我猜可能会出现打包后jar源码里中文解释乱码的情况。
UTF-8
UTF-8
1.8
3.1.1
让SpringBoot启动类继承SpringBootServletInitializer,并重写configure方法。
@SpringBootApplication
public class GcudepartApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(GcudepartApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(GcudepartApplication.class, args);
System.out.println("Start the work!");
}
}
为什么说这部分为选填部分呢,因为当我们想要将项目打包成WAR包和使用外置WEB容器时,这段代码是必须要实现的。所以当我们打包成jar和使用内置web容器时这段代码是非必要的。而SpringBootServletInitializer类就是完成这项工作,若有兴趣可以分析此类的源码。
其实配置到这一步的时候,maven就可以将SpringBoot项目打包成jar包了。但如果想要正常运行到Linux服务器上还是需要进一步对项目进行配置。
@Configuration
public class MyResourceConfigurer implements WebMvcConfigurer {
/**
* 配置静态访问资源
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/images/**").addResourceLocations("file:E:\\Recruiment\\images\\");
registry.addResourceHandler("/images/**").addResourceLocations("file:/usr/local/webapp/images/");
}
}
同时将项目中访问开发环境地址资源的改为部署环境的地址资源。
当一切准备完毕之后我们利用maven对项目进行打包
以eclipse开发工具为例:
1.maven clean
2.maven install
按如图顺序进行打包。打包完毕后从项目路径的target目录下找到jar包,修改application.preperties文件
1.因为HTTP的默认端口号是80,而我们SpringBoot项目内置的Tomcat默认是8080端口,所以在要部署的项目上的application.properties当中配置80端口。
2.同时如果使用了thymeleaf模板引擎记得把开发环境中,模板缓存关闭状态改回打开。
3.修改数据库账号密码
4.修改redis账号密码
5.修改log日志保存地址
server.port=80
spring.thymeleaf.cache=true
logging.file=/usr/local/log/rec_logger.log
首先在服务器上创建需要使用到的数据库,再执行转存的sql文件
2.使用winscp等工具将所需要的所有文件上传到Linux服务器上
cd到项目的目录中使用下属关键命令:
ps -ef | grep java 查看进程
kill -9 进程号 杀死进程
nohup java -jar xxx.jar & 后台启动jar包
输入服务器的域名或者外网地址
成功打开项目,测试成功!
由于项目需要用到连接第三方SMTP服务器需要用到TCP25端口,而腾讯云服务器的默认关闭25端口,所以需要手动去申请25端口解封。详情查看腾讯云文档,https://cloud.tencent.com/document/product/213/40436。还好在部署项目前提前看一些相关文档,不然项目SMTP功能就无法使用,甚至被禁用了。且该功能只开放给年费预付服务器用户 0.0
解封过程:
在用eclipse的maven打包过程中遇到了一个错误提示。
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
它的意思是我的java环境未提供编辑器,可能我的运行环境是JRE而不是JDK。后来我检查系统的JAVA_HOME配置才发现我一直在使用jre在开发编程。天呐,原来我在之前重装系统的时候配错了,不过那时候还多配了一个版本JDK,最后通过我直接修改JAVA_HOME路径和开发工具的JDK版本后,此问题解决。
下面列出百度出来的JRE和JDK的定义:
JRE(Java Runtime Enviroment)是Java的运行环境。面向Java程序的使用者,而不是开发者。如果你仅下载并安装了JRE,那么你的系统只能运行Java程序。JRE是运行Java程序所必须环境的集合,包含JVM标准实现及 Java核心类库。它包括Java虚拟机、Java平台核心类和支持文件。它不包含开发工具(编译器、调试器等)。
JDK(Java Development Kit)又称J2SDK(Java2 Software Development Kit),是Java开发工具包,它提供了Java的开发环境(提供了编译器javac等工具,用于将java文件编译为class文件)和运行环境(提 供了JVM和Runtime辅助包,用于解析class文件使其得到运行)。如果你下载并安装了JDK,那么你不仅可以开发Java程序,也同时拥有了运 行Java程序的平台。JDK是整个Java的核心,包括了Java运行环境(JRE),一堆Java工具tools.jar和Java标准类库 (rt.jar)。