前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个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
为基础搭建的,我们学习只是学习它的各大组件还有如何灵活的运用到场景中。没有微服务基础也没关系,我会带着大家一步一步入门,从理论到实战,尽可能的讲全。关注我,不迷路,下期见~