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

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

 

目录

一、Dockerfile 自定义项目镜像

1.1、创建 SpringBoot 项目并编写

1.2、打包项目(jar)

1.3、编写 Dockerfile 文件,构建镜像

1.4、运行镜像并测试


一、Dockerfile 自定义项目镜像


1.1、创建 SpringBoot 项目并编写

a)简介:就是一个对 用户表 简单的增删改查的 SpringBoot 项目.

b)接口:采用 restful 风格

这里简单回顾以下 restful 风格接口规范

  • 原则: GET(查询)、POST(添加)、PUT(全字段更新)、PATCH(部分字段更新)、DELETE(删除)
  • 使用复数名词: user -> users、 car -> cars
  • 请求和响应指定: request: @RequestBody; response: @ResponseBody
  • 资源唯一标识需要通过路径传参,例如 id
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PutMapping("id")public String updateUser(@PathVariable("id") Integer id, @RequestBody User user) {user.setId(id);userService.update(user);return "ok";}@GetMapping("/{id}")public User getUser(@PathVariable("id") Integer id) {return userService.queryById(id);}@PostMappingpublic String addUser(@RequestBody User user) {userService.insert(user);return "ok";}@DeleteMapping("/{id}")public String delUser(@PathVariable("id") Integer id) {userService.deleteById(id);return "ok";}@GetMappingpublic List<User> getUserList() {return userService.queryAll();}}

c)配置文件:我们重点关注 服务器端口号 和 mysql 连接 ip 地址

server:port: 8081spring:datasource:url: jdbc:mysql://mysql:3306/demo?characterEncoding=utf8&useSSL=falseusername: rootpassword: 1111driver-class-name: com.mysql.cj.jdbc.Driver# 时间处理jackson:date-format: yyyy-MM-ddtime-zone: GMT+8# mybatis xml save path
mybatis:mapper-locations: classpath:mapper/*Mapper.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Ps:由于将来会将 springboot 项目和 mysql 配置到同一个自定义的 docker 网络下,因此 mysql 的 url 配置中的 ip 就使用容器名称即可.

1.2、打包项目(jar)

a)打包完毕后,根据以下目录找到包地址

或者在 target 的目录下也能看到

b)在云服务器上创建一个工作目录,用来存放 jar包 和 Dockerfile文件,将 jar 包从主机移到远端服务器.

[root@VM-8-17-centos apps]# ls
ssm-docker-0.0.1-SNAPSHOT.jar
[root@VM-8-17-centos apps]# pwd
/root/cyk/apps
[root@VM-8-17-centos apps]# 

1.3、编写 Dockerfile 文件,构建镜像

a)选取 openjdk1.8 镜像作为根基(open 表示开源的意思)

在 dockerhub 官网搜索 openjdk,找到对应的版本

找到 8-jdk

可以看到有下载命令,将 openjdk:8-jdk 写到 FROM 后面,表示以此镜像为基础进行开发.

b)编写 Dockerfile 文件

FROM openjdk:8-jdk
ENV BASE_PATH=/cyk/apps
WORKDIR $BASE_PATH
# 将宿主机上的 ssm-docker-0.0.1-SNAPSHOT.jar 移动到 /cyk/apps 目录下并改名为 apps.jar
ADD ssm-docker-0.0.1-SNAPSHOT.jar $BASE_PATH/apps.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar"]
CMD ["apps.jar"]

c)将 Dockerfile 文件移动到云服务器的工作目录( /cyk/apps )

[root@VM-8-17-centos apps]# rz -E
rz waiting to receive.
[root@VM-8-17-centos apps]# ls
Dockerfile  ssm-docker-0.0.1-SNAPSHOT.jar
[root@VM-8-17-centos apps]# pwd
/root/cyk/apps
[root@VM-8-17-centos apps]# 

d)构建镜像

[root@VM-8-17-centos apps]# docker build -t app:1.0 .
[+] Building 46.7s (8/8) FINISHED                                                                                     docker:default=> [internal] load build definition from Dockerfile                                                                            0.0s=> => transferring dockerfile: 326B                                                                                            0.0s=> [internal] load .dockerignore                                                                                               0.0s=> => transferring context: 2B                                                                                                 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jdk                                                               16.2s=> [1/3] FROM docker.io/library/openjdk:8-jdk@sha256:8a9d5c43f540e8d0c003c723a2c8bd20ae350a2efed6fb5719cae33b026f8e7c         30.0s=> => resolve docker.io/library/openjdk:8-jdk@sha256:8a9d5c43f540e8d0c003c723a2c8bd20ae350a2efed6fb5719cae33b026f8e7c          0.0s=> => sha256:e24ac15e052e04a3462ef4984b5d83214f7f65c06f54acd3745a1926e226be16 7.81kB / 7.81kB                                  0.0s=> => sha256:9b829c73b52b92b97d5c07a54fb0f3e921995a296c714b53a32ae67d19231fcd 5.15MB / 5.15MB                                  0.9s=> => sha256:cb5b7ae361722f070eca53f35823ed21baa85d61d5d95cd5a95ab53d740cdd56 10.87MB / 10.87MB                                0.7s=> => sha256:8a9d5c43f540e8d0c003c723a2c8bd20ae350a2efed6fb5719cae33b026f8e7c 1.29kB / 1.29kB                                  0.0s=> => sha256:9413213335131c4e06b21a8e379bd9b6a20afcd6b762540463d5f7c72942dcdd 1.79kB / 1.79kB                                  0.0s=> => sha256:0e29546d541cdbd309281d21a73a9d1db78665c1b95b74f32b009e0b77a6e1e3 54.92MB / 54.92MB                               18.6s=> => sha256:6494e4811622b31c027ccac322ca463937fd805f569a93e6f15c01aade718793 54.57MB / 54.57MB                               21.5s=> => sha256:668f6fcc5fa5532a1dd793456f64daf954192e0521fd65d42af584d5e2d93f55 5.42MB / 5.42MB                                  1.3s=> => sha256:c0879393b07ef5fa816c292b00e3eb4945890bc2a69ab0d1754240cbe9cedf21 212B / 212B                                      1.6s=> => sha256:bef50c41a74d450f2d708be5971c3ba635ed1a714af7f4fa1497886adb2fa734 106.00MB / 106.00MB                             12.4s=> => extracting sha256:0e29546d541cdbd309281d21a73a9d1db78665c1b95b74f32b009e0b77a6e1e3                                       3.1s=> => extracting sha256:9b829c73b52b92b97d5c07a54fb0f3e921995a296c714b53a32ae67d19231fcd                                       0.3s=> => extracting sha256:cb5b7ae361722f070eca53f35823ed21baa85d61d5d95cd5a95ab53d740cdd56                                       0.3s=> => extracting sha256:6494e4811622b31c027ccac322ca463937fd805f569a93e6f15c01aade718793                                       3.2s=> => extracting sha256:668f6fcc5fa5532a1dd793456f64daf954192e0521fd65d42af584d5e2d93f55                                       0.2s=> => extracting sha256:c0879393b07ef5fa816c292b00e3eb4945890bc2a69ab0d1754240cbe9cedf21                                       0.0s=> => extracting sha256:bef50c41a74d450f2d708be5971c3ba635ed1a714af7f4fa1497886adb2fa734                                       3.3s=> [internal] load build context                                                                                               0.1s=> => transferring context: 9.88kB                                                                                             0.0s=> [2/3] WORKDIR /cyk/apps                                                                                                     0.2s=> [3/3] ADD ssm-docker-0.0.1-SNAPSHOT.jar /cyk/apps/apps.jar                                                                  0.1s=> exporting to image                                                                                                          0.1s=> => exporting layers                                                                                                         0.1s=> => writing image sha256:89839bc7dd0c546892b523403eb18d8b3a5d84993c4be71a9dd4ca2875bd1e9d                                    0.0s=> => naming to docker.io/library/app:1.0                                                                                      0.0s
[root@VM-8-17-centos apps]# docker images
REPOSITORY                  TAG              IMAGE ID       CREATED          SIZE
app                         1.0              89839bc7dd0c   28 seconds ago   526MB

1.4、运行镜像并测试

a)先自定义一个网桥,方便后续运行容器时直接加入到统一网络下.

[root@VM-8-17-centos apps]# docker network create mynet
dd8d11bdbd1ff64905a877c350752521f8dc772480b0a9db378769d283a143ac
[root@VM-8-17-centos apps]# 
[root@VM-8-17-centos apps]# 
[root@VM-8-17-centos apps]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
f84ca6fc4b48   bridge    bridge    local
a1b8a8a8e372   host      host      local
dd8d11bdbd1f   mynet     bridge    local
38b4ab15453c   none      null      local

d)启动容器

启动 mysql:

docker run -d --name mysql -p 3306:3306 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1111 --network mynet mysql:5.7

Ps:这里不要忘了准备 MySQL 的数据 

启动 springboot 项目:

docker run -d --name app -p 8081:8081 --network mynet app:1.0

检查启动日志:

[root@VM-8-17-centos apps]# docker logs -f app.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.7.6)2023-12-28 10:40:00.259  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : Starting SsmDockerApplication using Java 1.8.0_312 on 4ecafb679d7f with PID 1 (/apps/apps.jar started by root in /apps)
2023-12-28 10:40:00.273  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : No active profile set, falling back to 1 default profile: "default"
2023-12-28 10:40:02.271  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2023-12-28 10:40:02.290  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-12-28 10:40:02.290  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.69]
2023-12-28 10:40:02.391  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-12-28 10:40:02.391  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1959 ms
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Parsed mapper file: 'class path resource [mapper/UserMapper.xml]'
2023-12-28 10:40:03.399  INFO 1 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2023-12-28 10:40:03.675  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-28 10:40:03.690  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : Started SsmDockerApplication in 4.412 seconds (JVM running for 5.138)

 

e)注意事项:运行容器时,一旦出现以下情况

no main manifest attribute, in apps.jar

一定要看一下 pom.xml 文件中是否存在 <skip>true<skip> 的配置,因为打包时他会跳过主类.

f)postman 测试接口

这里我为了防止黑客攻击,建立隧道和远端服务器连接,开放映射本地 9091 端口.

访问后,云服务器上检查日志,也可以观察到打印相应日志(测试成功)

[root@VM-8-17-centos ~]# docker logs app.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.7.6)2023-12-28 10:40:00.259  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : Starting SsmDockerApplication using Java 1.8.0_312 on 4ecafb679d7f with PID 1 (/apps/apps.jar started by root in /apps)
2023-12-28 10:40:00.273  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : No active profile set, falling back to 1 default profile: "default"
2023-12-28 10:40:02.271  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2023-12-28 10:40:02.290  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-12-28 10:40:02.290  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.69]
2023-12-28 10:40:02.391  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-12-28 10:40:02.391  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1959 ms
Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
Parsed mapper file: 'class path resource [mapper/UserMapper.xml]'
2023-12-28 10:40:03.399  INFO 1 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
2023-12-28 10:40:03.675  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-28 10:40:03.690  INFO 1 --- [           main] com.cyk.SsmDockerApplication             : Started SsmDockerApplication in 4.412 seconds (JVM running for 5.138)
2023-12-28 10:43:17.431  INFO 1 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-12-28 10:43:17.431  INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-12-28 10:43:17.432  INFO 1 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@45f8529a] was not registered for synchronization because synchronization is not active
2023-12-28 10:43:17.524  INFO 1 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2023-12-28 10:43:17.819  INFO 1 --- [nio-8081-exec-1] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@1585874780 wrapping com.mysql.cj.jdbc.ConnectionImpl@1380045] will not be managed by Spring
==>  Preparing: select * from user;
==> Parameters: 
<==    Columns: id, name, age
<==        Row: 1, cyk, 20
<==        Row: 2, lyj, 19
<==        Row: 4, pdder, 100
<==      Total: 3
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@45f8529a]

相关文章:

Dockerfile - 基于 SpringBoot 项目自定义镜像(项目上线全过程)

目录 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 1.2、打包项目&#xff08;jar&#xff09; 1.3、编写 Dockerfile 文件&#xff0c;构建镜像 1.4、运行镜像并测试 一、Dockerfile 自定义项目镜像 1.1、创建 SpringBoot 项目并编写 a&#xff09;简…...

论文查重降重写成大白话可以吗

大家好&#xff0c;今天来聊聊论文查重降重写成大白话可以吗&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文查重降重&#xff1a;用大白话解析 一、引言 写论文是每个…...

【WPF.NET开发】WPF中的命令

本文内容 什么是命令WPF 中的简单命令示例WPF 命令中的四个主要概念命令库创建自定义命令 命令是 Windows Presentation Foundation (WPF) 中的一种输入机制&#xff0c;与设备输入相比&#xff0c;它提供的输入处理更侧重于语义级别。 示例命令如许多应用程序均具有的“复制…...

怎么将epub转换成txt文件?

怎么将epub转换成txt文件&#xff1f;在当前时代&#xff0c;各种各样的电子书是很多人都喜欢接触并阅读的&#xff0c;但很少有人知道电子书格式的不同&#xff0c;其中就包括epub和txt格式&#xff0c;这两种格式虽然都可以展示文本但能达到的效果完全不一样&#xff0c;在某…...

Java单词排序

【问题描述】 编写一个程序&#xff0c;从一个文件中读入单词&#xff08;即&#xff1a;以空格分隔的字符串&#xff09;&#xff0c;并对单词进行排序&#xff0c;删除重复出现的单词&#xff0c;然后将结果输出到另一个文件中。 【输入形式】从一个文件sort.in中读入单词。 …...

Moonsong Labs与Web3演变

作者&#xff1a;Derek Yoo 创建Moonsong Labs的理由 我们创建了Moonsong Labs&#xff0c;其使命是创建推动Web3采用的软件基础设施协议。我们的动力来自这样一个观念&#xff0c;即Web3使人类相互交往更加透明、高效和公正。这无疑是一个值得努力实现的目标&#xff0c;但更…...

流媒体学习之路(WebRTC)——GCC分析(4)

流媒体学习之路(WebRTC)——GCC分析&#xff08;4&#xff09; —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标&#xff1a;可以让大家熟悉各类Qos能力、带宽估计能力&#xff0c;提供每个环节关键参数调节接口并实现一个json全配置…...

k8s持久化存储(NFS-StorageClass)

一、StatefulSet由以下几个部分组成&#xff1a; 用于定义网络标志&#xff08;DNS domain&#xff09;的Headless Service用于创建PersistentVolumes的volumeClaimTemplates定义具体应用的StatefulSet 二、StatefulSet 特点 StatefulSet 适用于有以下某个或多个需求的应用&a…...

java servlet软件缺陷库管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet软件缺陷库管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean&#xff08;mvc模式)&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOM…...

19|BabyAGI:根据气候变化自动制定鲜花存储策略

19&#xff5c;BabyAGI&#xff1a;根据气候变化自动制定鲜花存储策略 随着 ChatGPT 的崭露头角&#xff0c;我们迎来了一种新型的代理——Autonomous Agents&#xff08;自治代理或自主代理&#xff09;。这些代理的设计初衷就是能够独立地执行任务&#xff0c;并持续地追求长…...

面试经典150题(62-64)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第三十天&#xff09;完成了3道(62-64)150&#xff1a; 62.&#xff08;226. 翻转二叉树&#xff09;题目描述&#xff1a; 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其…...

流量困境下,2024年餐饮商家的直播带货生意到底怎么做?

据官方数据显示&#xff0c;截至2023年2月&#xff0c;抖音生活服务餐饮商家直播间数量达到43万&#xff0c;2023年7月&#xff0c;抖音生活服务餐饮行业自播商家数较1月增长134%。可以说&#xff0c;直播带货已经成为餐饮商家的常态化的线上营销模式&#xff0c;也成为各大餐饮…...

C++ 具名要求-基本概念-指定该类型对象可以默认构造

指定该类型对象可以默认构造 要求 以下情况下&#xff0c;类型 T 满足可默认构造 (DefaultConstructible) &#xff1a; 给定 任意标识符 u&#xff0c; 下列表达式必须合法且拥有其指定的效果 表达式后条件T u对象 u 被默认初始化。T u{}对象 u 被值初始化或聚合初始化。…...

T527 Android13遥控适配

T527 Android13遥控的适配和官方提供的文档有些不一样&#xff0c;按照官方的文档不能够正常适配到自己的遥控器。 首先确保驱动是否有打开CONFIG_AW_IR_RX和CONFIG_RC_DECODERSy 以及CONFIG_IR_NEC_DECODERm&#xff0c;这个可以在longan/out/t527对应的目录下的.config查看是…...

第三部分使用脚手架:vue学习(61-65)

文章目录 61 创建vue脚手架![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f71d4324be0542209e690ab9e886d199.png)62 分析脚手架结构63 render函数64 修改默认配置65 ref 属性 61 创建vue脚手架 写完vue文件&#xff0c;没有脚手架做翻译&#xff0c;浏览器不认识…...

【Linux学习笔记】解析Linux系统内核:架构、功能、工作原理和发展趋势

操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体&#xff0c;它们互相依赖&#xff0c;不可分割。计算机的硬件&#xff0c;含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是…...

springboot连接oracle报错ORA-12505解决方案

springboot连接oracle报错ORA-12505解决方案 springboot项目&#xff0c;在测试环境连接正常&#xff0c;生产环境连接数据库报错ORA-12505。 测试环境连接数据库语句为jdbc:oracle:thin:xxxx.xxxx.xxxx.xxxx:1521:orcl 生产环境修改对应ip后报错ORA-12505, TNS:listener does…...

服务器为什么大多用 Linux?

服务器为什么大多用 Linux&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#…...

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法&#xff0c;对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块&#xff0c;VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…...

通信及信号处理领域期刊影响因子、分区及期刊推荐-2024版

期刊名IF(202401)中科院分区(20231227)备注IEEE Journal on Selected Areas in Communications16.4计算机科学1区Top通信顶刊IEEE Transactions on Signal Processing5.4工程技术2区Top信号处理顶刊IEEE Transactions on Information Theory2.5计算机科学3区信息论顶刊IEEE Tra…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...