• windows环境下面的项目一键部署和自启动方案


    项目需要写了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
    
    • 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

    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
    
    • 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

    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>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    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
    
    
    • 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

    nginx.conf

    		location /mombarcode {
    			try_files $uri $uri/  /mombarcode/index.html;
                root   html;
            }
    		
    		location /apitest/mombarcode/ {
                proxy_pass http://localhost:XXX/;
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    一些问题:
    mysql文件夹删除不掉。执行 net stop mysql
    nginx所有命令需要进入nginx文件夹下面执行。(windows下面的bug?)

  • 相关阅读:
    博弈论 之 2 什么是博弈论
    educoder_python:4-1-逻辑控制(if)第2关:求解一元二次方程组
    JavaEE 进阶:Spring 核⼼与设计思想
    Exception-Error
    JVM相关面试题(每日一练)
    类和对象(1)
    Unity3d调用C++ dll中的函数
    Docker学习-Dockerfile概述与用法
    【Go】格式化字符串指令大全 && Redis常用命令
    [云原生k8s] k8s管理工具kubectl详解(一)
  • 原文地址:https://blog.csdn.net/u013788943/article/details/125545548