通过Dockerfile来实现项目可以指定读取不同环境的yml包
通过Dockerfile来实现项目可以指定读取不同环境的yml包
- 1. 挂载目录
- 2. DockerFile
- 3. 运行脚本deploy.sh
- 4. 运行
- 查看日志
- 进入容器
- 5. 接口测试
- 修改application-dev.yml
- 6. 优化Dockerfile
- 7. 部分参数解释
- 8. 优化不同环境下的日志也不同
- 调整 Dockerfile
- 修改部署脚本 deploy.sh
- 重新运行dev与prod
- 最新的目录
- 9. pplication.yml、application-dev.yml、application-test.yml、application-prod.yml这几个有什么区别?
1. 挂载目录
注意这里没有使用docker-compose
2. DockerFile
# 使用适合 Java 8 的官方镜像
FROM openjdk:8-jre-slim# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,指定配置文件位置
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=/app/logs/app.log", "docker-test.jar"]
3. 运行脚本deploy.sh
#!/bin/bash# 部署脚本使用方式: ./deploy.sh [环境名]
# 环境名应为 dev 或 prodENV=$1
if [ "$ENV" != "prod" ] && [ "$ENV" != "dev" ]; thenecho "请指定正确的环境名: dev 或 prod"exit 1
fi# 定义容器和镜像名称
CONTAINER_NAME="docker-test-$ENV"
IMAGE_NAME="docker-test:$ENV"# 为不同环境设置不同的端口
if [ "$ENV" == "prod" ]; thenPORT=19898
elsePORT=29898
fi# 构建 Docker 镜像
docker build -t $IMAGE_NAME .# 停止并删除旧容器
docker rm -f $CONTAINER_NAME# 运行新的 Docker 容器,挂载日志目录到宿主机,并设置环境变量
docker run -d -p $PORT:9898 \-e SPRING_PROFILES_ACTIVE=$ENV \-v /Users/fanzhen/Documents/docker-project/logs:/app/logs \--name $CONTAINER_NAME $IMAGE_NAMEecho "部署 $ENV 环境完成,访问端口:$PORT"
4. 运行
(base) ➜ docker-project sh deploy.sh dev
[+] Building 6.6s (10/10) FINISHED docker:desktop-linux=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 681B 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim 6.2s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> CACHED [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load build context 0.1s=> => transferring context: 19.55MB 0.1s=> [2/5] WORKDIR /app 0.1s=> [3/5] COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar 0.0s=> [4/5] COPY ./config /app/config 0.0s=> [5/5] RUN mkdir /app/logs 0.1s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:c7dcfe05d6c1f467f03a24caafe8a66729f60fcebc2be42b2cbb398885503e1a 0.0s=> => naming to docker.io/library/docker-test:dev 0.0sView build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/tc1irjdh2hiyks0o0k93zanrxWhat's next:View a summary of image vulnerabilities and recommendations → docker scout quickview
Error response from daemon: No such container: docker-test-dev
8a8c4a71e3cad36c9fd2057dee84dbbedcefbc07c6d1ee3e057a96936f94bb1c
部署 dev 环境完成,访问端口:29898
查看日志
(base) ➜ docker-project docker logs docker-test-dev. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.6.13)2025-01-01 10:28:14.640 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : Starting DockerTestApplication using Java 1.8.0_342 on 8a8c4a71e3ca with PID 1 (/app/docker-test.jar started by root in /app)
2025-01-01 10:28:14.642 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : The following 1 profile is active: "dev"
2025-01-01 10:28:15.030 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9898 (http)
2025-01-01 10:28:15.037 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-01-01 10:28:15.037 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68]
2025-01-01 10:28:15.074 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-01-01 10:28:15.075 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 412 ms
2025-01-01 10:28:15.239 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9898 (http) with context path ''
2025-01-01 10:28:15.244 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : Started DockerTestApplication in 0.797 seconds (JVM running for 1.053)
2025-01-01 10:29:49.797 INFO 1 --- [0.0-9898-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-01-01 10:29:49.798 INFO 1 --- [0.0-9898-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-01-01 10:29:49.799 INFO 1 --- [0.0-9898-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2025-01-01 10:29:49.811 INFO 1 --- [0.0-9898-exec-1] c.s.d.dockertest.HeartBeatController : 当前环境是:范缜
2025-01-01 10:30:42.360 INFO 1 --- [0.0-9898-exec-3] c.s.d.dockertest.HeartBeatController : 当前环境是:范缜
进入容器
(base) ➜ docker-project docker exec -it docker-test-dev /bin/bash
宿主机中的application-dev.yml
5. 接口测试
curl -X GET http://0.0.0.0:29898/api/v1/heart-beat
修改application-dev.yml
修改宿主机中的application-dev.yml
重新执行运行脚本就可以获取到最新的配置
6. 优化Dockerfile
# 使用适合 Java 8 的官方镜像,并指定具体的摘要
FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,指定配置文件位置
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=/app/logs/app.log", "docker-test.jar"]
通过FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5
我就指定了每次运行得jdk,是我们已经下载的docker image
(base) ➜ docker-project sh deploy.sh prod
[+] Building 0.0s (10/10) FINISHED docker:desktop-linux=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 972B 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load build context 0.0s=> => transferring context: 995B 0.0s=> CACHED [2/5] WORKDIR /app 0.0s=> CACHED [3/5] COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar 0.0s=> CACHED [4/5] COPY ./config /app/config 0.0s=> CACHED [5/5] RUN mkdir /app/logs 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:f2ff23fd6cbdd0711a2236ed8fef5741a440ce0c9eef1de0729f0fe90bd5cd8f 0.0s=> => naming to docker.io/library/docker-test:prod 0.0sView build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/w8k62khao04fqmmn40xbtlxkpWhat's next:View a summary of image vulnerabilities and recommendations → docker scout quickview
Error response from daemon: No such container: docker-test-prod
26f15fa78e16ace7184b0350006371a9decb2311bc6df4753f2a3006b79ba726
部署 prod 环境完成,访问端口:19898
再次运行脚本就是秒启动了
7. 部分参数解释
-
-Dspring.config.location=/app/config/
是一个 JVM(Java Virtual Machine)系统属性,用于指定 Spring Boot 应用的配置文件位置。
-
-Dlogging.file.name=/app/logs/app.log
Dockerfile 中使用的 ENTRYPOINT 命令包含了 -Dlogging.file.name=/app/logs/app.log 这一部分。这是一个 JVM(Java Virtual Machine)系统属性,用于指定日志文件的输出路径,特别是对于使用 Spring Boot 构建的 Java 应用。这样的设置对于管理容器内应用的日志是非常有用的。
8. 优化不同环境下的日志也不同
docker images --digests
本地所有镜像的信息,包括仓库名、标签、镜像 ID、创建时间、大小以及摘要(digest)
调整 Dockerfile
# 使用适合 Java 8 的官方镜像,并指定具体的摘要
FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 设置时区
ENV TZ=Asia/Shanghai
RUN apt-get update && apt-get install -y tzdata \&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \&& echo $TZ > /etc/timezone \&& dpkg-reconfigure -f noninteractive tzdata# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,使用环境变量指定配置文件位置和日志文件名
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=${LOG_FILE_PATH}", "docker-test.jar"]
修改部署脚本 deploy.sh
#!/bin/bash# 部署脚本使用方式: ./deploy.sh [环境名]
# 环境名应为 dev 或 prodENV=$1
if [ "$ENV" != "prod" ] && [ "$ENV" != "dev" ]; thenecho "请指定正确的环境名: dev 或 prod"exit 1
fi# 定义容器和镜像名称
CONTAINER_NAME="docker-test-$ENV"
IMAGE_NAME="docker-test:$ENV"# 为不同环境设置不同的端口和日志文件路径
if [ "$ENV" == "prod" ]; thenPORT=19898LOG_FILE="/app/logs/prod-app.log"
elsePORT=29898LOG_FILE="/app/logs/dev-app.log"
fi# 停止之前的容器
docker stop $CONTAINER_NAME# 停止并删除旧容器
docker rm -f $CONTAINER_NAME# 构建 Docker 镜像
docker build -t $IMAGE_NAME .# 检查日志文件是否存在,如果不存在则创建空日志文件
LOG_FILE_PATH="./logs/$ENV-app.log"
if [ ! -f "$LOG_FILE_PATH" ]; thentouch "$LOG_FILE_PATH"
fi# 运行新的 Docker 容器,挂载日志目录到宿主机,并设置环境变量
docker run -d -p $PORT:9898 \-e SPRING_PROFILES_ACTIVE=$ENV \-e LOG_FILE_PATH=$LOG_FILE \-v $LOG_FILE_PATH:$LOG_FILE \--name $CONTAINER_NAME $IMAGE_NAMEecho "部署 $ENV 环境完成,访问端口:$PORT"
注意这里不需要删除原来的镜像文件,如果换了新的jar包,会构建新的镜像替代原来的镜像
重新运行dev与prod
没问题
sh deploy.sh dev
sh deploy.sh prod
最新的目录
请忽略docker-compose
9. pplication.yml、application-dev.yml、application-test.yml、application-prod.yml这几个有什么区别?
在现代软件开发中,尤其是使用Spring Boot这类框架时,application.yml文件通常用来存储应用程序的配置信息。为了适应不同的运行环境(如开发、测试、生产等),通常会有多个这样的配置文件,以便根据环境的不同加载不同的配置。下面是关于你提到的各个文件的详细解释:
-
application.yml
这是主配置文件,通常包含所有环境中通用的配置。它是默认被加载的配置文件,无论你运行在哪个环境中。此文件中的配置可以被其他环境专用的配置文件覆盖。 -
application-dev.yml
这个文件包含开发环境特有的配置。它通常包括适用于开发环境的数据库连接、API密钥、调试工具配置等。在开发过程中,可以设置Spring Boot使用dev配置文件,使其覆盖application.yml中的通用配置。 -
application-test.yml
此文件包含测试环境特有的配置,用于单元测试、集成测试等自动化测试环境。这些配置可能包括指向专门的测试数据库、特定的端口号或服务接口等。在自动化测试时,通过设置Spring Boot使用test配置文件,确保应用运行在适合测试的环境中。 -
application-prod.yml
这个文件包含生产环境特有的配置,如生产数据库的凭证、API访问限制、性能优化设置等。在应用部署到生产环境时,这个文件中的配置会覆盖默认的application.yml文件,确保应用按照生产环境的要求运行。
如何切换不同的配置环境
在Spring Boot应用中,你可以通过设置环境变量spring.profiles.active
来指定激活哪个配置文件。例如,通过命令行参数来启动应用时指定使用开发配置:
java -jar your-application.jar --spring.profiles.active=dev
或者在环境变量中设置:
export SPRING_PROFILES_ACTIVE=dev
或者idea中的VM增加 -Dspring.profiles.active=prod
相关文章:

通过Dockerfile来实现项目可以指定读取不同环境的yml包
通过Dockerfile来实现项目可以指定读取不同环境的yml包 1. 挂载目录2. DockerFile3. 运行脚本deploy.sh4. 运行查看日志进入容器 5. 接口测试修改application-dev.yml 6. 优化Dockerfile7. 部分参数解释8. 优化不同环境下的日志也不同调整 Dockerfile修改部署脚本 deploy.sh重新…...
云手机 —— 手机矩阵的 “超级外挂
如何打造手机矩阵 打造手机矩阵主要包括以下几个步骤: 1.确定目标与需求:首先,明确打造手机矩阵的目的和需求,是为了进行电商运营、自媒体推广、任务管理还是其他目的。这将决定后续的手机数量、操作系统选择以及应用安装等。 2.选择手机与操作系统:根据…...

OpenCV的TickMeter计时类
OpenCV的TickMeter计时类 1. TickMeter是一个计时的类1.1 计算耗时1.2 计算循环的平均耗时和FPS1.3 function 2. 案例 1. TickMeter是一个计时的类 https://docs.opencv.org/4.x/d9/d6f/classcv_1_1TickMeter.html#details 1.1 计算耗时 TickMeter tm;tm.start();// do some…...

蓝桥杯JAVA刷题--001
文章目录 题目需求2.代码3.总结 题目需求 2.代码 class Solution {public String convertDateToBinary(String date) {if (date null || date.length() ! 10 || date.charAt(4) ! - || date.charAt(7) ! -) {throw new IllegalArgumentException("输入的日期格式不正确&…...
免费又开源:企业级物联网平台的新选择 ThingsPanel
在开源领域,选择合适的开源协议是开发者和企业能否充分利用平台的关键。ThingsPanel,作为一个专注于物联网的开源平台,近日将协议从 AGPLv3 改为更开放的 Apache 2.0。这一改变对开发者和用户意味着什么? 为什么协议要从 AGPLv3 转…...
鸿蒙开发:文本合成语音
前言 Android开发的同学都知道,在Android当中,实现一段文字合成语音播放,可以使用系统提供的对象TextToSpeech来很快的实现,如果不用系统自带的,也可以使用三方提供的,比如讯飞的语音合成等等,总…...
雷军:科技传奇的逐梦之旅
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...

LeetCode - 初级算法 数组(删除排序数组中的重复项)
免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…...

2024年度培训运维总结
目前带的弟子跟我实战训练运维的总就业率基本可以稳定在 100% 左右(因为我不带小白和没学历和大龄,悟性低都筛掉了还能找我说明条件够了) 以下是弟子私教训练营的最新就业数据(2024年12月25日): 面试辅导…...

java重装小结
一、Java安装 安装路径 https://www.oracle.com/java/technologies/javase/javas e8-archive-downloads.html 具体类型可参考: Java安装配置-CSDN博客 我在这一步主要碰到的问题就是访问官网报404错误,可参考: 在oracle官网下载资源显示…...
ubuntu20.04 中文输入法安装
中文输入法安装指南 在 Ubuntu 20.04 上安装中文输入法,您可以按照以下步骤操作: 打开终端。安装 fcitx 输入法框架和中文输入法模块:sudo apt update sudo apt install fcitx fcitx-pinyin安装中文语言支持:sudo apt install l…...
SQL常用语句(基础)大全
SQL语句的类型 1.DDL 1.库2.表 2.DML 1.插入数据 insert inot2.删除数据 delete / truncate3.修改数据 update set 3.DQL 1.无条件查询2.查询 什么开始 到什么结束3.指定条件查询 1.单个条件 ro in2.多个条件 and4.查询不为NULL值 is not null ,为NULL值 is null5.模糊查询 li…...

计算和可视化相对湿度结果
了解如何确定 CFD 模型中的相对湿度。 了解相对湿度 大气是干燥空气和水蒸气的混合物,每一种的压力之和等于蒸气压。相对湿度是指空气中的水分量与空气在特定温度下可以容纳的最大水分量之比。它通常以百分比表示。它的范围从 0(干燥空气)到…...

uniapp-vue3(下)
关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…...

一起学习Firtran: Fortran中的流程控制与操作符
流程控制语句 在计算机编程中,控制程序流程是算法设计中的一个核心概念,它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。 if语句 在单个 if 语句中只有当测试表达式࿰…...

Sonic:开源Go语言开发的高性能博客平台
Sonic:一个用Go语言开发的高性能博客平台 简介 Sonic,一个以其速度如声速般快速而命名的博客平台,是一个用Go语言开发的高性能博客系统。正如其名字所暗示的,Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...

SpringBoot教程(十四) SpringBoot之集成Redis
SpringBoot教程(十四) | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 (举例讲解)2.4 项目中使用之工具类封装 (正式用这个)2.5 序列化 &…...

RSI和CCI指标组合:如何评估需求供应区?昂首资本实战指南
在市场分析中,分笔成交点数量提供了一个有价值的视角,帮助我们识别需求和供应区。通过这些数据,我们可以假设供需区域的参数与主要振荡器中的区域参数类似。以RSI和CCI为例,这些指标不仅能够反映市场的超买和超卖情况,…...

PTPVT 插值说明
文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式: 位置-时间路径插值算法。 PVT模…...

Spring MVC和servlet
1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...

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

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...