Spring Boot:数据库的整合

Spring Boot

  • 前言
  • Spring Boot 整合 JDBC
  • Spring Boot 整合 Druid 数据源
  • Spring Boot 整合 MyBatis
  • Spring Boot 整合 JPA

在这里插入图片描述

前言

在 Spring Boot :Web开发之视图模板技术的整合 文章中,介绍了 Spring Boot 整合视图模板技术。然而,仅仅整合视图模板技术可能还不能满足所有业务需求,因此还需要进一步扩展 Spring MVC 的默认配置。

简单补充说明
扩展 Spring Boot 中的 Spring MVC 默认配置通常涉及实现 WebMvcConfigurer 接口以自定义视图解析器、拦截器等,使用 @ControllerAdvice 处理全局异常和数据绑定,自定义参数解析器和返回值处理器,配置 CORS 、静态资源处理、异常映射等,以及通过 @Bean 定义或覆盖默认 Bean 。这些操作有助于满足特定业务需求,但需注意避免与自动配置冲突。

在 Spring Boot 学习中,已初步了解到开发 Web 项目时构建完整应用的两个关键步骤——视图显示和业务逻辑代码的编写。但是,一个完整的应用往往还需要与数据库进行交互,以实现数据的持久化存储和检索。通过整合数据库,可以利用 Spring Boot 的自动配置和简化特性,高效地管理数据库连接、执行 CRUD 操作,并确保数据的安全性和一致性。下面简单介绍 Spring Boot 整合数据库。

Spring Boot 整合 JDBC

Spring Boot 整合 JDBC 的过程相对简单,其提供了自动配置来简化 JDBC 的配置。

简单示例:
首先,创建新项目 SpringBootIntegJDBC

注:
在勾选启动器上勾选 Web 、JDBCMySQL
在这里插入图片描述

然后,在 application.properties 全局配置文件中只需要配置数据库连接信息(关于 Spring 数据源在 Spring Boot 中有默认配置)

spring.datasource.username=root
spring.datasource.password=0123
spring.datasource.url=jdbc:mysql://localhost:3306/springbootintegjdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

最后,在 SpringBootIntegJdbcApplicationTests 测试类中进行测试

package cn.edu.SpringBootIntegJDBC;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.jdbc.core.JdbcTemplate;import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Objects;@SpringBootTest
class SpringBootIntegJdbcApplicationTests {@Autowiredprivate DataSource dataSource;@Autowiredprivate JdbcTemplate jdbcTemplate;@Testvoid contextLoads() throws SQLException {
//        // 输出数据源类型;Spring Boot 默认的数据源为 HikariDataSource ,而不是 C3P0
//        System.out.println(dataSource.getClass());
//        // 获取数据库的连接对象
//        Connection connection = dataSource.getConnection();
//        System.out.println(connection);
//        connection.close();// 获取 springbootintegjdbcdemo 表的所有记录List<Map<String, Object>> maps = jdbcTemplate.queryForList("select id,name from springbootintegjdbcdemo");System.out.println(maps);}
}

结果如图:在这里插入图片描述

Spring Boot 整合 Druid 数据源

Druid 常见问题
Druid 是阿里巴巴推出的一款开源的高性能数据库连接池,提供了强大的监控和扩展功能,支持所有 JDBC 兼容的数据库,如 Oracle、MySQL、SQL Server 等。Spring Boot 默认使用 HikariCP 作为数据源( HikariDataSource 是基于 HikariCP 连接池实现的 Java 数据库连接池),但 Druid 由于其出色的性能和监控功能,在实际开发中也很受欢迎。

Spring Boot 整合 Druid 数据源的过程也相对直接。

简单示例:
首先,创建新项目 SpringBootIntegDruid ,并在 pom.xml 中添加以下依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version>
</dependency><!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version>
</dependency><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

注:
在勾选启动器上勾选 Web 、JDBCMySQLThymeleaf
在这里插入图片描述

然后,在 resources 目录下创建 log4j.properties 资源文件并进行以下配置

#日志级别,分为八个级别( Off-关闭日志记录 > Fatal-严重错误 > Error-错误 > Warn-警告 > Info-运行信息 > Debug-调试 > Trace-低级信息 > All-所有日志记录)
#日志级别越高,过滤的信息越多#配置根节点
log4j.rootLogger=Debug,stdout,D
#配置控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.Threshold=Info
##输出格式(%d %p [%1] %m %n——日期时间 类 路径 信息 换行)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%l] %m %n#配置文件输出
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.Append=true
log4j.appender.D.File=./log4j.log
log4j.appender.D.Threshold=Debug
#输出格式
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d %p [%l] %m %n

接着,在 application.properties 全局配置文件中进行 type 配置而改变数据源。并且,还需要配置 Druid 数据源特性( Spring Boot 默认配置中没有)
DruidDataSource 配置

spring.datasource.username=root
spring.datasource.password=0123
spring.datasource.url=jdbc:mysql://localhost:3306/springbootintegjdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#type 配置而改变数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置 Druid 数据源特性
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select 1
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
#配置监控统计拦截的 filters ,去掉后监控界面 sql 无法统计,wall 用于防火墙
spring.datasource.filters=stat,wall,log4j
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.useGlobalDataSourceStat=true
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

随之,创建 Configuration 包并在包内创建一个 DruidConfiguration 类

package cn.edu.SpringBootIntegDruid.Configuration;import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.jakarta.StatViewServlet;
import com.alibaba.druid.support.jakarta.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;// 通过配置类创建数据源对象,并手动获取这些配置,配置到数据源
@Configuration
public class DruidConfiguration {@ConfigurationProperties(prefix = "spring.datasource") // 把配置 Druid 数据源特性值注入到 DruidDataSource 对象中@Bean // 返回对象存放到 Spring IoC 容器中public DataSource dataSource(){return new DruidDataSource();}// 配置监控整个 Web 应用@Beanpublic ServletRegistrationBean getStatViewServlet(){ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet());// 映射 /druid/ 下的所有地址到 StatViewServletString[] urlArr = new String[]{"/druid/*"};// 设置对本 Servlet 的 url 映射地址servletRegistrationBean.setUrlMappings(Arrays.asList(urlArr));// druid 后台页面基本设置Map<String,String> stringMap = new HashMap<>();// 后台登录用户账号stringMap.put("loginUsername","admin");// 后台登录用户密码stringMap.put("loginPassword","admin");// 安全性设置:允许 ip 地址能否访问stringMap.put("allow"," "); // 设置为空字符则任何 ip 地址都可以访问 druid 监控后台// stringMap.put("deny","ip地址") // 指定某个 ip 地址不可访问servletRegistrationBean.setInitParameters(stringMap);return servletRegistrationBean;}// 配置 Web 监控的拦截器 filter@Beanpublic FilterRegistrationBean getWebStatFilter(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());// 除了外,拦截所有请求filterRegistrationBean.setUrlPatterns(Arrays.asList(new String[]{"/*"}));Map<String,String> stringMap = new HashMap<>();stringMap.put("exclusions","/druid/*,*.js,*.css,*.jpg,*.png");return filterRegistrationBean;}
}

再创建 Controller 包并在包内创建一个 DruidDemoController 类

package cn.edu.SpringBootIntegDruid.Controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import java.util.List;
import java.util.Map;@Controller
public class DruidDemoController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMapping("/DruidDemo.html")public String DruidDemo(Model model){List<Map<String, Object>> maps = jdbcTemplate.queryForList("select id,name from springbootintegjdbcdemo");model.addAttribute("druidEntities",maps);return "DruidDemo";}
}

还有在 resources/templates 的目录下创建一个 DruidDemo.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>DruidDemo</title>
</head>
<body><div th:each="druidEntities,druidEntity:${druidEntities}"><span th:text="${druidEntities}" /></div>
</body>
</html>

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/druid 进行登录,再输入 http://localhost:8080/DruidDemo.html 后查看 SQL 监控
结果如图:
在这里插入图片描述

查询结果:
在这里插入图片描述

SQL 监控结果:
在这里插入图片描述

Spring Boot 整合 MyBatis

Spring Boot 整合 MyBatis 是一种常见的做法,用于简化 Java Web 应用的数据库访问。

简单示例:
首先,创建新项目 SpringBootIntegMyBatis

注:
在勾选启动器上勾选 Web 、JDBCMySQLMyBatis
在这里插入图片描述

然后,在 application.properties 全局配置文件中进行以下配置

spring.datasource.username=root
spring.datasource.password=0123
spring.datasource.url=jdbc:mysql://localhost:3306/springbootintegjdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#指定 mybatis 配置文件位置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mappers/*.xml

接着,分别创建 Entity 包和 Dao 包,并且对应创建一个 MyBatisDemoEntity 类和 MyBatisEntityDemoDao 接口

package cn.edu.SpringBootIntegMyBatis.Entity;public class MyBatisDemoEntity {private int id;private String name;public MyBatisDemoEntity() {}public MyBatisDemoEntity(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "MyBatisEntityDemo{" +"id=" + id +", name='" + name + '\'' +'}';}
}

声明一个方法,以添加用户为例

package cn.edu.SpringBootIntegMyBatis.Dao;import cn.edu.SpringBootIntegMyBatis.Entity.MyBatisDemoEntity;public interface MyBatisEntityDemoDao {// 添加public void add(MyBatisDemoEntity myBatisEntityDemo);
}

随之,在 resources/mybatis 目录下创建一个 mybatis-config.xml 配置文件,并进行以下配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><settings><setting name="mapUnderscoreToCamelCase" value="true"/></settings>
</configuration>

再在 resources/mybatis/mappers 目录下创建一个 MyBatisEntityDemoDao.xml 映射文件,并进行以下配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace 必须为接口的全类名 -->
<mapper namespace="cn.edu.SpringBootIntegMyBatis.Dao.MyBatisEntityDemoDao"><!-- id 必须为接口对应的方法名 --><select id="add">insert into springbootintegjdbcdemo  (name) values (#{name})</select>
</mapper>

最后,先在 SpringBootIntegMyBatisApplication 启动类中添加 @MapperScan({“cn.edu.SpringBootIntegMyBatis.Dao”}) 注解
在这里插入图片描述
再在 SpringBootIntegMyBatisApplicationTests 测试类中进行测试

package cn.edu.SpringBootIntegMyBatis;import cn.edu.SpringBootIntegMyBatis.Dao.MyBatisEntityDemoDao;
import cn.edu.SpringBootIntegMyBatis.Entity.MyBatisDemoEntity;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class SpringBootIntegMyBatisApplicationTests {@Autowiredprivate MyBatisEntityDemoDao myBatisEntityDemoDao;@Testvoid contextLoads() {// 添加测试MyBatisDemoEntity myBatisEntityDemo = new MyBatisDemoEntity();myBatisEntityDemo.setName("赵云");myBatisEntityDemoDao.add(myBatisEntityDemo);}
}

结果如图:
在这里插入图片描述
在这里插入图片描述

Spring Boot 整合 JPA

JPA 是 Java EE 5 的标准之一,提供了一种对象关系映射(ORM)的规范,使得开发者可以使用面向对象的方式来操作数据库。
浅谈JPA框架

Spring Boot 整合 JPA 可以极大地简化数据持久层的配置和开发。

简单示例:
首先,创建新项目 SpringBootIntegJPA

注:
在勾选启动器上勾选 Web 、JDBCMySQLJPA
在这里插入图片描述

然后,在 application.properties 全局配置文件中进行以下配置

spring.datasource.username=root
spring.datasource.password=0123
spring.datasource.url=jdbc:mysql://localhost:3306/springbootintegjdbc
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# SpringBoot 内部使用 SpringData , SpringData 的 JPA 是使用 Hibernate 实现的
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

接着,分别创建 Entity 包、Dao 包和 Controller 包,并且对应创建一个 JpaDemoEntity 类、JpaDemoDao 接口和 JpaDemoController 类

package cn.edu.SpringBootIntegJPA.Entity;import jakarta.persistence.*;@Entity
@Table(name = "springbootintegjdbcdemo")
public class JpaDemoEntity {private int id;private String name;@Id@GeneratedValue(strategy = GenerationType.IDENTITY)public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "JpaEntityDemo{" +"id=" + id +", name='" + name + '\'' +'}';}
}

注:JpaDemoDao 接口继承 JpaRepository<实体类,主键类型>即可

package cn.edu.SpringBootIntegJPA.Dao;import cn.edu.SpringBootIntegJPA.Entity.JpaDemoEntity;
import org.springframework.data.jpa.repository.JpaRepository;public interface JpaDemoDao extends JpaRepository<JpaDemoEntity,Integer> {
}

注:没有使用视图模板的情况下,在 JpaDemoController 类中添加 @ResponseBody 注解

package cn.edu.SpringBootIntegJPA.Controller;import cn.edu.SpringBootIntegJPA.Dao.JpaDemoDao;
import cn.edu.SpringBootIntegJPA.Entity.JpaDemoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class JpaDemoController {@Autowiredprivate JpaDemoDao jpaDemoDao;@ResponseBody // 在没有使用视图模板下,使用该注解@GetMapping("/JpaDemo.html")public String save(){JpaDemoEntity jpaDemoEntity = new JpaDemoEntity();jpaDemoEntity.setName("关羽");jpaDemoDao.save(jpaDemoEntity);return "添加成功!!!";}
}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/JpaDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

.net框架和c#程序设计第二次测试

一、实验内容 1、设计一个用户登录页面webform1.aspx&#xff0c;效果如下图所示&#xff1a; 2、点击webform1.aspx中“还未注册”连接进入register.aspx&#xff0c;注册页面效果如下图所示&#xff1a;点击用户注册信息到usershow.aspx页面&#xff0c;并显示注册的用户信息…

思迈特:“人工智能+”浪潮里,国产BI到了关键时刻

作为首个“AI程序员”&#xff0c;Devin最近参与了一系列工作&#xff0c;包括在人力资源外包平台Upwork完成编程工作&#xff1b;潜入一家明星创业公司内部群交流&#xff0c;为公司CTO调整代码方案等。这让整个软件工程行业大受震撼&#xff0c;程序员留言“刷屏”。 “AI…

机器视觉学习(十二)—— 绘制图形

目录 一、绘制函数参数说明 1.1 cv2.line(&#xff09;绘制直线 1.2 cv2.rectangle&#xff08;&#xff09;绘制矩形 1.3 cv2.circle&#xff08;&#xff09; 绘制圆形 1.4 cv2.ellipse&#xff08;&#xff09;绘制椭圆 1.5 cv2.polylines&#xff08;&#xff09;绘制…

第十三届蓝桥杯b组做题笔记

&#xff08;7&#xff09;积木画 题目&#xff1a; 小明最近迷上了积木画, 有这么两种类型的积木, 分别为 &#xfffd;I 型&#xff08;大小为 2 个单位面积) 和 &#xfffd;L 型 (大小为 3 个单位面积): 同时, 小明有一块面积大小为 2&#xfffd;2N 的画布, 画布由 2&am…

【学习】软件测试中为什么要进行接口测试?

接口测试是软件开发过程中不可或缺的一环&#xff0c;它主要是对软件系统中各个模块之间的接口进行测试&#xff0c;以验证它们是否能够正确地交互和协作。接口测试的目的是确保软件系统的各个部分能够无缝地协同工作&#xff0c;从而提高整个系统的质量和稳定性。 一、什么是接…

JavaSE-10笔记【多线程1(+2024新)】

文章目录 1.进程与线程2.并发与并行3.线程的调度模型4.实现线程4.1 第一种方式&#xff1a;继承Thread4.2 第二种方式&#xff1a;实现Runnable接口4.3 t.start()和t.run()的本质区别&#xff1f;4.4 线程常用的三个方法 5.线程的生命周期&#xff08;把生命周期图背会&#xf…

蓝桥杯 历届真题 双向排序【第十二届】【省赛】【C组】

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 改了半天只有60分&#xff0c;还是超时&#xff0c;还不知道怎么写&#xff0c;后面再看吧┭┮﹏┭┮ #include<bits/stdc.h> …

在线聊天使用说明

功能 支持世界聊天没有人数限制支持个人聊天支持群聊(没开放)支持通讯录支持添加好友支持添加群(没开放)支持emoji表情后期会支持发送图片现在还不支持 现有问题可能样式兼容还有点问题, 以后有时间在处理, 目前能正常聊天 入口 聊天入口: https://huanmin.top/#/chat 功…

必知必会!使用NumPy对数组进行拆分

使用NumPy对数组进行拆分是一种高效且灵活的数据处理方式。NumPy提供了多种函数&#xff0c;如numpy.split(), numpy.hsplit(), 和 numpy.vsplit()&#xff0c;使得数组可以根据不同的需求进行拆分。这些函数能够精确控制拆分的数量和位置&#xff0c;满足不同的数据处理和分析…

2024/4/1—力扣—按摩师

代码实现&#xff1a; 思路&#xff1a;打家劫舍题 int massage(int *nums, int numsSize) {if (nums NULL || numsSize 0) {return 0;}if (numsSize 1) {return nums[0];}int dp[numsSize];memset(dp, 0, sizeof(dp));dp[0] nums[0];dp[1] (nums[0] < nums[1] ? nums…

【NLP】多标签分类【下】

文章目录 简介个人博客与相关链接1 实验数据与任务说明2 模型介绍2.1 TransformerTransformer能做什么&#xff1f; 2.2 Hugging FaceHugging Face的Transformers库社区支持和资源预训练模型的应用 2.3 T5模型&#xff08;Text-To-Text Transfer Transformer&#xff09;T5的核…

时间系列预测总结

转载自&#xff1a;https://mp.weixin.qq.com/s/B1eh4IcHTnEdv2y0l4MCog 拥有一种可靠的方法来预测和预测未来事件一直是人类的愿望。在数字时代&#xff0c;我们拥有丰富的信息&#xff0c;尤其是时间序列数据。 时间序列是指基于时间刻度维度&#xff08;天、月、年等&…

【THM】Protocols and Servers 2(协议和服务器 2

介绍 协议和服务器房间涵盖了许多协议: 远程登录HTTP协议文件传输协议邮件传输协议POP3IMAP实现这些协议的服务器会受到不同类型的攻击。仅举几例,请考虑: 嗅探攻击(网络数据包捕获)中间人 ( MITM ) 攻击密码攻击(身份验证攻击)漏洞从安全的角度来看,我们始终需要思考…

用API技术为数据安全“上保险”——双重保障

&#x1f50d;API在数据安全领域的核心地位 随着数字化进程的狂飙突进&#xff0c;应用程序接口&#xff08;API&#xff09;已化身为企业内部、不同平台间以及用户交互的关键纽带。它们不仅是数据流动与共享的驱动引擎&#xff0c;更是守护数据安全的重要防线。其中&#xf…

端口敲击守护程序之DC-9

总结 getwebshell : 发现SQL注入 → 登录系统 → 疑似文件包含 → FUZZ参数 → 文件包含读取守护程序 → 敲击打开SSH端口 → 利用泄露账号密码登录 提 权 思 路 : 发现3个用户 → 登录获取密码字典 → 再次爆破获取第4个用户 → sudo文件发现 → 存在root权限写入功能 → pa…

共生共舞的期货黄金和现货黄金

期货黄金&#xff0c;作为一种在金融市场上备受关注的投资工具&#xff0c;其价值与价格走势深受现货黄金市场的直接影响和联动。期货黄金交易&#xff0c;本质上是投资者对未来某一特定时间内黄金价格的预期进行押注&#xff0c;而这背后的逻辑支撑和价格基准正是现货黄金市场…

2024通信技术与航空航天工程国际会议(ICCTAE2024)

2024通信技术与航空航天工程国际会议(ICCTAE2024) 会议简介 通信技术和航空航天领域有着密切的关联和深远的意义。 随着通信技术和航空航天工程的快速发展&#xff0c;这两个领域的交叉融合为学术界和工业界提供了广阔的研究空间和实际应用前景。为了进一步推动相关领域的发…

Ubuntu 20.04.06 PCL C++学习记录(二十)

[TOC]PCL中点云分割模块的学习 学习背景 参考书籍&#xff1a;《点云库PCL从入门到精通》以及官方代码PCL官方代码链接,&#xff0c;PCL版本为1.10.0&#xff0c;CMake版本为3.16 学习内容 基于颜色的区域增长细分 源代码及所用函数 源代码 #include<iostream> #i…

HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService

HIS系统是什么&#xff1f;一套前后端分离云HIS系统源码 接口技术RESTful API WebSocket WebService 医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等&…

Grafana告警(邮件)自定义模板配置

一年前给客户部署配置过grafana&#xff0c;告警配置也是用的原始的&#xff0c;客户在使用过程中只需要一些核心点信息&#xff0c;想要实现这个就需要用Grafana的自定义告警模板以及编辑邮件模板。 通知模板 模板信息的配置中查阅了相关资料&#xff0c;自己组装了一套&…