Spring Boot 与 TDengine 的深度集成实践(一)
引言
在当今数字化时代,数据处理与存储对于各类应用的重要性不言而喻。Spring Boot 作为一款流行的 Java 开发框架,以其快速开发、约定大于配置、内嵌容器等特性,大大提升了 Java 企业级应用的开发效率,降低了开发门槛,让开发者能够专注于业务逻辑的实现,广泛应用于各种 Web 应用、微服务架构等项目中。
TDengine 则是一款高性能、云原生的时序数据库,专门针对物联网、工业互联网、运维监控等场景进行优化。它具备卓越的写入性能,能够支持每秒数百万条数据的写入,同时拥有高效的数据压缩算法,有效降低了存储成本,其独特的超级表设计和灵活的查询语法,也使得对时序数据的处理变得更加便捷和高效。
将 Spring Boot 与 TDengine 集成,能够充分发挥两者的优势,为需要处理大量时序数据的应用提供强大的技术支持。在物联网场景中,大量传感器设备不断产生海量的时序数据,通过集成 Spring Boot 与 TDengine,可以实现对这些数据的快速采集、存储和分析,为实时监控、设备状态预测等业务提供有力支撑;在工业互联网领域,生产线上的各种设备运行数据同样需要高效处理,这种集成方案能够满足对设备运行状态实时监测和故障预警的需求,保障生产的稳定运行。
环境准备
在开始集成 Spring Boot 与 TDengine 之前,我们需要先准备好开发环境,确保相关软件和工具都已正确安装和配置。
安装 Java
Java 是 Spring Boot 开发的基础,因此我们首先需要安装 Java Development Kit(JDK)。目前,Java 有多个版本可供选择,建议使用长期支持(LTS)版本,以确保稳定性和安全性,比如 JDK 11 或 JDK 17 。你可以从 Oracle 官方网站或 OpenJDK 项目官网下载适合你操作系统的 JDK 安装包。
以 Windows 系统为例,安装步骤如下:
- 下载 JDK 安装包后,双击运行安装程序,按照安装向导的提示进行操作。在安装过程中,可以选择自定义安装路径,建议将 JDK 安装在一个全英文且路径层级较浅的目录下,例如C:\Program Files\Java\jdk-11.0.11,以避免因路径问题导致的潜在错误。
- 安装完成后,需要配置环境变量。右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,然后在 “系统属性” 窗口中点击 “环境变量” 按钮。在 “系统变量” 区域中,新建一个变量名为JAVA_HOME,变量值为 JDK 的安装路径,例如C:\Program Files\Java\jdk-11.0.11。接着,找到Path变量,点击 “编辑”,在弹出的窗口中点击 “新建”,添加%JAVA_HOME%\bin和%JAVA_HOME%\jre\bin两个路径,这两个路径分别指向 JDK 的二进制文件目录和 Java 运行时环境的二进制文件目录,确保系统能够找到 Java 相关的可执行文件 。
- 配置完成后,打开命令提示符(CMD),输入java -version命令,如果显示出 Java 的版本信息,则说明 JDK 安装和环境变量配置成功。
安装 Maven
Maven 是一个项目管理和构建工具,它可以帮助我们自动化构建项目、管理项目依赖等。安装 Maven 的步骤如下:
- 从 Maven 官方网站(https://maven.apache.org/download.cgi)下载最新版本的 Maven 二进制包,选择与你操作系统相应的版本进行下载,通常选择下载 Binary zip archive 版本 。
- 下载完成后,将 Maven 压缩包解压到你希望安装的目录,例如D:\maven\apache-maven-3.8.6 。
- 配置环境变量。与配置 JDK 环境变量类似,在 “系统变量” 中新建一个变量名为MAVEN_HOME,变量值为 Maven 的解压路径,例如D:\maven\apache-maven-3.8.6。然后,编辑Path变量,添加%MAVEN_HOME%\bin路径,这样系统就可以找到 Maven 的命令行工具。
- 验证 Maven 安装是否成功。打开命令提示符,输入mvn -v命令,如果显示出 Maven 的版本信息,则说明安装成功。
此外,为了提高依赖下载速度,我们可以配置 Maven 的本地仓库和镜像。在 Maven 的安装目录下,找到conf文件夹中的settings.xml文件,进行如下配置:
- 配置本地仓库:在settings.xml文件中找到<localRepository>标签,如果该标签不存在,则在<settings>标签内添加如下内容,将本地仓库路径设置为你希望的目录,例如D:\maven\repository:
<localRepository>D:\maven\repository</localRepository>
- 配置镜像:在国内,直接连接中央仓库下载依赖可能速度较慢,我们可以使用阿里云的镜像来加速下载。在settings.xml文件中找到<mirrors>标签,在其中添加以下镜像配置:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
安装 TDengine
TDengine 的安装过程因操作系统而异,这里以 Linux 系统(CentOS 7 为例)安装 TDengine 的 Server 端为例进行介绍 :
- 从 TDengine 官方网站(https://www.taosdata.com/cn/getting-started/)下载适合你操作系统和硬件架构的安装包,TDengine 提供了 rpm、deb、tar.gz 等多种格式的安装包,这里我们选择 tar.gz 格式的安装包,例如TDengine-server-3.0.4.0-Linux-x64.tar.gz 。
- 将下载的安装包上传到 Linux 服务器的指定目录,例如/usr/local/tdengine 。
- 解压安装包。使用以下命令解压:
tar -zxvf TDengine-server-3.0.4.0-Linux-x64.tar.gz
解压后会得到一个TDengine-server的文件夹。4. 进入解压后的文件夹,执行安装脚本。使用以下命令:
cd TDengine-server
sudo ./install.sh
在安装过程中,会提示你是否加入已有的集群,如果是首次安装,直接回车跳过即可。安装完成后,会提示相关的配置和启动信息 。5. 配置 TDengine。TDengine 的配置文件位于/etc/taos/taos.cfg,你可以根据实际需求修改其中的配置参数,例如数据存储路径、日志存储路径等 。6. 启动 TDengine。使用以下命令启动服务:
sudo systemctl start taosd
可以使用以下命令检查服务状态:
sudo systemctl status taosd
如果服务状态显示为active (running),则说明 TDengine 安装和启动成功。
安装完成后,你可以使用 TDengine 提供的命令行工具taos来测试数据库的连接和基本操作。例如,输入taos命令进入 TDengine 的命令行界面,然后可以执行创建数据库、表,插入数据等操作 。
通过以上步骤,我们完成了 Java、Maven 和 TDengine 的安装和基本配置,为后续的 Spring Boot 与 TDengine 集成开发做好了准备。
创建 Spring Boot 项目
使用 Spring Initializr 创建项目
Spring Initializr 是 Spring Boot 官方提供的一个快速创建 Spring Boot 项目的工具,它可以帮助我们快速生成项目的基础结构,并自动添加所需的依赖。我们可以通过 Web 界面、IDE 插件或命令行等方式使用它,这里我们以 Web 界面方式为例进行创建。
- 打开浏览器,访问 Spring Initializr 网站:https://start.spring.io/ 。该网站提供了简洁直观的界面,方便我们进行项目配置。
- 在页面中进行项目配置:
-
- Project:选择项目构建工具,这里我们选择 “Maven Project”,Maven 是一个广泛使用的项目管理和构建工具,它通过 pom.xml 文件来管理项目的依赖和构建过程,能够帮助我们自动化编译、测试、打包等操作 。
-
- Language:选择编程语言,这里我们选择 “Java”,Java 作为一种成熟且广泛应用的编程语言,具有跨平台、面向对象、安全性高等特点,非常适合企业级应用开发。
-
- Spring Boot:选择 Spring Boot 版本,这里我们选择最新的稳定版本,比如 “3.2.0”,新版本通常会带来性能优化、功能增强以及安全修复等优势 。
-
- Project Metadata:
-
-
- Group:输入项目组 ID,通常使用公司或组织域名的逆序,比如 “com.example”,这样可以确保项目组 ID 的唯一性,便于在 Maven 仓库中管理项目依赖。
-
-
-
- Artifact:输入项目名,例如 “spring-boot-tdengine-integration”,这个名称将作为 Maven 的 Artifact ID,用于标识项目。
-
-
-
- Name:输入项目显示名称,也可以保持与 Artifact 一致。
-
-
-
- Description:输入项目描述信息,这是可选的,用于对项目进行简要说明,方便团队成员了解项目的用途和目标。
-
-
-
- Package Name:输入包名,通常是 Group 和 Artifact 的组合,例如 “com.example.springboottdengineintegration”,包名用于组织项目中的 Java 类,遵循一定的命名规范有助于代码的管理和维护 。
-
-
-
- Packaging:选择项目打包方式,这里我们选择 “Jar”,Spring Boot 项目默认使用 Jar 打包方式,这种方式可以将项目及其依赖打包成一个可执行的 Jar 文件,方便部署和运行,在生产环境中,我们可以直接通过java -jar命令来启动应用 。
-
-
-
- Java Version:选择 JDK 版本,根据我们之前安装的 JDK,这里选择对应的版本,比如 “11” 。
-
- 在 “Dependencies” 部分添加项目依赖:
-
- 搜索并添加 “Spring Web” 依赖,Spring Web 依赖提供了构建 Web 应用所需的基础组件,包括 Spring MVC 框架和内置的 Tomcat 服务器等,它使得我们可以方便地创建 RESTful 接口、处理 HTTP 请求和响应等操作,为后续实现数据的接收和展示功能提供支持。
-
- 搜索并添加 “Spring Data JPA” 依赖,Spring Data JPA 是 Spring Data 的一部分,它提供了一种基于 JPA(Java Persistence API)的简化数据访问方式,通过使用 Spring Data JPA,我们可以使用简单的接口和方法来操作数据库,而无需编写大量的 SQL 语句,大大提高了开发效率,方便我们与 TDengine 数据库进行交互。
- 完成配置后,点击 “Generate” 按钮,Spring Initializr 会生成一个包含项目基础结构的 ZIP 文件,下载并解压该文件,即可得到我们的 Spring Boot 项目。
项目结构介绍
解压后的 Spring Boot 项目目录结构如下:
spring-boot-tdengine-integration
├── .gitignore
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── springboottdengineintegration
│ │ │ ├── SpringBootTdengineIntegrationApplication.java
│ │ │ ├── config
│ │ │ ├── controller
│ │ │ ├── dao
│ │ │ ├── service
│ │ │ └── entity
│ │ └── resources
│ │ ├── application.properties
│ │ ├── static
│ │ └── templates
│ └── test
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── springboottdengineintegration
│ │ └── SpringBootTdengineIntegrationApplicationTests.java
│ └── resources
└── target
- .gitignore:版本控制系统 Git 的配置文件,用于指定哪些文件或目录不需要被 Git 跟踪,比如编译生成的文件、日志文件等,避免将不必要的文件提交到代码仓库中,保持仓库的整洁和高效 。
- mvnw 和 mvnw.cmd:Maven Wrapper 的脚本文件,分别用于 Linux 和 Windows 系统。Maven Wrapper 可以让项目使用指定版本的 Maven,而无需在本地全局安装该版本的 Maven,它会自动下载并使用项目指定的 Maven 版本,确保项目在不同环境中的构建一致性,比如当团队成员使用不同的 Maven 版本时,通过 Maven Wrapper 可以保证每个人使用的 Maven 版本与项目要求的一致 。
- pom.xml:Maven 项目对象模型文件,是项目的核心配置文件。它定义了项目的基本信息,如 Group ID、Artifact ID、版本号等,同时管理项目的依赖关系,我们在 Spring Initializr 中添加的依赖都会在这个文件中体现,例如:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
在后续开发中,如果需要添加新的依赖,也可以手动在这个文件中进行配置,然后通过 Maven 的mvn clean install命令来下载新的依赖 。
- src:项目源代码目录,包含main和test两个子目录,分别用于存放生产代码和测试代码 。
-
- src/main/java:存放项目的 Java 源代码,按照包名进行组织,我们的业务逻辑代码、配置类、控制器、数据访问层代码等都放在这里。其中,SpringBootTdengineIntegrationApplication.java是 Spring Boot 项目的启动类,包含main方法,通过运行这个类来启动整个 Spring Boot 应用,它使用了@SpringBootApplication注解,这是一个组合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan等注解,用于开启 Spring Boot 的自动配置和组件扫描功能 。config目录用于存放配置类,比如数据库连接配置、自定义 Bean 配置等;controller目录用于存放控制器类,处理 HTTP 请求并返回响应;dao目录用于存放数据访问对象(DAO),负责与数据库进行交互;service目录用于存放业务逻辑层代码,处理具体的业务逻辑;entity目录用于存放实体类,对应数据库中的表结构 。
-
- src/main/resources:存放项目的资源文件,如配置文件、静态资源、模板文件等。其中,application.properties是 Spring Boot 的默认配置文件,我们可以在这个文件中配置项目的各种属性,如数据库连接信息、服务器端口号等;static目录用于存放静态资源,如 CSS、JavaScript、图片等,这些资源可以直接通过浏览器访问;templates目录用于存放模板文件,如 Thymeleaf、Freemarker 等模板引擎的模板文件,用于生成动态页面 。
-
- src/test/java:存放项目的测试代码,用于对项目中的功能进行单元测试和集成测试,SpringBootTdengineIntegrationApplicationTests.java是一个默认的测试类,用于测试 Spring Boot 应用的基本功能,我们可以在这个类中编写各种测试方法,使用 JUnit、Mockito 等测试框架来验证代码的正确性 。
-
- src/test/resources:存放测试相关的资源文件,比如测试用的配置文件、测试数据等 。
- target:项目构建输出目录,Maven 在构建项目时会将编译后的 class 文件、资源文件以及打包后的 Jar 文件等输出到这个目录下 。
了解项目的目录结构和各文件的作用,有助于我们在后续开发中更好地组织和管理代码,提高开发效率。
添加 TDengine 依赖
在完成 Spring Boot 项目的创建后,我们需要在项目中添加 TDengine 相关的依赖,以便能够与 TDengine 数据库进行交互。依赖管理是 Maven 项目的重要特性之一,通过在pom.xml文件中声明依赖,Maven 会自动下载并管理这些依赖及其传递依赖,确保项目在不同环境中的一致性和可重复性 。
打开项目根目录下的pom.xml文件,在<dependencies>标签内添加 TDengine 的 JDBC 驱动依赖和 Java SDK 依赖。TDengine 官方提供了 JDBC 驱动,使得 Java 应用能够通过标准的 JDBC 接口与 TDengine 数据库进行通信,而 Java SDK 则提供了更丰富的功能和便捷的操作方法,方便我们在 Java 代码中对 TDengine 进行各种操作 。
<dependencies>
<!-- TDengine JDBC驱动依赖 -->
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>tdengine-jdbc</artifactId>
<version>3.0.4.0</version>
</dependency>
<!-- TDengine Java SDK依赖(如果需要更高级功能,可添加) -->
<dependency>
<groupId>com.taosdata</groupId>
<artifactId>taos-sdk</artifactId>
<version>3.0.4.0</version>
</dependency>
<!-- 其他已有的依赖,如Spring Web、Spring Data JPA等 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
在添加依赖时,需要注意版本号的选择。版本号3.0.4.0是当前的示例版本,你应该根据实际情况选择与你安装的 TDengine 服务器版本相匹配的驱动和 SDK 版本,以确保兼容性和稳定性 。可以通过 TDengine 官方网站或 Maven 仓库(https://mvnrepository.com/)查询最新的版本信息 。如果版本不匹配,可能会导致连接错误、功能异常等问题 。
添加完依赖后,保存pom.xml文件,Maven 会自动下载这些依赖及其传递依赖。如果 Maven 没有自动下载,可以在命令行中进入项目根目录,执行mvn clean install命令,Maven 会读取pom.xml文件中的依赖信息,并从配置的镜像仓库中下载相应的依赖包到本地仓库中,以供项目使用 。在下载过程中,如果网络连接不稳定或仓库地址不可用,可能会出现下载失败的情况,此时可以检查网络连接、镜像配置或尝试更换仓库地址 。
通过添加 TDengine 依赖,我们的 Spring Boot 项目已经具备了与 TDengine 数据库进行交互的基本能力,接下来就可以进行数据库连接配置等后续步骤了 。
配置数据库连接
在完成依赖添加后,我们需要在 Spring Boot 项目中配置 TDengine 数据库的连接信息。Spring Boot 通过配置文件来管理各种配置参数,这种方式使得配置的修改和维护更加方便,同时也提高了项目的可移植性和可扩展性 。
我们可以在src/main/resources目录下的application.properties文件(如果使用 YAML 格式配置,则为application.yml文件)中添加 TDengine 的连接配置。以下是在application.properties文件中的配置示例:
# TDengine数据库连接URL,需要替换为实际的TDengine服务器地址、端口号和数据库名
spring.datasource.url=jdbc:TAOS://localhost:6030/your_database_name
# TDengine数据库用户名,默认为root
spring.datasource.username=root
# TDengine数据库密码,默认为taosdata,实际使用中请替换为安全的密码
spring.datasource.password=taosdata
# TDengine JDBC驱动类名
spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver
在上述配置中:
- spring.datasource.url:指定 TDengine 数据库的连接 URL,其格式为jdbc:TAOS://<服务器地址>:<端口号>/<数据库名>。其中,<服务器地址>需要替换为实际的 TDengine 服务器 IP 地址或域名,如果 TDengine 服务器与 Spring Boot 应用在同一台机器上运行,可以使用localhost;<端口号>默认为 6030,这是 TDengine 的默认服务端口;<数据库名>需要替换为你在 TDengine 中创建的实际数据库名称,例如iot_data,用于存储物联网设备产生的时序数据 。如果需要设置其他连接参数,如字符集、时区等,可以在 URL 后面以?key=value的形式添加,例如jdbc:TAOS://localhost:6030/iot_data?charset=UTF-8&timezone=UTC-8 。
- spring.datasource.username:指定连接 TDengine 数据库的用户名,TDengine 默认的用户名是root,在实际应用中,如果有自定义的用户并分配了相应的权限,可以使用自定义用户名 。
- spring.datasource.password:指定连接 TDengine 数据库的密码,默认密码是taosdata,为了确保数据库的安全,建议在生产环境中修改为一个强密码,并妥善保管 。
- spring.datasource.driver-class-name:指定 TDengine 的 JDBC 驱动类名,com.taosdata.jdbc.TSDBDriver是 TDengine 官方提供的 JDBC 驱动类,用于建立 Java 应用与 TDengine 数据库之间的连接 。
如果你使用的是application.yml文件,配置如下:
spring:
datasource:
url: jdbc:TAOS://localhost:6030/your_database_name
username: root
password: taosdata
driver-class-name: com.taosdata.jdbc.TSDBDriver
YAML 格式的配置文件以缩进表示层级关系,更加简洁易读,在实际项目中,可以根据个人习惯和团队规范选择使用application.properties或application.yml文件进行配置 。
配置完成后,Spring Boot 在启动时会读取这些配置信息,并根据这些信息创建与 TDengine 数据库的连接。如果配置信息有误,例如服务器地址错误、端口号被占用、用户名或密码错误等,在应用启动时会抛出相应的异常,如org.springframework.jdbc.CannotGetJdbcConnectionException,提示无法获取数据库连接 。此时,需要仔细检查配置信息,确保其准确性。同时,还需要确保 TDengine 服务器已经正确启动并运行,网络连接正常,以保证 Spring Boot 应用能够成功连接到 TDengine 数据库 。
相关文章:
Spring Boot 与 TDengine 的深度集成实践(一)
引言 在当今数字化时代,数据处理与存储对于各类应用的重要性不言而喻。Spring Boot 作为一款流行的 Java 开发框架,以其快速开发、约定大于配置、内嵌容器等特性,大大提升了 Java 企业级应用的开发效率,降低了开发门槛࿰…...
SpringBoot + Netty + Vue + WebSocket实现在线聊天
最近想学学WebSocket做一个实时通讯的练手项目 主要用到的技术栈是WebSocket Netty Vue Pinia MySQL SpringBoot,实现一个持久化数据,单一群聊,支持多用户的聊天界面 下面是实现的过程 后端 SpringBoot启动的时候会占用一个端口ÿ…...
数据结构实验2.3:Josephus问题求解
文章目录 一,问题描述二,基本要求三,算法设计(1)存储结构设计(2)算法设计 四,示例代码五,运行效果 一,问题描述 在现实生活以及计算机科学的一些场景中&…...
Ruby语言的代码重构
Ruby语言的代码重构:探索清晰、可维护与高效的代码 引言 在软件开发的过程中,代码的质量直接影响到项目的可维护性、扩展性和整体性能。随着时间的推移,系统的需求变化,代码可能会变得混乱和难以理解,因此࿰…...
CAN/FD CAN总线配置 最新详解 包含理论+实战(附带源码)
看前须知:本篇文章不会说太多理论性的内容(重点在理论结合实践),顾及实操,应用,一切理论内容支撑都是为了后续实际操作进行铺垫,重点在于读者可以看完文章应用。(也为节约读者时间&a…...
杰文字悖论:效率提升的副作用
最近,Deepseek的火爆让我们开始反思一个有趣的现象:杰文斯悖论。这是1856年,经济学家杰文斯提出来的一个有趣的现象:当技术效率提高时,资源的使用量反而会增加,而不是减少。听起来可能有点不可思议。杰文斯…...
AcWing 6118. 蛋糕游戏
贪心 为了方便描述,下面将贝茜和埃尔茜分别称为a、b。 已知蛋糕的数量为偶数个,b每次只能吃左右边界上的蛋糕,a每次操作将两个蛋糕变成一个,发现都会使蛋糕的数量减一,且a先操作将蛋糕数量从偶数变成奇数,…...
【前端】【Nuxt3】Nuxt 3 开发中因生命周期理解不足导致的常见错误分类及其解决方案
以下是 Nuxt 3 开发中因生命周期理解不足导致的常见错误分类及其解决方案,以结构化形式呈现: 一、数据获取与异步处理 错误 1:错误使用客户端钩子获取数据 问题:在 onMounted 中获取数据,导致 SSR 失效。示例&#x…...
【kubernetes】BusyBox
目录 1. 说明2. 在 Kubernetes 中的角色2.1 轻量级调试工具2.2 临时容器2.3 网络测试2.4 文件系统检查 3. 为什么选择 BusyBox?4. 常见用法5. 注意事项 1. 说明 1.BusyBox 是一个轻量级、开源的 Linux 工具集,将多种常见的 Unix 工具(如 ls、…...
Leetcode——239. 滑动窗口最大值
题解一 思路 第一次做困难的题,确实把我既困住了又难住了,确实自己一点都想不出来。 这个思路,差不多就是,自己定义一个单调队列。 添加的时候,判断是否比队列最后的元素大,如果比它大,就把…...
kubernetes configMap 存储
1.模型 首先会在每一个节点上安装一个叫 agent 端 agent 端要做的作用就是监听当前的目标配置中心的配置选项是否发送更新动作 如果有的话 我的agent 端的话要从远程的配置中心 去下载最新的配置文件 替换我当前的 再去触发nginx实现重载 当然对于后期的运维工程师 如果想去发…...
架构思维:查询分离 - 表数据量大查询缓慢的优化方案
文章目录 Pre引言案例何谓查询分离?何种场景下使用查询分离?查询分离实现思路1. 如何触发查询分离?方式一: 修改业务代码:在写入常规数据后,同步建立查询数据。方式二:修改业务代码:…...
A2DP(Advanced Audio Distribution Profile)是蓝牙协议栈中用于音频传输的一个标准化协议
A2DP(Advanced Audio Distribution Profile)是蓝牙协议栈中用于音频传输的一个标准化协议,主要用于高质量音频流的无线传输。以下是A2DP协议的详细信息: 定义 A2DP协议允许音源设备(Source,简称SRC&#…...
Redisson使用详解
一、Redisson 核心特性与适用场景 Redisson 是基于 Redis 的 Java 客户端,提供分布式对象、锁、集合和服务,简化分布式系统开发。 典型应用场景: 分布式锁:防止重复扣款、超卖控制(如秒杀库存)。数据共享…...
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
作者:林子熠、饶子昊 2025 年 3 月 18 日 Oracle 双箭齐发,正式发布了 JDK 24 和 GraalVM 24,带来了众多新特性。 JDK 24 在性能和安全性方面均有改进(特性列表链接见下),其中较大的一处改动是在 JDK 中…...
游戏编程模式学习(编程质量提升之路)
文章目录 前言一、命令模式(Command Pattern)1.命令模式练习场景I.需求场景 2.解耦命令与执行者3.使用命令对玩家角色和AI的操作进行统一抽象4. 命令模式的撤销实现 二、享元模式1.应用场景2.目的3.实现方式 三、原型模式1.运用场景2.实现方式 四、状态模…...
计算机视觉五大技术——深度学习在图像处理中的应用
深度学习是利用“多层神经网络”实现人工智能的一种方式 计算机视觉:“对图像中的客观对象构建明确而有意义的描述”,识别图片中的含义进行处理 1.图像分类——“图里有狗” 判断整张图片属于哪个类别,判断图片是“猫”还是“狗” 思路&a…...
Mixed Content: The page at https://xxx was loaded over HTTPS
一、核心原因分析 Mixed Content 警告是由于 HTTPS 页面中引用了 HTTP 协议的资源(如脚本、图片、iframe 等),导致浏览器因安全策略阻止加载这些非加密内容。HTTP 资源可能被中间人攻击篡改,破坏 HTTPS 页面的整体安全性。 二、推荐解决方案 1. 强制资源升级为 HTTPS •…...
transforms-pytorch4
数据通常不会直接是机器学习算法可以使用的“最终格式”。我们使用转换(transforms)来对数据进行处理,使其适合训练。 所有的 TorchVision 数据集都提供了两个参数:transform 用于修改特征,target_transform 用于修改…...
Springboot----@Role注解的作用
Role(BeanDefinition.ROLE_INFRASTRUCTURE) 是 Spring 框架中的一个注解,用于显式标记 Bean 的角色,表明该 Bean 是 Spring 容器内部的基础设施组件(如后置处理器、工具类等),而非用户直接使用的业务 Bean。其核心作用…...
SpringBoot项目报错: 缺少 Validation
目录 为什么需要Validation?如何使用Validation? 缺少validation?这不过是代码的一个小小问题,就像被风带走的一片叶子,轻轻一吹就能解决啦! 在你的项目中,如果你发现自己需要进行数据验证&…...
MySQL vs MSSQL 对比
在企业数据库管理系统中,MySQL 和 Microsoft SQL Server(MSSQL)是最受欢迎的两大选择。MySQL 是一款开源的关系型数据库管理系统(RDBMS),由 MySQL AB 开发,现归属于 Oracle 公司。而 MSSQL 是微…...
预测分析(四):面向预测分析的神经网络简介
文章目录 面向预测分析的神经网络简介神经网络模型1. 基本概念2. 前馈神经网络3. 常见激活函数4. 循环神经网络(RNN)5. 卷积神经网络(CNN) MPL结构工作原理激活函数训练方法 基于神经网络的回归——以钻石为例构建预测钻石价格的M…...
实战交易策略 篇十四:江南神鹰捕捉热点和熊市生存交易策略
文章目录 系列文章捕捉热点是股市最大的掘金术市场温度不低于50是热点产生的必要条件题材的大小和新颖程度决定热点的持续时间和涨幅炒作热点的3个阶段捕捉热点的方法与步骤操作实战案例熊市生存术“熊市最好的做法是离开股市”的说法是一句空话熊市盈利模式:不轻言底部,超跌…...
去中心化衍生品(以Synthetix为例)
去中心化衍生品(以Synthetix为例) 核心概念 合成资产(Synths): 定义:链上追踪现实资产价值的代币化合约(如sXAU追踪黄金,iBTC反向追踪比特币)。 类型: 正…...
JavaScript重难点突破:事件循环
想了解事件循环,首先要了解js中线程的概念。 宿主环境 在浏览器环境中,js实际上包含了三个部分ECMAScript、DOM(文档对象模型)、BOM(浏览器对象模型),我们最熟悉的js代码指的是ECMAScript这一…...
Python每日一题(15)
Python每日一题2025.4.4 一、题目题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 二、分析三、源代码四、deepseek 一、题目 题目描述 您需要写一种数据结构,来维护一些数(都是绝对值 1 0 9 10^9 109 以内的数)的集合,…...
#SVA语法滴水穿石# (003)关于 sequence 和 property 的区别和联系
在 SystemVerilog Assertions (SVA) 中,sequence 和 property 是两个核心概念,它们既有区别又紧密相关。对于初学者,可能不需要过多理解;但是要想写出复杂精美的断言,深刻理解两者十分重要。今天,我们汇总和学习一下该知识点。 1. 区别 特性sequenceproperty定义描述一系…...
有人DTU使用MQTT协议控制Modbus协议的下位机-含数据库
本文为备忘录,不做太多解释。 DTU型号:G780 服务器:win2018 一。DTU设置 正确设置波特率,进入配置状态,获取当前参数,修改参数,设置并保存所有参数。 1.通道1设置 2.Modbus轮询设置 二&am…...
Smart Link 技术全面解析
1.1 网络冗余技术的演进与需求 1.2 Smart Link 的核心价值与本文目标 第一章 Smart Link 技术概述 2.1 Smart Link 的应用场景与背景 2.2 Smart Link 的基本概念与组网角色 2.3 Smart Link 与传统技术的对比 第二章 Smart Link 工作原理 3.1 Smart Link 组的构成与运行机…...
【学Rust写CAD】30 Alpha256结构体补充方法(alpha256.rs)
源码 impl Alpha256 {#[inline]pub fn alpha_mul(&self, x: u32) -> u32 {let mask 0xFF00FF;let src_rb ((x & mask) * self.0) >> 8;let src_ag ((x >> 8) & mask) * self.0;(src_rb & mask) | (src_ag & !mask)} }代码分析 功能 输…...
提升 Web 性能:使用响应式图片优化体验
在现代 Web 开发中,图片通常占据页面加载的大部分带宽,如何高效管理图片资源直接影响用户体验和性能得分。Google 的 Lighthouse 工具在性能审计中特别强调“使用响应式图片”(Uses Responsive Images),旨在确保图片在…...
基于K8s的演示用单机ML服务部署
这是仅用一台机器(比如一台MacBook)模拟在k8s上部署一个机器学习服务的演示用实例。 项目地址:https://github.com/HarmoniaLeo/Local-K8s-ML-Demo 该实例分为以下几个部分: 使用KerasTensorflow搭建并训练神经网络,…...
强化中小学人工智能教育:塑造未来社会的科技基石
在数字化浪潮席卷全球的今天,人工智能(AI)已成为推动社会进步与经济发展的核心力量。面对这一不可逆转的趋势,如何培养具备AI素养与创新能力的下一代,成为各国教育改革的重中之重。辽宁省教育厅近日发布的《关于加强中小学人工智能教育的实施方案》,无疑为我国中小学人工…...
音视频基础(视频的主要概念)
文章目录 **1. 视频码率(Bitrate)****概念****分类****码率对比** **2. 视频帧率(Frame Rate, FPS)****概念****常见帧率****帧率 vs. 观感** **3. 视频分辨率(Resolution)****概念****常见分辨率****分辨率…...
JWT与Session的实战选择-杂谈(1)
JWT与Session的实战选择:从原理到踩坑心得 作为在金融科技领域经历过多次认证方案迭代的开发者,我想分享一些实战经验。这两种方案适用场景各异,选型需慎重考量。 一、本质差异:状态管理方式 Session机制:服务端维护…...
SQL Server安装后 Reporting Services 配置失败
问题现象: 完成 SQL Server 2022 安装后,尝试配置 Reporting Services (SSRS) 时失败,错误提示 “报表服务器数据库配置无效” 或 “无法启动 Reporting Services 服务”(错误代码 0x80070005)。 快速诊断 检查服务状态…...
操作系统面经(一)
部分参考来自小林coding 线程、进程、协程 进程是操作系统分配资源(内存、文件等)的基本单位,每个进程独立运行,互相隔离,稳定性高但开销大;线程是CPU调度的基本单位,属于同一进程的多个线程共…...
Qt 中 findChild和findChildren绑定自定义控件
在 Qt 中,findChild 和 findChildren 是两个非常实用的方法,用于在对象树中查找特定类型的子对象。这两个方法是 QObject 类的成员函数,因此所有继承自 QObject 的类都可以使用它们。当您需要查找并绑定自定义控件时,可以按照以下…...
对模板方法模式的理解
对模板方法模式的理解 一、场景1、题目【[来源](https://kamacoder.com/problempage.php?pid1087)】1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 二、不采用模板方法模式1、代码2、问题 三、采用模板方法模式1、代码 四、总结 一、场景 1、题目【来源】 …...
SpringMVC+Spring+MyBatis知识点
目录 一、相关概念 1.关系 2.网页 3.架构 4.URL 5.http 6.https 7.服务器 8.Tomcat 9.Servelet 10.Javaweb作用域对象 11.JSP 二、相关操作 1.RequestDispatcher 2.sendRedirect 3.cookie 4.Session 5.Filter过滤器 6.Listener监听器 7.MVC模型 8.JDBC连接…...
程序化广告行业(58/89):系统架构与广告反作弊深度剖析
程序化广告行业(58/89):系统架构与广告反作弊深度剖析 大家好!在程序化广告这个充满挑战与机遇的领域,不断学习和探索是保持竞争力的关键。今天,我希望和大家一起学习进步,深入了解程序化广告行…...
一周学会Pandas2 Python数据处理与分析-NumPy简介
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩…...
第二十七章:Python-Aquarel库与多种主题库结合实现Matplotlib美化
资源绑定附上完整资料供读者参考学习! 一、库介绍与安装 1.1 Aquarel库 Aquarel是一个轻量级的Python库,用于简化Matplotlib的样式配置,使数据可视化更加美观和高效。 1.2 Catppuccin库 Catppuccin是一个社区驱动的粉彩主题库࿰…...
leetcode155.最小栈
思路源自 【力扣hot100】【LeetCode 155】最小栈 为了让检索时间达到o(1),采用空间换时间,维护两个栈,第一个栈实现正常的push、pop、top,另一个栈的栈顶每次都只放以一个栈中最小的元素 class MinStack …...
Mysql 中的 MyISAM 引擎
🧱 什么是 MyISAM? MyISAM 是 MySQL 早期的默认存储引擎,特点是结构简单、读取速度快,但不支持事务和行级锁。 它适合那些 读多写少、对事务安全要求不高 的场景,比如旧版博客系统、数据仓库等。 📦 MyISA…...
操作系统、虚拟化技术与云原生及云原生AI简述
目录 操作系统基础 操作系统定义 操作系统的组成 操作系统的分类 Linux操作系统特性 虚拟化技术 概述 CPU虚拟化 内存虚拟化 I/O虚拟化 虚拟化技术 虚拟化平台管理工具 容器 容器与云原生:详细介绍 容器的特点 什么是云原生? 云原生的特点 容器与云原生的…...
Java EE期末总结(第二章)
目录 一、JSP页面里的page指令 二、JSP脚本元素 1、全局声明<%!……%> 2、表达式<%……%> 3、脚本程序段<%……%> 三、文件包含指令include 四、引入标签库指令taglib 五、JSP动作标签 1、包含文件动作标签 2、请求转发动作标签 3、JavaBean动作标签 …...
FreeRTOS任务查询和信息统计API
下面例举几个常见的任务查询API(其余可参考FreeRTOS开发手册): UBaseType_t Priority; Priority uxTaskPriorityGet(QUERYTask_Handler); printf("Task Pri %d \r\n",Priority); TaskStatus_t * TaskStatusArray; UBaseType_t …...
SQLark(百灵连接):一款面向信创应用开发者的数据库开发和管理工具
SQLark(百灵连接)是一款面向信创应用开发者的数据库开发和管理工具,用于快速查询、创建和管理不同类型的数据库系统。 目前可以支持达梦数据库、Oracle 以及 MySQL。 SQL 智能编辑器 基于语法语义解析实现代码补全能力,为你提供…...