将 Spring Boot 应用程序与 Amazon DocumentDB 集成

a17affd60c5adb454a6f0720ef70d86c.gif

Amazon DocumentDB(与 MongoDB 兼容)是一种可扩展、高度持久和完全托管的数据库服务,用于操作任务关键型 MongoDB 工作负载。在 Amazon DocumentDB 上,您可以使用相同的 MongoDB 应用程序代码、驱动程序和工具来运行、管理和扩展工作负载,无需关心管理底层基础设施。 

Spring Boot 提供了简单快速的方法,可基于 Spring 框架来构建生产级的应用程序。为了做到这一点,Spring Boot 预先打包自动配置模块,用于通常与 Spring Framework 一起使用的大多数库。简而言之,开源 Spring Boot 遵循有关配置的惯例,在 Spring 框架之上添加了自动配置功能。

在这篇文章中,您将探索使用 Spring Data MongoDB API,将 Spring Boot 应用程序集成到 Amazon DocumentDB 的基础知识。您还可以创建示例数据模型和存储库类用于执行数据库操作。

解决方案概览

Spring Boot 和 Amazon DocumentDB 的配置相对简单,只涉及几个配置步骤。

Spring Boot 允许应用程序使用 MongoTemplate 类和 MongoRepository 接口,与 Amazon DocumentDB 交互。 MongoTemplate 遵循 Spring 中的标准模板模式,为底层持久性引擎提供了现成的基本 API。MongoTemplate 为聚合、流式处理、更新和自定义查询等操作提供了直接可用的 API。MongoRepository 遵循以 Spring Data 为中心的方法,基于所有 Spring Data 项目中广为人知的创建、读取、更新和删除(CRUD,Create, Read, Update, and Delete)访问模式,提供了更灵活、更简单的 API 操作。

对于这两个选项,您首先要在 pom.xml 中为 Maven 项目定义依赖项。

这篇文章重点介绍如何使用 MongoRepository 与 Amazon DocumentDB 交互。

先决条件

您需要满足以下先决条件:

  • Amazon DocumentDB 集群 – 这篇文章首先介绍现有的 Amazon DocumentDB 集群,您要将其与 Spring Boot 应用程序集成。如果您还没有 Amazon DocumentDB 集群,请参阅 Get Started with Amazon DocumentDB(Amazon DocumentDB 入门)以创建新集群(https://docs.aws.amazon.com/documentdb/latest/developerguide/get-started-guide.html)。

  • 集成式开发环境(IDE) – 例如,Eclipse 或 Amazon Cloud9。本文在演示中使用了 Amazon Cloud9,这是一款基于云的 IDE,让您只需使用浏览器即可编写、运行和调试代码。其包括代码编辑器、调试程序和终端。启用增强了对 Java 开发的支持(https://docs.aws.amazon.com/cloud9/latest/user-guide/enhanced-java.html),改善您在使用 Java 时的开发体验。

  • Java 17 – 有关在 Amazon Cloud9 中安装或升级 Java 的信息,请参阅 Amazon Corretto 17 Installation Instructions(Amazon Corretto 17 安装说明)(https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/amazon-linux-install.html)

  • Maven – 请参阅设置 Maven 以在 Amazon Cloud9 中安装 Maven(https://docs.aws.amazon.com/cloud9/latest/user-guide/sample-java.html#sample-java-sdk-maven)

  • Spring Initializr

您的账户中可能会产生与 Amazon DocumentDB 和 Amazon Cloud9 资源相关的费用。您可以使用亚马逊云科技定价计算器来估计此费用(https://calculator.aws/)。

使用 Spring Initializr 

创建 Spring Boot 应用程序

使用以下步骤,创建一个支持 Spring Data MongoDB 的新 Spring Boot 应用程序项目。作为替代方法,您可以使用 GitHub 存储库中的 spring-boot-docdb-sample 应用程序。(https://github.com/aws-samples/amazon-documentdb-samples/tree/master/blogs/docdb-springboot)

1. 浏览到 https://start.spring.io/。

2. 指定以下选项:

  1. 选择 Maven project(Maven 项目),且 Language(语言)为 Java

  2. 选择 Spring Boot 的版本 3.0.0。

  3. 为应用程序指定组和构件名称。

  4. 指定 Java 版本 17。

  5. 选择 ADD DEPENDENCIES(添加依赖项),然后搜索并选择 Spring Data MongoDB。您可以使用 Spring Data MongoDB 依赖项,从此应用程序与 Amazon DocumentDB 集群进行交互。

3. 选择 GENERATE(生成)以生成一个 Spring Boot 项目,其中包含引导所需的全部文件。

4. 将 ZIP 文件下载到本地计算机上的路径并解压缩文件。

4a156081eecfd1641e40b31af9a4e673.png

如果您使用的是 Amazon Cloud9 IDE,请将 ZIP 文件上传到 Amazon Cloud9 环境并解压缩文件。

验证 Maven 依赖项

在应用程序的目录中找到 pom.xml 文件,然后验证是否已按如下方式添加 Spring Data MongoDB 依赖项:

 XML 

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

左滑查看更多

定义数据模型

要在 Amazon DocumentDB 数据库中存储和检索数据,我们先创建一个 POJO 模型或实体类。该实体代表 Amazon DocumentDB 中的集合,并使用注释来定义集合名称、属性、键和其他方面。

在此示例中,您创建一个产品集合和对应的模型对象,该对象将产品的详细信息存储在目录数据库中。您创建具有六个属性的产品模型: id 、 name 、 sku 、 description 、 inventory 和 category 。

Amazon DocumentDB 在集合中存储数据。默认情况下,Spring Data 将产品的类或模型映射到名为 product 的集合。如果要更改集合的名称,您可以在类上使用 Spring Data MongoDB 的 @Document 注释。在以下示例中,我们使用 @Document(collection = "products") 来将集合名称指定为 products 。

您可以使用 @Id 注释指定文档的主键 _id 。如果您未指定任何内容,Amazon DocumentDB 将在创建文档时生成 _id 字段。其他属性不添加注释。这会假设它们映射到与属性本身具有相同名称的字段。在项目的目录中,创建一个 Product.java 文件,其中具有以下内容:

 Java 

@Idprivate String id;    /** * 设置对应于 products 集合中字段的数据成员*/private String name;private String sku;private String description;private int inventory;private String category;/*** @param id* @param name* @param sku* @param description* @param inventory* @param category*/public Product(String name, String sku, String description, int inventory, String category) {this.name = name;this.sku = sku;this.description = description;this.inventory = inventory;this.category = category;}
}

左滑查看更多

为每个属性添加 getter 和 setter 方法。您可以使用特定于 IDE 的快捷方式生成 getter 和 setter 方法。例如,右键单击代码编辑器窗格,选择 Refactoring(重构),然后选择 Generate Getter and Setter in Cloud9(在 Cloud9 中生成 Getter 和 Setter)。

此外,建议覆盖 toString 方法来输出对象,例如,右键单击代码编辑器窗格,选择 Refactoring(重构),然后选择 Generate toString() in Cloud9(在 Cloud9 中生成 toString())

8e1688f7075559ce624a803662123243.png

在启用 TLS 的情况下进行连接

要从基于 Java 的 Spring Boot 应用程序连接到启用了 TLS 的 Amazon DocumentDB 集群,您的程序必须使用亚马逊云科技提供的证书颁发机构(CA,Certificate Authority)文件来验证连接。要使用 Amazon RDS CA 证书,请执行以下操作:

1. 在 tmp 文件夹下创建一个临时 certs 文件夹。您可以根据组织的安全策略来创建用于存储证书的文件夹。本文中,在 tmp 下创建 certs 文件夹:

 Bash 

mkdir /tmp/certs/

2. 运行以下命令,使用包含在文件中的 CA 证书创建信任存储。请确保更新<truststorePassword>。以下 shell 脚本示例将证书捆绑包导入 Linux 操作系统上的信任存储。有关其他选项,请参阅启用了 TLS 的情况下的连接(https://docs.aws.amazon.com/documentdb/latest/developerguide/connect_programmatically.html#connect_programmatically-tls_enabled)。

 Bash 

mydir=/tmp/certs
truststore=${mydir}/rds-truststore.jks
storepassword=<truststorePassword>curl -sS "https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem" > ${mydir}/rds-combined-ca-bundle.pem
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n ".pem"}' < ${mydir}/rds-combined-ca-bundle.pemfor CERT in rds-ca-*; doalias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')echo "Importing $alias"keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -nopromptrm $CERT
donerm ${mydir}/rds-combined-ca-bundle.pemecho "Trust store content is: "keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias 
doexpiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`echo " Certificate ${alias} expires in '$expiry'" 
done

左滑查看更多

数据库和连接配置

设置连接详细信息和 SSL 信任存储需要两个配置文件。首先,在 application.properties 中定义您的 Amazon DocumentDB 连接参数,例如数据库、URI 或主机、端口、用户名和密码。然后在配置类中设置密钥库。

配置 Spring Boot 应用程序属性文件

要将 Spring Boot 应用程序连接到 Amazon DocumentDB,我们需要在 application.properties 文件中定义数据库配置。您需要配置数据库 URI、数据库名称或主机名、用户名、密码等属性,以及其他与连接相关的属性。要连接到 Amazon DocumentDB 集群,您需要在位于 src/main/resources 文件夹的 application.properties 文件中指定连接 URI 字符串。

要检索您的 Amazon DocumentDB 集群端点并配置 application.properties ,请完成以下步骤:

1. 在 Amazon DocumentDB 控制台的导航窗格中,选择 Clusters(集群)。

2. 找到您的集群并选择区域集群标识符。

3. 在 Connectivity & security(连接和安全性)选项卡上,复制用于通过 application.

1515929d1cc694e51e90c631765ccf3a.png

连接到集群的命令。

4. 从复制的连接字符串中删除 &ssl_ca_certs=rds-combined-ca-bundle.pem ,因为您已经将亚马逊云科技提供的 CA 文件导入了信任存储。

5. 将连接 URI 添加到位于您的项目 src/main/resources 文件夹的 application.properties 文件中。连接 URI 的键为 spring.data.mongodb.uri 。确保复制的连接字符串格式如下:

spring.data.mongodb.uri=mongodb://<用户名>:<密码>@<集群端点>: 27017/?ssl=true&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false

左滑查看更多

或者,您可以单独提供连接详细信息,包括主机名、端口、用户名和密码以及对应的属性键,例如 spring.data.mongodb.host 或 spring.data.mongodb.port 。有关可用的 Spring Boot 参数配置选项的完整列表,请参阅 Common Application Properties(常用应用程序属性)下的 Data Properties(数据属性)(https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties.data)。

6. 您也可以选择在 application.properties 文件中指定数据库名称:

spring.data.mongodb.database=catalog

创建配置类并设置密钥库

现在属性配置已经完成,您需要定义配置类来设置密钥库属性,以便建立安全连接。

要在应用程序中使用密钥库,请在配置类中设置以下系统属性:

javax.net.ssl.trustStore: <truststore>
javax.net.ssl.trustStorePassword: <truststorePassword>

左滑查看更多

请参阅以下示例配置类。使用 @Configuration 注释将该类标记为配置类。具有 @Configuration 注释的类由 Spring 容器用作 bean 定义的来源。

 Java 

@Beanpublic MongoClientSettings mongoClientSettings() { setSslProperties();return MongoClientSettings.builder().applyToSslSettings(builder -> builder.enabled(true)).build();}private static void setSslProperties() { System.setProperty("javax.net.ssl.trustStore", KEY_STORE_TYPE);System.setProperty("javax.net.ssl.trustStorePassword",          DEFAULT_KEY_STORE_PASSWORD);}@Beanpublic MongoPropertiesClientSettingsBuilderCustomizer mongoPropertiesCustomizer(final MongoProperties properties) {return new MongoPropertiesClientSettingsBuilderCustomizer(properties);}
}

左滑查看更多

以上是 Spring Boot 中 Amazon DocumentDB 配置的全部内容现在,您可以通过扩展 MongoRepository 开始定义基于接口的存储库类。

配置存储库接口

现在,您可以使用 MongoRepository 访问数据库中的数据。 MongoRepository 提供常用功能,例如创建、读取、更新和删除(CRUD,Create, Read, Update, and Delete)操作。它充当模型与数据库之间的链接。它获取域类(Product)进行管理,并获取域类的 ID 类型作为类型参数。您可以编写几种方法,由存储库为您生成查询。

创建查询 Product 文档的存储库接口,如下所示:

 Java 

public interface ProductRepository extends MongoRepository<Product, String> {}

左滑查看更多

 ProductRepository 扩展 MongoRepository 接口。此接口包含许多操作,包括标准的 CRUD 操作。您将在下一节中定义其他自定义操作。

定义服务类

服务类利用了 Spring Data 存储库接口。我们通过引用您在上一步中创建的存储库来定义它:

 Java 

@Service
public class ProductService {@Autowiredprivate ProductRepository productRepo;
}

左滑查看更多

在下一节中,您将在此类上通过添加其他方法进行构建,该节还介绍了 CRUD 示例。

使用 CrudRepository

使用扩展了 CrudRepository 的 MongoRepository 时,您的存储库可以从 CrudRepository 接口的实施类访问基本功能,包括 save 、 count 、 findAll 和 delete 方法。您的 ProductRepository 接口扩展了 MongoRepository ,并可以访问所有基本 CRUD 操作。

我们来逐个探索和测试这些操作。

保存或创建

首先,您使用 save 方法向集合中添加一些文档。 save 方法获取 Product 对象作为输入,并将产品文档保存到 Amazon DocumentDB 集合中。将以下代码片段添加到您的服务类中:

 Java 

public void saveProducts() {productRepo.save(new Product("RayBan Sunglass Pro", "1590234","RayBan Sunglasses for professional sports people", 100, "fashion"));productRepo.save(new Product("GUCCI Handbag", "3451290", "Fashion Hand bags for all ages", 75, "fashion"));productRepo.save(new Product("Round hat", "8976045", "", 200, "fashion"));productRepo.save(new Product("Polo shirt", "6497023", "Cool shirts for hot summer", 25, "cloth"));productRepo.save(new Product("Swim shorts", "8245352", "Designer swim shorts for athletes", 200, "cloth"));productRepo.save(new Product("Running shoes", "3243662", "Shoes for work out and trekking", 20, "footware"));System.out.println(" Save complete ");}

左滑查看更多

计数

在下一个示例中,如果存储库中没有任何方法,则调用服务类中的 count() 方法,对集合中的文档进行计数。

 Java 

public long getCount() {long count = productRepo.count();System.out.println(" Total number of products : "+count);return count;
}

左滑查看更多

读取

在此示例中,您执行三种不同的读取操作。您可以按名称或 SKU 提取产品,然后根据类别查找产品列表。

您在存储库( ProductRepository )中添加了三种简单方法。第一种方法 findProductByName 根据 name 属性查询集合。查询筛选条件使用注释 @Query 定义,在本例中,注释为 @Query("{name:'?0'}") 。第二种方法 findProductBySKU 根据 sku 属性查询集合,并在查询响应中仅输出 name 和 inventory 属性。第三种方法 findAll 检索特定类别的所有文档。请参阅以下代码:

 Java 

public interface ProductRepository extends MongoRepository<Product, String> {@Query("{name:'?0'}")Product findProductByName(String name);@Query(value="{sku:'?0'}", fields="{'name' : 1, 'inventory' : 1}")Product findProductBySKU (String sku);   @Query("{category:'?0'}")List<Product> findAllByCategory(String category);}

左滑查看更多

您可以从存储库在服务类中调用这三种方法,按名称、SKU 和类别查找文档。

 Java 

public Product getProductByName(String name) {System.out.println(" Getting product by name : " + name);Product product = productRepo.findProductByName(name);System.out.println(product);return product; 
}public Product getProductBySKU(String sku) {System.out.println(" Getting product by SKU : " + sku);Product product = productRepo.findProductBySKU(sku);System.out.println(product);return product; 
}public List<Product> findAllProductsByCategory(String category) {List<Product> productList = productRepo.findAllByCategory(category);productList.forEach(product -> System.out.println(product));return productList;
}

左滑查看更多

更新

您可以通过传递更新后的实体对象,使用 save 方法来更新现有文档。在此示例中,您按 SKU 查询现有产品并将库存增加 10。将以下方法添加到您的服务中:

 Java 

public void updateInventory(String sku) {Product product =  getProductBySKU(sku);System.out.println(" Updating Inventory for product by sku: " + sku);  product.setInventory(product.getInventory()+10);Product updatedProd = productRepo.save(product);
}

左滑查看更多

删除

在本示例中,您将创建两个删除操作。首先,您按照 ID 删除一个产品;在第二种方法中,您将删除集合中的所有文档(products)。将以下方法添加到您的服务类中:

 Java 

public void deleteProduct(String id) {productRepo.deleteById(id);System.out.println("Product with id " + id + " deleted");
}public void deleteAll() {productRepo.deleteAll();System.out.println("All Products deleted.");
}

左滑查看更多

构建 Spring Boot 应用程序

默认的 Spring Boot 应用程序已经由 Spring Initializr 在根程序包(例如 com.example.documentdb )中创建。在 IDE 中打开默认应用程序:

 Java 

@SpringBootApplication
public class DocumentdbApplication {public static void main(String[] args) {SpringApplication.run(DocumentdbApplication.class, args);}
}

左滑查看更多

 CommandLineRunner 接口表明,当 bean 包含在 SpringApplication 中时应该运行,以便在控制台上查看输出。实施 CommandLineRunner 接口并为 run 方法提供植入方法。我们使用 @Autowired 注释定义对您服务的引用。Spring 使用 @SpringBootApplication 注释来初始化应用程序上下文:

 Java 

@Overridepublic void run(String... args) throws Exception {System.out.printf("%n Insert few products : %n");prodService.saveProducts();System.out.printf("%n Count all products : %n");prodService.getCount();System.out.printf("%n Get product by name : %n");prodService.getProductByName("GUCCI Handbag");System.out.printf("%n Get product by sku : %n");prodService.getProductBySKU("8976045");System.out.printf("%n Get all products by category : %n");prodService.findAllProductsByCategory("fashion");System.out.printf("%n Update Inventory for Product by sku :  %n");prodService.updateInventory("3451290");System.out.printf("%n Delete product id  %n");prodService.deleteProduct("639a0046efe46b7343dd5004"); System.out.printf("%n Deleting all products/documents  %n");prodService.deleteAll(); }
}

左滑查看更多

运行并测试您的应用程序

使用以下 Maven 命令运行 Spring Boot 应用程序:

 Bash 

mvn spring-boot:run

以下屏幕截图是 Spring Boot 应用程序的示例输出。

f806137d9235fd82d57a41276a934c5c.png

您做到了! 您已成功从 Spring Boot 应用程序连接到 Amazon DocumentDB。

总结

在这篇文章中,您了解了如何通过简单的应用程序将 Amazon DocumentDB 与 Spring Boot 应用程序集成,该应用程序使用 Spring Data MongoDB 将对象保存到数据库以及从数据库中提取对象,所有这些过程都无需编写具体的存储库实施,而且配置简单。

这篇文章中使用的示例在 GitHub 上作为示例项目提供(https://github.com/aws-samples/amazon-documentdb-samples/tree/master/blogs/docdb-springboot)。

Original URL: 

https://aws.amazon.com/cn/blogs/database/integrate-your-spring-boot-application-with-amazon-documentdb/

本篇作者

807e227787a43bf8345bee117cb61e84.jpeg

Gururaj S Bayari 

亚马逊云科技的资深 DocumentDB 专家解决方案架构师。他非常乐于帮助客户采用 Amazon 的专用数据库。他针对采用 NoSQL 和/或关系数据库的互联网规模的高性能工作负载,帮助客户进行设计、评估和优化。

91b1dc1d71fa1242408a345a4ba55046.gif

3cd3e8cdf4007ccef52841ec81df8f48.gif

听说,点完下面4个按钮

就不会碰到bug了!

7ba2b75f617d9d90efd4f2679b47348d.gif

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

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

相关文章

监控 -- linux中的一些系统性能状态指令、Prometheus

目录 监控查看性能相关命令Prometheus1、安装和配置2、将 NFS服务器和LB服务器作为exporter采集数据3、在prometheus server里添加安装exporter程序的服务器 grafana出图工具 监控 监控的目的是获取数据&#xff0c;通过数据分析了解机器是否正常运行 查看性能相关命令 查看c…

学习pytorch8 土堆说卷积操作

土堆说卷积操作 官网debug torch版本只有nn 没有nn.functional代码执行结果 B站小土堆视频学习笔记 官网 https://pytorch.org/docs/stable/nn.html#convolution-layers 常用torch.nn, nn是对nn.functional的封装&#xff0c;使函数更易用。 卷积核从输入图像左上角&#xf…

Python数据分析实战-将dataframe某列的值分成不同区间并计算每个区间的频数(附源码和实现效果)

实现功能 将dataframe某列的值分成不同区间并计算每个区间的频数 实现代码 import pandas as pd# 创建dataframe data {Name:[Tom1, Jack1, Steve1, Ricky1, Tom2, Jack2, Steve2, Ricky2],Score:[78,60,59,42,88,34,69,142]} df pd.DataFrame(data) print(df)# 定义区间和…

【VL tracking】Towards Unified Token Learning for Vision-Language Tracking

不知道什么原因学校认证账号进不去&#xff0c;下载不了最新的PDF 广西师范大学 | 国科大 | 厦大 代码开源 zhihu指路&#x1f449;【VL tracking】MMTrack阅读 问题 一方面&#xff0c;传统的VL tracking方法需要昂贵的先验知识。例如&#xff0c;一些tracker是专门用于bou…

【产线故障】线上接口请求过慢如何排查?

文章目录 前言一、内存使用过高导致CPU满载案例代码分析思路 二、出现了类似死循环导致cpu负载案例代码分析思路 三、死锁案例代码分析思路 前言 首先线上接口变慢&#xff0c;原因可能有很多&#xff0c;有可能是网络&#xff0c;有可能是慢 SQL&#xff0c;有可能是服务本身…

【Linux】- 一文秒懂shell编程

shell编程 1.1 Shell 是什么1.2 Shell 脚本的执行方式1.3 编写第一个 Shell 脚本2.1 Shell 的变量2.2 shell 变量的定义2.3 设置环境变量3.1 位置参数变量3.2 预定义变量4.1 运算符4.2 条件判断5.1 流程控制5.2 case 语句5.3 for 循环5.4 while 循环5.5 read基本语法6.1函数6.2…

Mysql性能调优——1.深入理解Mysql索引数据结构和算法

本系列所说的Mysql性能调优&#xff0c;主要是针对开发者在实际环境中的sql调优&#xff0c;代码层面上的优化。不涉及到mysql底层代码的调优。 我们知道&#xff0c;一个mysql数据表&#xff0c;数据量小的时候&#xff0c;可能简单的查询耗时不会太久&#xff0c;性能也可以…

供配电技术

最近&#xff0c;在上一门关于供配电技术的课程&#xff0c;虽说与自动化的关系并不是十分大&#xff0c;但对于扩展知识面还是有很大用处的&#xff0c;不至于与其他人交谈此方面的相关知识的时候&#xff0c;一头雾水。

百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!

目录 前言 最佳算力效能为企业降低门槛 最多大模型&#xff0c;最多数据集为企业保驾护航 企业级安全对于企业来说是硬性要求 前言 普通人或许感知不明显&#xff0c;但是对于企业而言&#xff0c;身处AI时代&#xff0c;是否选择投资大模型&#xff0c;是否拥抱人工智能…

AlmaLinux 经济收益增加,红帽 RHEL 源码限制不成威胁

导读红帽在两个月前发布公告表示&#xff0c;将限制对 Red Hat Enterprise Linux (RHEL) 源代码的访问&#xff0c;未来 CentOS Stream 将成为公共 RHEL 相关源代码发布的唯一仓库。对于这一决策&#xff0c;AlmaLinux OS Foundation 主席 Benny Vasquez 则向 SiliconANGLE 表示…

【MyBatis篇】MyBatis框架基础知识笔记

目录 ORM思想&#xff08;对象关系映射思想&#xff09; 初识MyBatis 什么是MyBatis呢&#xff1f; JDBC VS MyBatis代码 获取数据库连接对比 对表格查询操作&#xff1a; JDBC弊端 MyBatis&#xff0c;JDBC对比 MyBatis进一步介绍以及本质分析 JDBC编程的劣势&…

五大类注解和方法注解详解

五大类注解为Controller&#xff0c;Service&#xff0c;Repository&#xff0c;Configuration&#xff0c;Component,方法注解为Bean。 需要注意的是&#xff1a;Bean注解必须要在类注解修饰的类内才能正常使用。 一、与配置文件的关系 在spring原生项目中 如果你使用的spri…

基于Hata模型的BPSK调制信号小区覆盖模拟matlab完整程序分享

基于Hata信道模型的BPSK调制信号小区覆盖模拟matlab仿真&#xff0c;对比VoIP, Live Video,FTP/Email 完整程序&#xff1a; clc; clear; close all; warning off; addpath(genpath(pwd)); % Random bits are generated here. bits randi([0, 1], [50,1]); M 2; t 1:1:50; …

Json“牵手”唯品会商品详情数据方法,唯品会商品详情API接口,唯品会API申请指南

唯品会是中国最大的会员制特卖电商平台之一&#xff0c;于2008年创立&#xff0c;唯品会主营业务为互联网在线销售品牌折扣商品&#xff0c;涵盖名品服饰鞋包、美妆、母婴、居家等各大品类2。唯品会采取供应链直采模式&#xff0c;与全球3000多家品牌及供应商合作&#xff0c;直…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·安全帽检测功能——多场景高效运用

安全帽检测算法主要是对人员安全和事故预防的需要。在许多工业领域和施工现场&#xff0c;佩戴安全帽是一种重要的安全措施&#xff0c;可以减少头部受伤的风险。然而&#xff0c;由于工地人员数量众多且繁忙&#xff0c;人工监控难以有效覆盖所有区域&#xff0c;因此旭帆科技…

Ubuntu 升级cuda版本与切换

下载cuda版本 进&#xff1a;CUDA Toolkit 12.2 Downloads | NVIDIA Developer wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.runsudo sh ./cuda_12.2.0_535.54.03_linux.run --toolkit --silent --overrid…

Shell命令操作Linux文件系统

Shell命令操作Linux文件系统 文件夹介绍 文件夹常规命令 文件夹权限控制⭐ 文件类型和权限 修改文件权限 移动、复制、删除文件夹 文件夹介绍 Linux文件系统是计算机操作系统中的一个关键组成部分&#xff0c;它用于管理和组织计算机上的数据和信息。先到根目录&#xf…

并发容器11

一 JDK 提供的并发容器总结 JDK 提供的这些容器大部分在 java.util.concurrent 包中。 ConcurrentHashMap: 线程安全的 HashMap CopyOnWriteArrayList: 线程安全的 List&#xff0c;在读多写少的场合性能非常好&#xff0c;远远好于 Vector. ConcurrentLinkedQueue: 高效的并…

音频应用编程

目录 ALSA 概述alsa-lib 简介sound 设备节点alsa-lib 移植编写一个简单地alsa-lib 应用程序一些基本概念打开PCM 设备设置硬件参数读/写数据示例代码之PCM 播放示例代码值PCM 录音 使用异步方式PCM 播放示例-异步方式PCM 录音示例-异步方式 使用poll()函数使用poll I/O 多路复用…

W5500-EVB-PICO主动PING主机IP检测连通性(十)

前言 上一章我们用W5500_EVB_PICO 开发板做UDP组播数据回环测试&#xff0c;那么本章我们进行W5500_EVB_PICO Ping的测试。 什么是PING&#xff1f; Ping &#xff08;Packet Internet Groper&#xff09;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序 。Ping是…