前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶, 篇幅会较多~
适合人群
- 学完Java基础
- 想通过Java快速构建web应用程序
- 想学习或了解SpringBoot
- SpringBoot进阶学习
大佬可以绕过 ~
背景
如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获~
情景回顾
前几期呢,带大家学习了SpringBoot的进阶教程。当我们的代码写好了,需要发布到服务器上给用户访问,这期将带大家快速的部署我们的Java应用服务, 同样的,我们集成到Springboot中。
分环境打包
发布之前,最重要的事情是需要我们去打包我们的程序,这样服务器才能够运行它。打包之前呢,教大家先把本地的环境区分好,先修改pom.xml, 在build 下加入如下配置
<profiles>
<profile>
<!--不同环境的唯一id-->
<id>dev</id>
<activation>
<!--默认激活开发环境-->
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!--profile.active对应application.yml中的@profile.active@-->
<profile.active>dev</profile.active>
</properties>
</profile>
<!--生产环境-->
<profile>
<id>prod</id>
<properties>
<profile.active>prod</profile.active>
</properties>
</profile>
</profiles>
刷新一下,我们会发现右侧Maven展开后多了一个配置文件,展开后它是一个单选,这就是我们的环境配置文件,选哪个代表打的包是哪个环境下的。
还需要做一件事情就是和我们的SpringBoot配置进行关联:
spring:
profiles:
active: @profile.active@
@profile.active@这个值就是动态去获取的,它可以是通过我们刚刚配置的配置文件里的值,还有就是可以通过命令行参数去获取, 下面我们只需要分开建立配置文件即可, 命名方式 application-${profile}.yml, 这样一来,我们application.yml中的配置可以拆到外边了,只需要保留公共部分, 一般情况下我们做配置区分实际上大部分都是对数据源,服务端端口,请求前缀等做区分,数据源比如mysql,redis等等
- application.yml
spring:
profiles:
active: @profile.active@
mybatis:
mapper-locations:
- classpath:mapper/*.xml
configuration:
cache-enabled: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- application-dev.yml
server:
port: 8878 # 设置应用端口,默认是8080
tomcat:
max-threads: 800
uri-encoding: UTF-8
servlet:
context-path: /dev-api
spring:
application:
name: app-shiro
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: xxxx
redis:
host: localhost # Redis服务器地址
database: 1 # Redis数据库索引(默认为0)
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
- application-prod.yml
server:
port: 8888 # 设置应用端口,默认是8080
tomcat:
max-threads: 800
uri-encoding: UTF-8
servlet:
context-path: /
spring:
application:
name: app-shiro
datasource:
url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true
username: xxx
password: xxxxxxx
redis:
host: xxxxx # Redis服务器地址
database: x # Redis数据库索引(默认为0)
port: 6379 # Redis服务器连接端口
password: xxxx # Redis服务器连接密码(默认为空)
编译Jar包
我们部署方式以Jar包为主,下面我们就去编译它,借助idea工具我们很方便的就可以打包了,点击右侧Maven, 然后点击生命周期, 我们先双击clean,然后双击install,这样就可以了,控制台会有打包信息,出现SUCCESS代表成功了,那么编译后的产物在哪呢, 在对应模块下的target文件夹下, 它有一个.jar后缀的文件,那个就是我们的jar包了
服务部署
下面,就教大家如何部署到服务器上,首先服务器需要安装nginx用于代理我们的java服务, 因为我们不会像在本地一样通过端口访问的,都是要通过域名去访问所以推荐大家使用nginx, 其次还需要安装java8, 下面直接给大家贴命令,我们默认服务器系统是CentOs 7
# 安装nginx
yum install nginx
# 设置开启启动
systemctl enable nginx
systemctl start nginx
# 安装java
yum install java
安装好了之后,我们先配置nginx, 修改/etc/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
charset utf-8;
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这就是我们要代理的服务端口 也就是sprinboot的启动端口
proxy_pass http://localhost:8888/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
这里根据自身来,如果有域名可以把 localhost 改成域名, 没有也可以改成公网的ip做测试,如果是域名需要到具体的域名服务商解析到服务器的公网ip,也就是A记录
发布jar包
下面需要把我们本地编译好的jar包部署到我们的服务器上,我们可以通过ftp工具去上传到服务器,哪个目录可以自己定,我这里上传到/home/java/下, 工具推荐filezila,windows用户可以使用xftp,这个也不错(只有window版本),因为我是mac,所以我使用的是filezila
然后我们链接它就完事了,好了之后我们到对应目录,把本地的jar包直接拖进去就完事~
运行SpringBoot服务
我们的包已经发上来了,下边我们就一起动手运行它,这里给大家准备好了一个简要的start.sh
# 这个意思后台运行 并把日志输出到知道文件
nohup java -jar app.jar >> app.log 2>&1 &
实际上我们运行jar包通过java -jar xxxx.jar,但是没法后台运行,也就是说关闭远程链接后,就自动挂掉了
这里要说的是,我们执行需要到jar包同级目录中,好,我们把这个start.sh文件也发到home/java/,下面我们通过shell工具远程链接我们的服务器,windows用户可以使用Xshell
链接好后,执行一下命令:
# 赋予可执行权限
chmod 777 start.sh
# 执行脚本
./start.sh
大家可以自己访问,测试一下,哦,修改完nginx配置一定记得热重启一下, 不然配置不生效哦!~
nginx -s reload
结束语
以上只针对测试环境,其实现在的环境部署都比较成熟了,一般小项目你可以这么玩,但是大项目就不行了,因为我们的进程没法自主恢复,就是说意外的挂了,他不能自愈,我们可以借助守护进程工具,比如supervisor这样的,这里就不给大家演示了。现在的部署都是逐渐向容器化靠拢了,后边会教大家高级的,比如docker的部署方式,教大家如何打镜像和部署,等到讲```docker``的时候会教大家~
下期预告
到此为止,我们的SpringBoot进阶系列教程就结束了,下周我们正式开启SpringCloud微服务之旅,如果对SpringBoot还不够熟悉的,请看完之前的教程哦,不然学习很费劲,因为我们的微服务都是以SpringBoot为基础搭建的,我们学习只是学习它的各大组件还有如何灵活的运用到场景中。没有微服务基础也没关系,我会带着大家一步一步入门,从理论到实战,尽可能的讲全。关注我,不迷路,下期见~
更文时间
- 工作日(周一 🍉 周五)
- 周末不更 ☀️
- 节假日不定时更