Spring-Boot 企业级安装程序

需求

spring-boot 生成企业级安装程序,主要要求程序在windows下一键安装开机自启,这类的博客很少,基本只能自己摸索了。

思路

Springboot自带tomcat 只用启动-jar demo-0.0.1-SNAPSHOT.jar就可以启动项目了,然后在同目录下安装jre环境,说明java运行环境,配置好数据库就可以了。这里还是考虑用Tomcat+Nginx 来部署,方便以后的调试和扩展,而且配置更全面一些。

下载apache-tomcat-8 将打好的war包放在webapp中 可以改配置放在其他文件夹
前台的包可以放在nginx的html目录下 这两个包都可以通过配置文件来更改存储位置。

分为两部,第一部分是安装程序Stepup.exe(安装mysql,初始化数据库,获取项目路径,修改项目),第二步骤才是运行Start.exe(运行批处理文件)

使用工具

JDK1.8,MySQL5.7,Tomcat8,Nginx,BatToExeConverter等,这是需要压缩的文件资源。

也可以考虑用到Inno Setup

mysql部分

MySQL需要配置环境变量的原因是因为但是每次都切换到安装目录下太麻烦,如果不嫌弃麻烦可以直接在目录执行,这里我们就直接
跳转到安装路径执行需要的命令

安装服务

rem 进入mysql目录
cd “%~dp0”..\mysql-5.7.24-win32\bin”
rem 初始化 –必不可少
mysqld –initialize-insecure
rem 先移除服务
mysqld –remove “服务名”
rem 安装服务
mysqld -install “服务名”

my.ini

my.ini配置如下可以在批处理文件中写入,文件保存为ANSI格式文件,不然初始化报错,端口配置一个使用较少的3309
减少冲突的概率,当然还是要进行端口重复检查
[mysql]
default-character-set=utf8
[mysqld]
port = 3309
basedir=D:\mysql-5.7.24-win32
datadir=D:\mysql-5.7.24-win32\data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB

端口占用检查

echo check port 3309…
for /f “tokens=3 delims=:, “ %%i in (‘netstat -ano’) do (
if “%%i” == “3309” GOTO 3309used
)

:3309used
mshta vbscript:CreateObject(“Wscript.Shell”).popup(“端口3309被占用,请解除端口占用后重新启动”,7,”提示”,64)(window.close)
exit /B 2

启动服务脚本如下

net stop “服务名”
net start “服务名”

登陆测试

mysql -u root -ppassword

Tomcat部分

修改端口,修改访问路径

server.xml

修改端口为”8086”

修改项目访问路径,缩减项目访问路径,path代表映射路径 docBase代表项目路径 workDir表示缓存文件位置

配置环境变量

修改TOMCAT_HOME\bin\setclasspath.bat文件
set JAVA_HOME=D:\jdk1.8\
set JRE_HOME=D:\jdk1.8\jre

隐藏执行窗口

(1)修改脚本
setclasspath.bat文件
rem set _RUNJAVA=”%JRE_HOME%\bin\javaw” (隐藏文件)
set _RUNJAVA=”%JRE_HOME%\bin\java.exe”

(2)注册成服务
cmd cd tomcat\bin
service.bat install [serviceName]
在此种方案中部署程序,该程序访问不到网络盘

自启动

这里采用(2)方便配置自启动
修改启动方式,在windows服务下设置成自启动,将mysql服务设置成依赖服务

Nginx部分

代理和请求转发的概念是相对的,我通过Nginx发送一条请求到服务器,我到服务器的过程就叫做代理,服务器响应的信息通过Nginx转发到我就叫做反向代理,而Nginx的这一动作就叫做请求转发

做服务器的时候还有安全策略配置,公网私网访问设置,主要是防火墙方面的配置,这点linux也一样。

Nginx配置

请求转发

1
2
3
location /api{
proxy_pass http://127.0.0.1:8086;
}

首页配置

1
2
3
4
location /{
root D:\DSCMS\app\html;
index index.html index.htm;
}

websocket nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
location /wse{
proxy_pass http://127.0.0.1:8080;

#websocket服务通过nginx转发
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

#获取请求真实地址
proxy_set_header Host $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;
}

Nginx指令

所有安装指令基于nginx的安装目录下

Nginx关闭 nginx -s stop (立刻停止) 或者 nginx -s quit (正常停止)
Nginx启动 start nginx
Nginx重启 Nginx -s reload (修改配置nginx.conf后使用)

window下无法正常停止Nginx进程
使用taskkill /im nginx.exe /f

开启自启动

将 windows 服务设置成自启动
bat文件转为exe,将bat文件设置

sc delete ServiceName

sc create ServiceName binpath= D:\DSCMS\start.exe type= own start= auto displayname= DSCMSServices

net start ServiceName

net stop ServiceName

使用jar包部署环境
jre路径/ -jar demo-1.0.jar