项目需要写了windows下面一键部署脚本和自启动方案。
概览如下(包含了运行以后的东西)。
实际上只需要这些
下载的安装包 mysql、jdk、nginx如下:
mysql-8.0.29-winx64.zip
jdk-17_windows-x64_bin.zip
nginx-1.22.0.zip
unzip.exe是命令解压需要的
barcode.sql 表结构
initSQL.sql 初始化数据
mombarcode.zip 前端页面数据
mom-barcode-1.0.jar 后端文件数据
install.bat 一键安装脚本
java.bat java执行脚本
nginx.bat nginx执行脚本
自动启动注册服务用的 winsw,这个可以注册服务。java-boot.exe和nginx-boot就是winsw.exe改的名字
可以参考这个文章
java自启动服务:java-boot.exe 和 java-boot.xml
nginx自启动服务:nginx-boot.exe 和 nginx-boot.xml 注意:需要放到nginx文件夹下面
mysql使用的net这个自己就会启动。不需要用winsw了
改好名字记得执行 java-boot.exe install 注册java服务, nginx-boot.exe install 注册nginx服务
my.ini是 mysql数据库需要的配置
nginx.conf是nginx需要的配置
说明完毕上脚本详情。
install.bat
set mysql_version=mysql-8.0.29
set nginx_version=nginx-1.22.0
copy unzip.exe C:\Windows
%mysql_version%\bin\mysqld remove
unzip -o %mysql_version%-winx64.zip
unzip -o jdk-17_windows-x64_bin.zip
unzip -o %nginx_version%.zip
move %mysql_version%-winx64 %mysql_version%
move jdk-17.0.3.1 jdk
move %nginx_version% nginx
mkdir mysql\data
mkdir mysql\log
copy nginx.conf .\nginx\conf\
copy nginx-boot.exe .\nginx\
copy nginx-boot.xml .\nginx\
copy my.ini %mysql_version%
%mysql_version%\bin\mysqld --initialize-insecure
%mysql_version%\bin\mysqld install
net start mysql
set setpwd=XXX
%mysql_version%\bin\mysql --connect-expired-password -uroot -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '%setpwd%';"
%mysql_version%\bin\mysql -h localhost -u root -p%setpwd% -Dmysql < .\initSQL.sql
%mysql_version%\bin\mysql -h localhost -u root -p%setpwd% -Dbarcode < .\barcode.sql
java.bat
:: find app pid!
set pid=0
set appName=mom-barcode
set appJarPath=mom-barcode-1.0.jar
echo Start find app[%appName%] pid!
for /f "tokens=1-2" %%i in ('jps ^|findstr %appName%') do (
if %%j == %appJarPath% (
set pid=%%~i
)
)
echo app[%appName%] pid:%pid%
:: start or restart!
if %pid% GTR 0 (
echo Start kill pid:%pid%
taskkill /f /pid %pid%
ping -n 5 127.0.0.1>nul
echo app[%appName%] already stop,next restart!
jdk\bin\java -jar -verbose:gc -Xlog:gc:/u01/deploy/%appName%/gc.log -XX:+PrintGC -XX:+PrintGCDetails -Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m %appJarPath% --spring.profiles.active=online --spring.main.allow-bean-definition-overriding=true
) else (
echo App[%appName%] not running,start run!
jdk\bin\java -jar -verbose:gc -Xlog:gc:/u01/deploy/%appName%/gc.log -XX:+PrintGC -XX:+PrintGCDetails -Xms2048m -Xmx2048m -Xss1024K -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=2048m %appJarPath% --spring.profiles.active=online --spring.main.allow-bean-definition-overriding=true
)```
**nginx.bat**
```bash
::unzip -o mombarcode -d nginx\html\
::需要进入nginx里面运行命令
cd nginx
nginx
java-boot.xml
<service>
<!-- ID of the service. It should be unique across the Windows system-->
<id>barcode</id>
<!-- Display name of the service -->
<name>barcode</name>
<!-- Service description -->
<description>barcode后端服务</description>
<!-- Path to the executable, which should be started -->
<executable>D:\u01\deploy\java.bat</executable>
</service>
my.ini
[mysqld]
basedir=D:\u01\deploy\mysql-8.0.29
datadir=D:\u01\deploy\mysql\data
port=3306
log-bin=D:\u01\deploy\mysql\log\mysql-binlog
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time_zone='+8:00'
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
default_authentication_plugin=mysql_native_password
max_connections=2000
max_connect_errors=100000
# (adjust value here, 50%-70% of total RAM)
innodb_dedicated_server=ON
innodb_flush_log_at_trx_commit=0
max_binlog_size=134217728
binlog_cache_size=8388608
innodb_flush_log_at_trx_commit = 0
innodb_autoinc_lock_mode=2
bulk_insert_buffer_size=128M
log_error=D:\u01\deploy\mysql\error.log
slow_query_log_file=D:\u01\deploy\mysql\slow.log
long_query_time=10
slow_query_log = 1
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
nginx.conf
location /mombarcode {
try_files $uri $uri/ /mombarcode/index.html;
root html;
}
location /apitest/mombarcode/ {
proxy_pass http://localhost:XXX/;
}
一些问题:
mysql文件夹删除不掉。执行 net stop mysql
nginx所有命令需要进入nginx文件夹下面执行。(windows下面的bug?)