在开发环境中,直接通过运行启动类并对外提供服务。但在实际项目中,会把SpringBoot项目打包成war包或jar包,把war包或jar包部署到服务器,再通过命令启动对应的SpringBoot服务。

在一些高并发环境中,还会把相同的SpringBoot项目部署到多台服务器上实现分布式部署,同时引入反向代理组件Nginx,Nginx把请求分摊到多台服务器上,以负载均衡的方式提升系统的整体吞吐能力。

在实际应用中,一般还会通过Actuator等组件监控SpringBoot项目及所处服务器的状态,比如监控当前项目是否处在工作状态,或所处服务器的CPU情况等。

打包和运行Spring Boot项目

用Maven命令打包

首先,在pom.xml里,制定打包格式

  1. <groupId>org.example</groupId>
  2. <artifactId>Simpleprj</artifactId>
  3. <version>1.0-SNAPSHOT</version>
  4. <packaging>jar</packaging> //或war

如果项目只包含java代码,可以打包成jar。如果还有html、jsp、js等web代码,可以打包成war。

通过点击Maven的package命令即可完成打包
image.png
image.png

打包完成后,在项目的target目录里看到打成的jar包。
image.png
也可以在命令行进入当前项目的目录,通过mvn命令完成打包

D:\work\Spring Boot Code\chapter15\Simpleprj>mvn clean package

启动项目

打包完成后,进入到jar包所在路径,通过如下java命令启动项目

D:\work\Spring Boot Code\chapter15\Simpleprj\target>java -jar Simpleprj-1.0-SNAPSHOT.jar

实际会把达成的jar或war包复制到linux主机的制定路径。部署完成后,在linux系统中通过类似的java命令启动项目。

Nginx

Nginx组件与分布式负载均衡

image.png

下载Nginx组件

image.png

实践分布式部署

复制多个项目,设置server.port分别是8080,8085,8090。
打开nginx.conf文件夹,修改为如下

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. upstream springboot.com{
  11. server 127.0.0.1:8080;
  12. server 127.0.0.1:8085;
  13. server 127.0.0.1:8090;
  14. }
  15. server {
  16. listen 80;
  17. location / {
  18. proxy_pass http://springboot.com/hello;
  19. }
  20. error_page 500 502 503 504 /50x.html;
  21. location = /50x.html {
  22. root html;
  23. }
  24. }
  25. }

重启nginx,打包运行三个项目,在浏览器多次输入http://localhost:80/
该请求被nginx转发到三个项目的控制器方法,产生不同的输出。该过程仅为演示,
在实际项目中,会按如下步骤实施分布式部署

  1. 会把模块打包部署到多台(比如三台)不同的主机上,用java命令启动项目,它们工作的端口完全相同,比如都在8080。
  2. 在nginx.conf中做如下配置(不同ip),以负载均衡方式转发到三台服务器

较详细的linux环境下部署:https://blog.csdn.net/JJBOOM425/article/details/88416872

  1. upstream springboot.com{
  2. server ip1:8080;
  3. server ip2:8080;
  4. server ip3:8080;
  5. }
  1. 如果三个业务模块仍无法满足高并发的需求,那么进行扩容。比如在新的服务器上部署并启动业务模块,修改nginx.conf文件里的upstream配置项。

实现在Nginx反向代理的基础上,以分布式部署的方式,用若干个业务模块同时应对高并发的请求。

监控Spring Boot项目

引入依赖,监控端点

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-web</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-actuator</artifactId>
  9. </dependency>
  10. </dependencies>

配置监控项

参考&推荐

《搭建Spring Boot开发环境》
CSDN·Linux服务器使用Nginx分布式部署