普通Java工程如何在代码中引用docker-compose.yml中的environment值

文章目录

  • 一、概述
  • 二、常规做法
    • 1. 数据库配置分离
    • 2. 代码引用配置
    • 3. 编写启动类
    • 4. 支持打包成可执行包
    • 5. 支持可执行包打包成docker镜像
    • 6. docker运行
  • 三、存在问题分析
  • 四、改进措施
    • 1. 包含environment 变量的编排文件
    • 2. 修改读取配置文件方式
    • 3. 为什么可以这样做
  • 五、运行效果
    • 1. 本地windows运行
    • 2. centos 服务器jar运行
    • 3. centos 服务器docker运行
  • 六、完整代码

一、概述

普通Java工程这里指非spring工程,主要指一些系统资源监控程序、数据日志清理程序等,需要保持依赖简单,执行文件体积微小方便部署,这些程序需要需要跟数据库交互,例如需要将监控数据持久化到db、连接数据库清理过期数据等。

二、常规做法

1. 数据库配置分离

普通Java工程配置文件一般采用properties,典型的配置文件如下:
jdbc.properties

jdbc.driver   = com.mysql.cj.jdbc.Driver
jdbc.url      = jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&createDatabaseIfNotExist=true
jdbc.username = root
jdbc.password = root123

2. 代码引用配置

        ResourceBundle config = ResourceBundle.getBundle("jdbc");
        PoolProperties p = new PoolProperties();
        p.setUrl(config.getString("jdbc.url"));
        p.setDriverClassName(config.getString("jdbc.driver"));
        p.setUsername(config.getString("jdbc.username"));
        p.setPassword(config.getString("jdbc.password"));

3. 编写启动类

启动类main方法,一般使用定时任务线程池,以保证程序一直运行
核心代码:

 ScheduledExecutorService service = new ScheduledThreadPoolExecutor(1);
  service.scheduleAtFixedRate(() -> { 
       doSomething(); // 业务方法
   }, 0, 60, TimeUnit.SECONDS);

4. 支持打包成可执行包

具体参考 普通Java工程可执行JAR两种打包方式探讨

5. 支持可执行包打包成docker镜像

具体参考: 容器镜像生成记

6. docker运行

在编排文件目录执行 docker-compose up -d

docker-compose.yml

version: '3.7'
services:
  java-with-docker:
    image: registry.cn-shanghai.aliyuncs.com/00fly/java-with-docker:0.0.1
    container_name: java-with-docker
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 64M
        reservations:
          cpus: '0.05'
          memory: 64M
    restart: on-failure
    logging:
      driver: json-file
      options:
        max-size: '5m'
        max-file: '1'

三、存在问题分析

上面的做法存在最大的问题是:

  1. 数据库配置固定在内部配置文件jdbc.properties中
  2. 维护麻烦,如果是通用的需要,每换一套环境,需要重新跑流程,包括打包可执行包和镜像打包。

四、改进措施

springboot 工程中,我们支持数据源配置在docker-compose.yml中的environment配置
典型例子如下:

version: '3.8'
services:
  springboot-dbutils:
    image: 00fly/springboot-dbutils:0.0.1
    container_name: springboot-dbutils
    deploy:
      resources:
        limits:
          cpus: '0.80'
          memory: 400M
        reservations:
          cpus: '0.05'
          memory: 200M
    ports:
    - 80:8080
    environment:
    - SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/dbutils?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
    - SPRING_DATASOURCE_USERNAME=user
    - SPRING_DATASOURCE_PASSWORD=password123
    restart: on-failure
    logging:
      driver: json-file
      options:
        max-size: 5m
        max-file: '1'

同理,我们也希望普通java也支持如下编排文件中的environment 变量

1. 包含environment 变量的编排文件

docker-compose.yml

version: '3.7'
services:
  java-with-docker:
    image: registry.cn-shanghai.aliyuncs.com/00fly/java-with-docker:0.0.1
    container_name: java-with-docker
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 64M
        reservations:
          cpus: '0.05'
          memory: 64M
    restart: on-failure
    environment:
    - JDBC_URL=jdbc:mysql://192.168.15.202:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
    - JDBC_USERNAME=test
    - JDBC_PASSWORD=test123
    - JDBC_DRIVER=com.mysql.cj.jdbc.Driver
    logging:
      driver: json-file
      options:
        max-size: '5m'
        max-file: '1'

2. 修改读取配置文件方式

将原来读取jdbc.properties的配置文件的方式修改为如下:

        //docker环境下优先使用docker-compose中environment值
        Map<String, String> env = System.getenv();
        ResourceBundle config = ResourceBundle.getBundle("jdbc");
        String url = StringUtils.defaultIfBlank(env.get("JDBC_URL"), config.getString("jdbc.url"));
        String userName = StringUtils.defaultIfBlank(env.get("JDBC_USERNAME"), config.getString("jdbc.username"));
        String passWord = StringUtils.defaultIfBlank(env.get("JDBC_PASSWORD"), config.getString("jdbc.password"));
        dataSource.setUrl(url);
        dataSource.setUser(userName);
        dataSource.setPassword(passWord);

3. 为什么可以这样做

其实,这说明了:在docker-compose.yml配置的environment 值,均会被读取到System.getenv() 中

五、运行效果

1. 本地windows运行

2024-07-06 15:34:16.345 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:34:16.421 [main] INFO  com.fly.simple.MainRun - =:: -> ::\
2024-07-06 15:34:16.421 [main] INFO  com.fly.simple.MainRun - =D: -> D:\
2024-07-06 15:34:16.421 [main] INFO  com.fly.simple.MainRun - ALLUSERSPROFILE -> C:\ProgramData
2024-07-06 15:34:16.422 [main] INFO  com.fly.simple.MainRun - APPDATA -> C:\Users\00fly\AppData\Roaming
2024-07-06 15:34:16.422 [main] INFO  com.fly.simple.MainRun - COMPUTERNAME -> 7t9lppye5cj7lud
2024-07-06 15:34:16.423 [main] INFO  com.fly.simple.MainRun - ChocolateyInstall -> C:\ProgramData\chocolatey
2024-07-06 15:34:16.424 [main] INFO  com.fly.simple.MainRun - ChocolateyLastPathUpdate -> 133608643383155797
2024-07-06 15:34:16.424 [main] INFO  com.fly.simple.MainRun - ComSpec -> C:\Windows\system32\cmd.exe
2024-07-06 15:34:16.424 [main] INFO  com.fly.simple.MainRun - CommonProgramFiles -> C:\Program Files\Common Files
2024-07-06 15:34:16.425 [main] INFO  com.fly.simple.MainRun - CommonProgramFiles(x86) -> C:\Program Files (x86)\Common Files
2024-07-06 15:34:16.425 [main] INFO  com.fly.simple.MainRun - CommonProgramW6432 -> C:\Program Files\Common Files
2024-07-06 15:34:16.425 [main] INFO  com.fly.simple.MainRun - DokanLibrary1 -> C:\Program Files\Dokan\Dokan Library-1.4.1\
2024-07-06 15:34:16.426 [main] INFO  com.fly.simple.MainRun - DokanLibrary1_LibraryPath_x64 -> C:\Program Files\Dokan\Dokan Library-1.4.1\lib\
2024-07-06 15:34:16.426 [main] INFO  com.fly.simple.MainRun - DokanLibrary1_LibraryPath_x86 -> C:\Program Files\Dokan\Dokan Library-1.4.1\x86\lib\
2024-07-06 15:34:16.426 [main] INFO  com.fly.simple.MainRun - DriverData -> C:\Windows\System32\Drivers\DriverData
2024-07-06 15:34:16.427 [main] INFO  com.fly.simple.MainRun - FPS_BROWSER_APP_PROFILE_STRING -> Internet Explorer
2024-07-06 15:34:16.427 [main] INFO  com.fly.simple.MainRun - FPS_BROWSER_USER_PROFILE_STRING -> Default
2024-07-06 15:34:16.427 [main] INFO  com.fly.simple.MainRun - HOMEDRIVE -> C:
2024-07-06 15:34:16.428 [main] INFO  com.fly.simple.MainRun - HOMEPATH -> \Users\00fly
2024-07-06 15:34:16.428 [main] INFO  com.fly.simple.MainRun - LOCALAPPDATA -> C:\Users\00fly\AppData\Local
2024-07-06 15:34:16.428 [main] INFO  com.fly.simple.MainRun - LOGONSERVER -> \\7t9lppye5cj7lud
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - NODE_PATH -> D:\nodejs
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - NUMBER_OF_PROCESSORS -> 4
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - OS -> Windows_NT
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - PATHEXT -> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - PROCESSOR_ARCHITECTURE -> AMD64
2024-07-06 15:34:16.429 [main] INFO  com.fly.simple.MainRun - PROCESSOR_IDENTIFIER -> Intel64 Family 6 Model 85 Stepping 7, GenuineIntel
2024-07-06 15:34:16.430 [main] INFO  com.fly.simple.MainRun - PROCESSOR_LEVEL -> 6
2024-07-06 15:34:16.430 [main] INFO  com.fly.simple.MainRun - PROCESSOR_REVISION -> 5507
2024-07-06 15:34:16.430 [main] INFO  com.fly.simple.MainRun - PSModulePath -> C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
2024-07-06 15:34:16.430 [main] INFO  com.fly.simple.MainRun - PUBLIC -> C:\Users\Public
2024-07-06 15:34:16.431 [main] INFO  com.fly.simple.MainRun - Path -> C:/Java/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.9.v20231028-0858/jre/bin/server;C:/Java/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x8
6_64_17.0.9.v20231028-0858/jre/bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Git\cmd;C:\Program Files\TortoiseGit\bin;C:\Java\apache-maven-3.9.6\bin;C:\Ja
va\jdk1.8.0\bin;C:\Program Files (x86)\NetSarang\Xshell 7\;C:\Program Files (x86)\NetSarang\Xftp 7\;C:\ProgramData\chocolatey\bin;D:\nodejs\;D:\nodejs;D:\nodejs\node_modules;D:\nodejs\node_global;C:\Users\00fly\AppData\Local\Microsoft\WindowsApps;D:\nodejs\node_gl
obal;D:\Programs\Microsoft VS Code\bin;C:\Java\eclipse;
2024-07-06 15:34:16.431 [main] INFO  com.fly.simple.MainRun - ProgramData -> C:\ProgramData
2024-07-06 15:34:16.431 [main] INFO  com.fly.simple.MainRun - ProgramFiles -> C:\Program Files
2024-07-06 15:34:16.432 [main] INFO  com.fly.simple.MainRun - ProgramFiles(x86) -> C:\Program Files (x86)
2024-07-06 15:34:16.433 [main] INFO  com.fly.simple.MainRun - ProgramW6432 -> C:\Program Files
2024-07-06 15:34:16.433 [main] INFO  com.fly.simple.MainRun - SESSIONNAME -> Console
2024-07-06 15:34:16.433 [main] INFO  com.fly.simple.MainRun - SystemDrive -> C:
2024-07-06 15:34:16.433 [main] INFO  com.fly.simple.MainRun - SystemRoot -> C:\Windows
2024-07-06 15:34:16.434 [main] INFO  com.fly.simple.MainRun - TEMP -> C:\Users\00fly\AppData\Local\Temp\1
2024-07-06 15:34:16.434 [main] INFO  com.fly.simple.MainRun - TMP -> C:\Users\00fly\AppData\Local\Temp\1
2024-07-06 15:34:16.434 [main] INFO  com.fly.simple.MainRun - USERDOMAIN -> 7T9LPPYE5CJ7LUD
2024-07-06 15:34:16.435 [main] INFO  com.fly.simple.MainRun - USERDOMAIN_ROAMINGPROFILE -> 7T9LPPYE5CJ7LUD
2024-07-06 15:34:16.435 [main] INFO  com.fly.simple.MainRun - USERNAME -> 00fly
2024-07-06 15:34:16.435 [main] INFO  com.fly.simple.MainRun - USERPROFILE -> C:\Users\00fly
2024-07-06 15:34:16.435 [main] INFO  com.fly.simple.MainRun - classPath -> .;C:\Java\jdk1.8.0\lib
2024-07-06 15:34:16.436 [main] INFO  com.fly.simple.MainRun - java_home -> C:\Java\jdk1.8.0
2024-07-06 15:34:16.436 [main] INFO  com.fly.simple.MainRun - maven_home -> C:\Java\apache-maven-3.9.6
2024-07-06 15:34:16.437 [main] INFO  com.fly.simple.MainRun - windir -> C:\Windows
2024-07-06 15:34:16.440 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:34:16.526 [pool-2-thread-1] INFO  com.fly.simple.MainRun - jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&createDatabaseIfNotExist=true
2024-07-06 15:34:16.527 [pool-2-thread-1] INFO  com.fly.simple.MainRun - root
2024-07-06 15:34:16.528 [pool-2-thread-1] INFO  com.fly.simple.MainRun - root123

2. centos 服务器jar运行

2024-07-06 15:37:31.264 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:37:31.270 [main] INFO  com.fly.simple.MainRun - BASH_FUNC_which%% -> () {  ( alias;
 eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot "$@"
}
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - DBUS_SESSION_BUS_ADDRESS -> unix:path=/run/user/0/bus
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - HISTCONTROL -> ignoredups
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - HISTSIZE -> 10000
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - HISTTIMEFORMAT -> %F %T root 
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - HOME -> /root
2024-07-06 15:37:31.271 [main] INFO  com.fly.simple.MainRun - HOSTNAME -> 00fly
2024-07-06 15:37:31.272 [main] INFO  com.fly.simple.MainRun - LANG -> en_US.UTF-8
2024-07-06 15:37:31.272 [main] INFO  com.fly.simple.MainRun - LESSOPEN -> ||/usr/bin/lesspipe.sh %s
2024-07-06 15:37:31.272 [main] INFO  com.fly.simple.MainRun - LOGNAME -> root
2024-07-06 15:37:31.272 [main] INFO  com.fly.simple.MainRun - LS_COLORS -> rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
2024-07-06 15:37:31.272 [main] INFO  com.fly.simple.MainRun - MAIL -> /var/spool/mail/root
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - OLDPWD -> /work
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - PATH -> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - PWD -> /000/java-with-docker/target
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - SHELL -> /bin/bash
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - SHLVL -> 1
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - SSH_CLIENT -> 47.123.82.115 51181 22
2024-07-06 15:37:31.273 [main] INFO  com.fly.simple.MainRun - SSH_CONNECTION -> 47.123.82.115 51181 192.168.15.202 22
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - SSH_TTY -> /dev/pts/0
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - TC_LIB_DIR -> /usr/lib64/tc
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - TERM -> xterm
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - USER -> root
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - XDG_RUNTIME_DIR -> /run/user/0
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - XDG_SESSION_ID -> 401
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - _ -> /usr/bin/java
2024-07-06 15:37:31.274 [main] INFO  com.fly.simple.MainRun - which_declare -> declare -f
2024-07-06 15:37:31.275 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:37:31.312 [pool-2-thread-1] INFO  com.fly.simple.MainRun - jdbc:mysql://127.0.0.1:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&createDatabaseIfNotExist=true
2024-07-06 15:37:31.313 [pool-2-thread-1] INFO  com.fly.simple.MainRun - root
2024-07-06 15:37:31.313 [pool-2-thread-1] INFO  com.fly.simple.MainRun - root123

3. centos 服务器docker运行


[+] Running 1/2
 ⠼ Network docker-jwd_default  Created                                                                                                                                                                                                                                   0.4s 
 ✔ Container java-with-docker  Started                                                                                                                                                                                                                                   0.4s 
2024-07-06 15:38:45.009 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:38:45.024 [main] INFO  com.fly.simple.MainRun - HOME -> /root
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - HOSTNAME -> 2563205e02bd
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - JAVA_HOME -> /opt/java/openjdk
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - JAVA_TOOL_OPTIONS -> -XX:+IgnoreUnrecognizedVMOptions -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - JAVA_VERSION -> jdk8u312-b07_openj9-0.29.0
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - JDBC_DRIVER -> com.mysql.cj.jdbc.Driver
2024-07-06 15:38:45.025 [main] INFO  com.fly.simple.MainRun - JDBC_PASSWORD -> test123
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - JDBC_URL -> jdbc:mysql://192.168.15.202:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - JDBC_USERNAME -> test
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - LANG -> en_US.UTF-8
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - LANGUAGE -> en_US:en
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - LC_ALL -> en_US.UTF-8
2024-07-06 15:38:45.026 [main] INFO  com.fly.simple.MainRun - PATH -> /opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2024-07-06 15:38:45.027 [main] INFO  com.fly.simple.MainRun - ------------------------------
2024-07-06 15:38:45.116 [pool-2-thread-1] INFO  com.fly.simple.MainRun - jdbc:mysql://192.168.15.202:3306/jdbc?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true
2024-07-06 15:38:45.117 [pool-2-thread-1] INFO  com.fly.simple.MainRun - test
2024-07-06 15:38:45.117 [pool-2-thread-1] INFO  com.fly.simple.MainRun - test123

六、完整代码

https://gitcode.com/00fly/java-with-docker/overview

在这里插入图片描述


有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/780757.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

股票Level-2行情是什么,应该怎么使用,从哪里获取数据

行情接入方法 level2行情websocket接入方法-CSDN博客 相比传统的股票行情&#xff0c;Level-2行情为投资者打开了更广阔的视野&#xff0c;不仅限于买一卖一的表面数据&#xff0c;而是深入到市场的核心&#xff0c;提供了十档乃至千档的行情信息&#xff08;沪市十档&#…

JavaWeb-【1】HTML

笔记系列持续更新,真正做到详细!!本次系列重点讲解后端,那么第一阶段先讲解前端 目录 1、Javaweb技术体系 2、BS架构说明 3、官方文档 4、网页组成 5、HTML 6、HTML快速入门 7、HTML基本结构 8、HTML标签 ​9、HTML标签使用细节 ①、font标签 ②、字符实体 ③、标…

图神经网络dgl和torch-geometric安装

文章目录 搭建环境dgl的安装torch-geometric安装 在跑论文代码过程中&#xff0c;许多小伙伴们可能会遇到一些和我一样的问题&#xff0c;就是文章所需要的一些库的版本比较老&#xff0c;而新版的环境跑代码会报错&#xff0c;这就需要我们手动的下载whl格式的文件来安装相应的…

SSM中小学生信息管理系统 -计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步&#xff0c;中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架&#xff0c;采用Java编程语言和MySQL数据库&#xff0c;设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心&#xff0c;通过…

机器学习筑基篇,​Ubuntu 24.04 编译安装 Python 及多版本切换

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 编译安装最新Python及多版本切换 描述&#xff1a;说到机器学习&#xff0c;人工智能&#xff0c;深度学习不免会提到Python这一门编程语言&#xff08;人生苦短&#xff0c;及时Pyt…

【MySQL】逻辑架构与存储引擎

一、逻辑架构 1、MySQL逻辑架构 我们可以根据上图来对sql的执行过程进行分析 第一步&#xff1a;客户端与服务器建立一个连接&#xff0c;从连接池中分配一个线程处理SQL语句第二步&#xff1a;SQL接口接受SQL指令第三步&#xff1a;如果是5.7版本&#xff0c;就会先去缓存中…

Facebook数据仓库的变迁与启示

❃博主首页 &#xff1a; <码到三十五> ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a; <搬的每块砖&#xff0c;皆为峰峦之基&#xff1b;公众号搜索(码到…

史上最全的自抗扰控制(ADRC)学习资料

史上最全的自抗扰控制&#xff08;ADRC&#xff09;学习资料 需要的私信我~ 需要的私信我~ 需要的私信我~ ​ 本文将作者近些年来学习ADRC算法的学习资料进行汇总&#xff0c;整理了这一版相对较全的学习资料&#xff0c;包含参考文献以及仿真案例&#xff0c;适合初学者入门&…

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…

21天学通C++:第九、十章节

第九章&#xff1a;类和对象 带默认值的构造函数参数 注意&#xff1a;默认构造函数是调用时可不提供参数的构造函数&#xff0c;而并不一定是不接受任何参数的构造函数。 因此&#xff0c;下面的构造函数虽然有两个参数&#xff0c;但它们都有默认值&#xff0c;因此也是默认…

CurrentHashMap巧妙利用位运算获取数组指定下标元素

先来了解一下数组对象在堆中的存储形式【数组长度&#xff0c;数组元素类型信息等】 【存放元素对象的空间】 Ma 基础信息实例数据内存填充Mark Word,ClassPointer,数组长度第一个元素第二个元素固定的填充内容 所以我们想要获取某个下标的元素首先要获取这个元素的起始位置…

Java 有什么必看的书?

Java必看经典书有这两本&#xff1a; 1、Java核心技术速学版&#xff08;第3版&#xff09; 经典Java开发基础书CoreJava速学版本&#xff01;Java入门优选书籍&#xff0c;更新至Java17&#xff0c;内容皆是精华&#xff0c;让Java学习更简单&#xff0c;让Java知识应用更快速…

fasttext工具介绍

fastText是由Facebook Research团队于2016年开源的一个词向量计算和文本分类工具。尽管在学术上并未带来巨大创新&#xff0c;但其在实际应用中的表现却非常出色&#xff0c;特别是在文本分类任务中&#xff0c;fastText往往能以浅层网络结构取得与深度网络相媲美的精度&#x…

STM32CubeMX实现4X5矩阵按键(HAL库实现)

为了实现计算器键盘&#xff0c;需要使用4X5矩阵按键&#xff0c;因此&#xff0c;我在4X4矩阵键盘上重新设计了一个4X5矩阵按键。原理图如下&#xff1a; 原理描述&#xff1a; 4X5矩阵按键&#xff0c;可以设置4个引脚为输出&#xff0c;5个引脚为输入模式&#xff0c;4个引…

MPS---MPQ86960芯片layout设计总结

MPQ86960 是一款内置功率 MOSFET 和栅极驱动的单片半桥。它可以在宽输入电压 (VIN) 范围内实现高达 50A 的连续输出电流 (IOUT)&#xff0c;通过集成MOSFET 和驱动可优化死区时间 (DT) 并降低寄生电感&#xff0c;从而实现高效率。 MPQ86960 兼容三态输出控制器&#xff0c;另…

Ubantu22.04 通过FlatPak安装微信

Ubuntu22.04 下使用Flatpak稳定安装微信&#xff01; 国际惯例&#xff0c;废话不多说&#xff0c;先上效果图。为啥使用Flatpak,因为Wechat官方只在FlatPak发布了最新的版本。之前使用了Wine以及Dock安装Wechat,效果都不是很理想&#xff0c;bug很多。所以使用了FlatPak。 Fl…

GRPC使用之ProtoBuf

1. 入门指导 1. 基本定义 Protocol Buffers提供一种跨语言的结构化数据的序列化能力&#xff0c;类似于JSON&#xff0c;不过更小、更快&#xff0c;除此以外它还能用用接口定义(IDL interface define language)&#xff0c;通protoc编译Protocol Buffer定义文件&#xff0c;…

【Spring Cloud】微服务的简单搭建

文章目录 &#x1f343;前言&#x1f384;开发环境安装&#x1f333;服务拆分的原则&#x1f6a9;单一职责原则&#x1f6a9;服务自治&#x1f6a9;单向依赖 &#x1f340;搭建案例介绍&#x1f334;数据准备&#x1f38b;工程搭建&#x1f6a9;构建父子工程&#x1f388;创建父…

关闭vue3中脑瘫的ESLine

在创建vue3的时候脑子一抽选了ESLine,然后这傻卵子ESLine老是给我报错 博主用的idea开发前端 ,纯粹是用不惯vscode 关闭idea中的ESLine,这个只是取消红色波浪线, 界面中的显示 第二步,在vue.config.js中添加 lintOnSave: false 到这里就ok了,其他的我试过了一点用没有