当前位置: 首页 > news >正文

普通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.1container_name: java-with-dockerdeploy:resources:limits:cpus: '1.0'memory: 64Mreservations:cpus: '0.05'memory: 64Mrestart: on-failurelogging:driver: json-fileoptions: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.1container_name: springboot-dbutilsdeploy:resources:limits:cpus: '0.80'memory: 400Mreservations:cpus: '0.05'memory: 200Mports:- 80:8080environment:- 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=password123restart: on-failurelogging:driver: json-fileoptions:max-size: 5mmax-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.1container_name: java-with-dockerdeploy:resources:limits:cpus: '1.0'memory: 64Mreservations:cpus: '0.05'memory: 64Mrestart: on-failureenvironment:- 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.Driverlogging:driver: json-fileoptions: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-

相关文章:

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

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

微观特征轮廓尺寸测量:光学3D轮廓仪、共焦显微镜与台阶仪的应用

随着科技进步&#xff0c;显微测量仪器以满足日益增长的微观尺寸测量需求而不断发展进步。多种高精度测量仪器被用于微观尺寸的测量&#xff0c;其中包括光学3D表面轮廓仪&#xff08;白光干涉仪&#xff09;、共聚焦显微镜和台阶仪。有效评估材料表面的微观结构和形貌&#xf…...

Rust开发环境搭建

Rust开发环境搭建 环境 rust: 1.79.0(2024-06-13)1. Rustup下载器在线安装 windows&#xff1a; https://static.rust-lang.org/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe unix&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh2. R…...

图文识别0难度上手~基于飞浆对pdf简易ocr并转txt

前言 本篇pdf适用windows对视觉识别0基础的的纯小白用户。大佬请绕道~~ 注意&#xff1a; 本项目pdf的ocr对于表格、画图文字&#xff0c;水印等干扰没做任何处理&#xff0c;因此希望各位使用该功能的pdf尽量不要含有这些干扰项&#xff0c;以免影响翻译效果。 流程 1.构建…...

FFmpeg常用命令手册

官方文档&#xff1a;ffmpeg Documentation 常规选项 -i input_url 输入文件或者输入流的路径 Main 选项 -f fmt (input/output) 强制指定输入或输出文件的格式&#xff0c; 常见的格式名称包括flv&#xff0c;mp4、hls、mpegts、avi、mov -c[:stream_specifier] codec (i…...

CTF入门知识点

CTF知识点 md5函数 <?php$a 123;echo md5($a,true); ?> 括号中true显示输出二进制 替换成false显示输出十六进制绕过 ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c&#xff0c;这个字符串前几位刚好是 or 6 而 Mysql 刚好又会把 …...

Leetcode 完美数

1.题目要求: 对于一个 正整数&#xff0c;如果它和除了它自身以外的所有 正因子 之和相等&#xff0c;我们称它为 「完美数」。给定一个 整数 n&#xff0c; 如果是完美数&#xff0c;返回 true&#xff1b;否则返回 false。示例 1&#xff1a;输入&#xff1a;num 28 输出&a…...

springboot中的定时任务编写

第1部分&#xff1a;引言 1.1 定时任务的重要性 在现代软件开发中&#xff0c;定时任务是应用程序自动化和运维效率的关键组成部分。无论是数据备份、系统健康检查、定期报告生成&#xff0c;还是用户活动触发的自动化流程&#xff0c;定时任务都扮演着不可或缺的角色。它们确…...

第100+14步 ChatGPT学习:R实现随机森林分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现随机森林分类 &#xff…...

C#面 :ASP.Net Core中有哪些异常处理的方案?

在 ASP.NET Core中&#xff0c;有多种异常处理方案可供选择。以下是其中几种常见的异常处理方案&#xff1a; 中间件异常处理&#xff1a; ASP.NET Core提供了一个中间件来处理全局异常。通过在Startup类的Configure方法中添加UseExceptionHandler中间件&#xff0c;可以捕获…...

论文辅导 | 基于多尺度分解的LSTM⁃ARIMA锂电池寿命预测

辅导文章 模型描述 锂电池剩余使用寿命&#xff08;Remaining useful life&#xff0c;RUL&#xff09;预测是锂电池研究的一个重要方向&#xff0c;通过对RUL的准确预测&#xff0c;可以更好地管理和维护电池&#xff0c;延长电池使用寿命。为了能够准确预测锂电池的RUL&…...

开关阀(4):对于客户技术要求信息的识别

1.阀门部分 2.执行器 行程时间的一般标准 The stroking times are applicable to throttling control valves and should not exceed 2 seconds/inch of valve diameter 3.附件 4.定位器...

Python统计实战:时间序列分析之二阶曲线预测和三阶曲线预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能&#xff0c;从而更快地掌握解决问题所需的能力。 &#xff08;以下练习题来源于《统计学—基于Python》。请在Q群455547227下载原始数据。&#xff09; 练习题 下表是某只股票…...

Drools开源业务规则引擎(三)- 事件模型(Event Model)

文章目录 Drools开源业务规则引擎&#xff08;三&#xff09;- 事件模型&#xff08;Event Model&#xff09;1.org.kie.api.event2.RuleRuntimeEventManager3.RuleRuntimeEventListener接口说明示例规则文件规则执行日志输出 4.AgentaEventListener接口说明示例监听器实现类My…...

智慧校园行政办公升级,日程监控不可或缺

在智慧校园的行政办公场景下&#xff0c;日程监控功能扮演了一个核心协调者的角色&#xff0c;它细腻地编织起时间管理的网络&#xff0c;确保各项活动与任务在井然有序中高效推进。这一功能通过以下几个方面&#xff0c;展现了其在提升工作效率与团队协作方面的独特价值。 首先…...

RedHat运维-Linux SSH基础3-sshd守护进程

1. sshd这个守护进程提供了OpenSSH服务&#xff0c;请问可以通过编辑哪些配置文件&#xff0c;来配置这个服务呢&#xff1f;________________________ 2. sshd这个守护进程提供了OpenSSH服务&#xff0c;请问可以通过编辑哪些配置文件&#xff0c;来配置这个服务呢&#xff1f…...

医院产科信息化管理系统源码,智慧产科管理系统,涵盖了从孕妇到医院初次建档、历次产检、住院分娩、统计上报到产后42天全部医院服务的信息化管理。

医院产科信息化管理系统源码&#xff0c;智慧产科管理系统&#xff0c;产科专科电子病历系统 技术架构&#xff1a;前后端分离Java&#xff0c;Vue&#xff0c;ElementUIMySQL8.0.36 医院产科信息化管理系统&#xff0c;通过构建专科病例系统实现临床保健一体化&#xff0c;涵…...

Softmax作为分类任务中神经网络输出层的优劣分析

Softmax作为分类任务中神经网络输出层的优劣分析 在深度学习领域&#xff0c;Softmax函数作为分类任务中神经网络的输出层&#xff0c;被广泛应用并展现出强大的优势。然而&#xff0c;任何技术都有其两面性&#xff0c;Softmax函数也不例外。本文将从多个角度深入分析Softmax…...

404白色唯美动态页面源码

404白色唯美动态页面源码,源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 404白色唯美动态页面源码...

细说MCU的ADC模块单通道连续采样的实现方法

目录 一、工程依赖的硬件及背景 二、设计目的 三、建立工程 1、配置GPIO 2、选择时钟源和Debug 3、配置ADC 4、配置系统时钟和ADC时钟 5、配置TIM3 6、配置串口 四、代码修改 1、重定义TIM3中断回调函数 2、启动ADC及重写其回调函数 3、定义用于存储转换结果的数…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...