之前想的不加功能了,之前已经实现了redis。因为前两天看了nginx的负载均衡,虽然也配过实例,但没有将我做过的项目进行整合,我想这也是一种成长过程,也是一个实操锻炼过程

话不多说整活!!!

不只针对我的这个项目,你如果有spring boot项目也可以试试。方法都是一样的,最后效果是通过访问一个网址或者ip达到访问不同端口的目的。负载可以负载端口也可以负载IP,在于你怎么配置。先附一张实现效果图

img

首先就是打包

将你的项目打成jar包

下面是关于idea如何打包的,会打包的自行跳过

eclipse就不贴了,都2020年了,还在用eclipse吗……这也没有鄙视的意思,觉得谁好用就用谁吧(doge保命)

  1. pom文件中添加打包插件
  2. 增加所打的包的方式,jar就写jar,war就写war
  3. 利用maven自带插件打包(建议先clean)

1、pom文件中添加打包插件

1
2
3
4
5
6
7
8
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

img

不加这个插件的的后果,都是亲身试验过的坑啊

2、增加所打的包的方式,jar就写jar,war就写war

1
<packaging>jar</packaging>

3、利用maven自带插件打包(建议先clean)

img

4、jar包所在位置

img

最后提一下,我用过idea自带的打包工具就是那个build,然后运行的时候报的信息一大堆看不懂的,当然项目最后启动不了,可能是我方式不对,但我还是极力的不推荐,一是麻烦,二是需要注意的地方太多,用我上面这种就可以了。

img

这个是idea的自带打包方式

img

这个是自带打包方式出现的报错信息

——————————-打包完,下来说正事————————–

1、为了观察效果,可以控制器中设置一个方法返回各自的端口(就是我演示中的效果)

img

img

2、将项目打包,分别定义不同的端口8080,8081,8082

img

3、将打好的包用名字进行区分,放入Linux中

img

4、进入nginx的conf目录下修改nginx.conf

img

5、启动nginx.

1
./nginx

6、依次启动jar包(也可以使用一键启动脚本,后面说)

1
nohup java -jar xxx(nohup表示后台运行)

7、访问路径验证效果,一直刷新会观察到端口的变化

http://192.168.11.130/port

下面为一键启动脚本的代码,直接cv就可以用了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/bin/bash
#@author dali
#统一启动3个jar包文件
#这里定义你的jar包名称
APP_NAME1=computer8080.jar
APP_NAME2=computer8081.jar
APP_NAME3=computer8082.jar

#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}

#检查8080是否在运行
is_exist1(){
pid1=`ps -ef|grep $APP_NAME1|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid1}" ]; then
return 1
else
return 0
fi
}

#检查8081是否在运行
is_exist2(){
pid2=`ps -ef|grep $APP_NAME2|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid2}" ]; then
return 1
else
return 0
fi
}

#检查8082是否在运行
is_exist3(){
pid3=`ps -ef|grep $APP_NAME3|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid3}" ]; then
return 1
else
return 0
fi
}

#启动方法
start(){
is_exist1
if [ $? -eq "0" ]; then
echo "${APP_NAME1} is already running. pid=${pid1} ."
else
nohup java -jar $APP_NAME1 > /dev/null 2>&1 &
fi

is_exist2
if [ $? -eq "0" ]; then
echo "${APP_NAME2} is already running. pid=${pid2} ."
else
nohup java -jar $APP_NAME2 > /dev/null 2>&1 &
fi

is_exist3
if [ $? -eq "0" ]; then
echo "${APP_NAME3} is already running. pid=${pid3} ."
else
nohup java -jar $APP_NAME3 > /dev/null 2>&1 &
fi
}

#停止方法
stop(){
is_exist1
if [ $? -eq "0" ]; then
kill -9 $pid1
else
echo "${APP_NAME1} is not running"
fi

is_exist2
if [ $? -eq "0" ]; then
kill -9 $pid2
else
echo "${APP_NAME2} is not running"
fi

is_exist3
if [ $? -eq "0" ]; then
kill -9 $pid3
else
echo "${APP_NAME3} is not running"
fi
}

#输出运行状态
status(){
is_exist1
if [ $? -eq "0" ]; then
echo "${APP_NAME1} is running. Pid is ${pid1}"
else
echo "${APP_NAME1} is NOT running."
fi

is_exist2
if [ $? -eq "0" ]; then
echo "${APP_NAME2} is running. Pid is ${pid2}"
else
echo "${APP_NAME2} is NOT running."
fi

is_exist3
if [ $? -eq "0" ]; then
echo "${APP_NAME3} is running. Pid is ${pid3}"
else
echo "${APP_NAME3} is NOT running."
fi
}

#重启
restart(){
stop
start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac