普通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-

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python库(6):Pygments库

1 Pygments介绍 在软件开发和文档编写中&#xff0c;代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中&#xff0c;通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中&#xff0c;Pygments库就是这样一个强大的工具&#xff0c;它能够将各…

ValueError: Expected EmbeddingFunction.__call__ to have the following signature

题意&#xff1a; 使用 langchain 时&#xff0c;特别是在定义或调用嵌入函数&#xff08;Embedding Function&#xff09;时&#xff0c;签名&#xff08;函数的参数列表和返回类型&#xff09;不符合预期 问题背景&#xff1a; When I try to pass a Chroma Client to Lang…

搭建论坛和mysql数据库安装和php安装

目录 概念 步骤 安装mysql8.0.30 安装php 安装Discuz 概念 搭建论坛的架构&#xff1a; lnmpDISCUZ l 表示linux操作系统 n 表示nginx前端页面的web服务 m 表示 mysql 数据库 用来保存用户和密码以及论坛的相关内容 p 表示php 动态请求转发的中间件 步骤 &#xff…

【C++深度探索】:继承(定义赋值兼容转换作用域派生类的默认成员函数)

✨ 愿随夫子天坛上&#xff0c;闲与仙人扫落花 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞…

CVE-2024-0603 漏洞复现

CVE-2024-0603 源码&#xff1a;https://gitee.com/dazensun/zhicms 开题&#xff1a; CVE-2024-0603描述&#xff1a;ZhiCms up to 4.0版本的文件app/plug/controller/giftcontroller.php中存在一处未知漏洞。攻击者可以通过篡改参数mylike触发反序列化&#xff0c;从而远程…

python脚本“文档”撰写——“诱骗”ai撰写“火火的动态”python“自动”脚本文档

“火火的动态”python“自动”脚本文档&#xff0c;又从ai学习搭子那儿“套”来&#xff0c;可谓良心质量&#x1f44d;&#x1f44d;。 (笔记模板由python脚本于2024年07月07日 15:15:33创建&#xff0c;本篇笔记适合喜欢钻研python和页面源码的coder翻阅) 【学习的细节是欢悦…

【学习笔记】程序设计竞赛

程序设计竞赛 文章目录 程序设计竞赛0x00 基本操作指南0x01 算法分析0x02 STL和基本数据结构栈队列集合map 0x03 排序插入排序归并排序&#xff08;Merge Sort)快速排序 0x04 搜索技术BFSDFS回溯与剪枝 深度迭代ID A*A star双向广搜 0x05 递推方程0x06 高级数据结构并查集二叉树…

Hi6602 恒压恒流SSR电源方案

Hi6602是一款针对离线式反激电源设计的高性能PWM控制器。Hi6602内集成有通用的原边恒流控制技术&#xff0c;可支持断续模式和连续模式工作&#xff0c;适用于恒流输出的隔离型电源应用中。Hi6602内部具有高精度65kHz开关频率振荡器&#xff0c;且带有抖频功能可优化EMI性能。H…

17.优化算法之解决拓扑排序4

0.基础 1.课程表1 207. 课程表 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean canFinish(int n, int[][] p) {// 1. 准备⼯作int[] in new int[n]; // 统计每⼀个顶点的⼊度Map<Integer, List<Integer>> edges new HashMap<>…

第六十周:文献精读

目录 摘要 Abstract 文献阅读&#xff1a;可解释多水平时间序列预测的时间融合Transformer 一、多水平预测&#xff08;Multi-horizon forecasting&#xff09; 二、过去相关研究 三、现存问题 四、提出方法 五、模型架构 1、门控残差网络(GRN) 2、变量选择网络 3、…

android中activity与fragment之间的各种跳转

我们以音乐播放、视频播放、用户注册与登录为例【Musicfragment&#xff08;音乐列表页&#xff09;、Videofragment&#xff08;视频列表页&#xff09;、MusicAvtivity&#xff08;音乐详情页&#xff09;、VideoFragment&#xff08;视频详情页&#xff09;、LoginActivity&…

开始尝试从0写一个项目--后端(二)

实现学生管理 新增学生 接口设计 请求路径&#xff1a;/admin/student 请求方法&#xff1a;POST 请求参数&#xff1a;请求头&#xff1a;Headers&#xff1a;"Content-Type": "application/json" 请求体&#xff1a;Body&#xff1a; id 学生id …

OneFormer

按照INSTALL.md无法安装natten&#xff0c;不建议复现

1120 买地攻略

solution 土地需要连续&#xff0c;联想到用前缀和。用前缀和表示前i块土地的总价钱&#xff0c;易得任意片连续的土地价格 #include<iostream> using namespace std; const int maxn 1e4 10; int main(){int n, m, price[maxn] {0}, ans 0;scanf("%d%d"…

IT高手修炼手册(4)PowerShell命令

一、前言 PowerShell是一个功能强大的命令行界面和脚本环境&#xff0c;它允许用户管理Windows操作系统和应用程序。 二、文件和目录操作 Get-ChildItem&#xff1a;列出指定路径下的文件和文件夹。简写为ls或dir。 Copy-Item&#xff1a;复制文件和文件夹。简写为copy或cp。 M…

python基础篇(8):异常处理

在Python编程中&#xff0c;异常是程序运行时发生的错误&#xff0c;它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误&#xff0c;并进行适当的处理&#xff0c;从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种&#xff0c;语法错…

数据统计与数据分组18-25题(30 天 Pandas 挑战)

数据统计与数据分组 1. 知识点1.18 分箱与统计个数1.19 分组与求和统计1.20 分组获取最小值1.21 分组获取值个数1.22 分组与条件查询1.23 分组与条件查询及获取最大值1.24 分组及自定义函数1.25 分组lambda函数统计 2. 题目2.18 按分类统计薪水&#xff08;数据统计&#xff09…

ESP32CAM物联网教学10

ESP32CAM物联网教学10 MicroPython 应用体验 小智偶然地发现&#xff0c;有一种新兴的编程模式MicroPython&#xff0c;也能编写ESP32Cam的应用程序了&#xff0c;于是欣然地体验了一把。 编程环境搭建 小智偶然地从下面这家店铺买了一块ESP32Cam&#xff0c;并从客服那里得到…

Angular基础保姆级教程 - 1

Angular 基础总结&#xff08;完结版&#xff09; 1. 概述 Angular 是一个使用 HTML、CSS、TypeScript 构建客户端应用的框架&#xff0c;用来构建单页应用程序。 Angular 是一个重量级的框架&#xff0c;内部集成了大量开箱即用的功能模块。 Angular 为大型应用开发而设计…

花所Flower非小号排名20名下载花所Flower

1、Flower花所介绍 Flower花所是一家新兴的数字货币交易平台&#xff0c;致力于为全球用户提供安全、便捷的交易体验。平台以其强大的技术支持和丰富的交易产品闻名&#xff0c;为用户提供多样化的数字资产交易服务&#xff0c;涵盖了主流和新兴数字货币的交易需求。 2. Flowe…