SpringBoot进阶之服务部署前言 大家好,一直以来我都本着用最通俗的话理解核心的知识点,我认为所有的难点都离不开基础知识的铺垫。目前正在出一个SpringBoot长期系列教程,从入门到进阶,篇幅会较多适合人群学完Java基础想通过Java快速构建web应用程序想学习或了解SpringBootSpringBoot进阶学习 大佬可以绕过背景 如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识,接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获情景回顾 前几期呢,带大家学习了SpringBoot的进阶教程。当我们的代码写好了,需要发布到服务器上给用户访问,这期将带大家快速的部署我们的Java应用服务,同样的,我们集成到Springboot中。分环境打包 发布之前,最重要的事情是需要我们去打包我们的程序,这样服务器才能够运行它。打包之前呢,教大家先把本地的环境区分好,先修改pom。xml,在build下加入如下配置profilesprofile!不同环境的唯一ididdevid!默认激活开发环境trueactiveByDefaultactivationproperties!profile。active对应application。yml中的profile。activeprofile。activedevprofile。activepropertiesprofile!生产环境profileidprodidpropertiesprofile。activeprodprofile。activepropertiesprofileprofiles 刷新一下,我们会发现右侧Maven展开后多了一个配置文件,展开后它是一个单选,这就是我们的环境配置文件,选哪个代表打的包是哪个环境下的。 还需要做一件事情就是和我们的SpringBoot配置进行关联:spring:profiles:active:profile。active profile。active这个值就是动态去获取的,它可以是通过我们刚刚配置的配置文件里的值,还有就是可以通过命令行参数去获取,下面我们只需要分开建立配置文件即可,命名方式application{profile}。yml,这样一来,我们application。yml中的配置可以拆到外边了,只需要保留公共部分,一般情况下我们做配置区分实际上大部分都是对数据源,服务端端口,请求前缀等做区分,数据源比如mysql,redis等等application。ymlspring:profiles:active:profile。activemybatis:mapperlocations:classpath:mapper。xmlconfiguration:cacheenabled:truelogimpl:org。apache。ibatis。logging。stdout。StdOutImplapplicationdev。ymlserver:port:8878设置应用端口,默认是8080tomcat:maxthreads:800uriencoding:UTF8servlet:contextpath:devapispring:application:name:appshirodatasource:url:jdbc:mysql:localhost:3306test?useUnicodetruecharacterEncodingutf8serverTimezoneAsiaShanghaiuseSSLfalseallowPublicKeyRetrievaltrueusername:rootpassword:xxxxredis:host:localhostRedis服务器地址database:1Redis数据库索引(默认为0)port:6379Redis服务器连接端口password:Redis服务器连接密码(默认为空)applicationprod。ymlserver:port:8888设置应用端口,默认是8080tomcat:maxthreads:800uriencoding:UTF8servlet:contextpath:spring:application:name:appshirodatasource:url:jdbc:mysql:xxx。xxx。xxx。xxx:3306test?useUnicodetruecharacterEncodingutf8serverTimezoneAsiaShanghaiuseSSLfalseallowPublicKeyRetrievaltrueusername:xxxpassword:xxxxxxxredis:host:xxxxxRedis服务器地址database:xRedis数据库索引(默认为0)port:6379Redis服务器连接端口password:xxxxRedis服务器连接密码(默认为空)编译Jar包 我们部署方式以Jar包为主,下面我们就去编译它,借助idea工具我们很方便的就可以打包了,点击右侧Maven,然后点击生命周期,我们先双击clean,然后双击install,这样就可以了,控制台会有打包信息,出现SUCCESS代表成功了,那么编译后的产物在哪呢,在对应模块下的target文件夹下,它有一个。jar后缀的文件,那个就是我们的jar包了服务部署 下面,就教大家如何部署到服务器上,首先服务器需要安装nginx用于代理我们的java服务,因为我们不会像在本地一样通过端口访问的,都是要通过域名去访问所以推荐大家使用nginx,其次还需要安装java8,下面直接给大家贴命令,我们默认服务器系统是CentOs7安装nginxyuminstallnginx设置开启启动systemctlenablenginxsystemctlstartnginx安装javayuminstalljava 安装好了之后,我们先配置nginx,修改etcnginx。confworkerprocesses1;events{workerconnections1024;}http{includemime。types;defaulttypeapplicationoctetstream;sendfileon;keepalivetimeout65;server{listen80;servernamelocalhost;charsetutf8;locationprodapi{proxysetheaderHosthttphost;proxysetheaderXRealIPremoteaddr;proxysetheaderREMOTEHOSTremoteaddr;proxysetheaderXForwardedForproxyaddxforwardedfor;这就是我们要代理的服务端口也就是sprinboot的启动端口proxypasshttp:localhost:8888;}errorpage50050250350450x。html;location50x。html{roothtml;}}} 这里根据自身来,如果有域名可以把localhost改成域名,没有也可以改成公网的ip做测试,如果是域名需要到具体的域名服务商解析到服务器的公网ip,也就是A记录发布jar包 下面需要把我们本地编译好的jar包部署到我们的服务器上,我们可以通过ftp工具去上传到服务器,哪个目录可以自己定,我这里上传到homejava下,工具推荐filezila,windows用户可以使用xftp,这个也不错(只有window版本),因为我是mac,所以我使用的是filezila 然后我们链接它就完事了,好了之后我们到对应目录,把本地的jar包直接拖进去就完事运行SpringBoot服务 我们的包已经发上来了,下边我们就一起动手运行它,这里给大家准备好了一个简要的start。sh这个意思后台运行并把日志输出到知道文件nohupjavajarapp。jarapp。log21 实际上我们运行jar包通过javajarxxxx。jar,但是没法后台运行,也就是说关闭远程链接后,就自动挂掉了 这里要说的是,我们执行需要到jar包同级目录中,好,我们把这个start。sh文件也发到homejava,下面我们通过shell工具远程链接我们的服务器,windows用户可以使用Xshell 链接好后,执行一下命令:赋予可执行权限chmod777start。sh执行脚本。start。sh 大家可以自己访问,测试一下,哦,修改完nginx配置一定记得热重启一下,不然配置不生效哦!nginxsreload结束语 以上只针对测试环境,其实现在的环境部署都比较成熟了,一般小项目你可以这么玩,但是大项目就不行了,因为我们的进程没法自主恢复,就是说意外的挂了,他不能自愈,我们可以借助守护进程工具,比如supervisor这样的,这里就不给大家演示了。现在的部署都是逐渐向容器化靠拢了,后边会教大家高级的,比如docker的部署方式,教大家如何打镜像和部署,等到讲docker的时候会教大家下期预告 到此为止,我们的SpringBoot进阶系列教程就结束了,下周我们正式开启SpringCloud微服务之旅,如果对SpringBoot还不够熟悉的,请看完之前的教程哦,不然学习很费劲,因为我们的微服务都是以SpringBoot为基础搭建的,我们学习只是学习它的各大组件还有如何灵活的运用到场景中。没有微服务基础也没关系,我会带着大家一步一步入门,从理论到实战,尽可能的讲全。关注我,不迷路,下期见更文时间工作日(周一周五)周末不更节假日不定时更也欢迎投稿往期内容我的博客(阅读体验较佳)Springboot入门Springboot基础(一)Springboot基础(二)Springboot基础(三)Springboot基础(四)Springboot基础(五)SpringBoot进阶之缓存中间件RedisSpringBoot进阶之MyBatis分页插件SpringBoot进阶之跨域问题处理(CORS)SpringBoot进阶之日志集成SpringBoot进阶之请求拦截SpringBoot进阶之事务管理及并发问题SpringBoot进阶之整合Shiro鉴权框架(一)SpringBoot进阶之整合Shiro鉴权框架(二)SpringBoot进阶之整合Shiro鉴权框架(三)SpringBoot进阶之整合Shiro鉴权框架(四)SpringBoot进阶之整合Shiro鉴权框架(五)SpringBoot进阶之整合Shiro鉴权框架(六)项目源码(源码已更新欢迎star)springbootall地址:https:github。comqiuChengleiyspringbootall。git