将 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.mzph.cn/news/70963.shtml

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

相关文章

学习笔记|回顾(1-12节课)|应用模块化的编程|添加函数头|静态变量static|STC32G单片机视频开发教程(冲哥)|阶段小结:应用模块化的编程(上)

文章目录 1.回顾(1-12节课)2.应用模块化的编程(.c .h)Tips:添加函数头创建程序文件三步引脚定义都在.h文件函数定义三步bdata位寻址变量的使用 3.工程文件编写静态变量static的使用完整程序为&#xff1a;demo.c&#xff1a;seg_led.c:seg_led.h: 1.回顾(1-12节课) 一、认识单…

文件上传漏洞-upload靶场13-16关 (图片木马-文件包含与文件上次漏洞)

文件上传漏洞-upload靶场13-16关 &#xff08;图片木马-文件包含与文件上次漏洞&#xff09; 简介 upload靶场到了第十三关&#xff0c;难度就直线上升了&#xff0c;在最后这7关中&#xff0c;包含了图片木马、竞争条件等上传技巧&#xff0c;这些漏洞的本质&#xff0c;都是…

重复的DNA序列(力扣)JAVA

DNA序列 由一系列核苷酸组成&#xff0c;缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。 例如&#xff0c;“ACGAATTCCG” 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止…

Vite,Vue3项目引入dataV报错的解决方法

背景:开发一个大屏项目中,需要是要DataV的那边边框,装饰等,只是DataV是基于vue2的,vue3版的作者还在开发中,于是翻了DataV的源码,发现使用esm方式时是直接引入源码而不经过打包,其源码中使用的vue语法vue3也支持,所以可以直接在vue3中引入使用. vite,vue3项目直接引入DataV 安…

Upload-labs 1~15 通关详细教程

文章目录 Upload-labs 1~15 通关详细教程Pass-01-前端js验证Pass-02-后端MIME验证Pass-03-黑名单验证Pass-04-黑名单验证.htaccessPass-05-文件后缀名大小写绕过Pass-06-文件后缀名空格绕过Pass-07-文件后缀名点绕过Pass-08-文件后缀名::$DATA绕过Pass-09-点空格点空格绕过Pass…

《Market Insight:中国低代码/零代码市场发展洞察 ( 2023 )》报告正式发布 | LowCode低码时代

数字化浪潮下&#xff0c;低代码/零代码通过提升“开发生产力”将极大促进技术应用效率和产业数字化进程。目前中国的低代码/零代码在制造业、政务与公共事业、金融、电商等领域取得了一定的应用成效。而伴随着生成式AI技术的应用突破&#xff0c;低代码/零代码市场又将迎来新的…

【前端】React项目初体验

React介绍 React 是一个非常流行的 JavaScript 前端框架&#xff0c;它为开发人员提供了一种快速构建高质量用户界面的方式。以下是使用 React 构建项目的初体验&#xff1a; 安装 React 和相关依赖项 使用 React 开发项目需要先安装一些必需的依赖项&#xff0c;包括 Node.…

快速掌握STM32工程创建

STM32 工程创建-- 使用Keil uVision5 软件 晓理紫 1 准备库函数库 STM32F10x_StdPeriph_Lib_V3.5.0 VX 搜索“晓丽紫”关注回复STM32F10x即可下载 2、创建一个目录用来存放工程 STM32Study STM32Study/study1 存放本次工程目录 3、打开Keil uVision5 创建工程 4、选择型号(根据…

【用unity实现100个游戏之9】使用Unity制作类八方旅人、饥荒风格的俯视角2.5D游戏

前言 2.5D游戏 是一种介于二维和三维之间的游戏形式。它通常在二维平面上展示游戏内容&#xff0c;但利用三维技术来实现更加逼真的图像效果。 在2.5D游戏中&#xff0c;角色和环境通常是以平面的形式呈现&#xff0c;但可以在垂直方向上移动。这意味着玩家可以在一个相对较薄…

对话永洪科技CEO何春涛:专注BI,决胜AI时代丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 大数据、云计算、人工智能为代表的新一代信息技术走向普及&#xff0c;数据驱动业务&#xff0c;逐渐成为现代化企业管理、运作的日常。对于年均复合增长率超过20%的国内商业智能&#xff08;BI&#xff09;市场而言&#xff0c…

编译KArchive在windows10下

使用QT6和VS2019编译KArchive的简要步骤&#xff1a; 安装 Qt &#xff0c;我是用源码自己编译的 "F:\qtbuild"安装CMakefile并配置环境变量安装Git下载ECM源码 https://github.com/KDE/extra-cmake-modules.git-------------------------------------------------…

运筹系列85:求解大规模tsp问题的julia代码

1. 大规模tsp问题的挑战 数学模型和精确解法见《运筹系列65&#xff1a;TSP问题的精确求解法概述》和《运筹系列80:使用Julia精确求解tsp问题》&#xff1a; variable(m, x[1:n,1:n], Bin,Symmetric) # 0-1约束 objective(model, Min, sum(x.*distmat)/2) constraint(model, …

计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下计算机视觉的应用13-基于SSD模型的城市道路积水识别的应用项目。今年第11号台风“海葵”后部云团的影响&#xff0c;福州地区的降雨量突破了历史极值&#xff0c;多出地方存在严重的积水。城市道路积水是造成交通拥…

javaee之黑马乐优商城2

简单分析一下商品分类表的结构 先来说一下分类表与品牌表之间的关系 再来说一下分类表和品牌表与商品表之间的关系 面我们要开始就要创建sql语句了嘛&#xff0c;这里我们分析一下字段 用到的数据库是heima->tb_category这个表 现在去数据库里面创建好这张表 下面我们再去编…

Unexpected mutation of “xxxx“ prop

原因 是因为子级修改了父级的数据&#xff0c;所以eslint执行的时候报了这个错 修复方式 1 如果是弹窗等组件&#xff0c;可以根据功能进行修改&#xff0c;比如我这块用的 element ui 的 dialog&#xff0c;便可以改成这样 使用 model-value 代替 修复方式 2 新建子组件…

3种等待方式,让你学会Selenium设置自动化等待测试脚本!

一、Selenium脚本为什么要设置等待方式&#xff1f;——即他的应用背景到底是什么 应用Selenium时&#xff0c;浏览器加载过程中无法立即显示对应的页面元素从而无法进行元素操作&#xff0c;需设置一定的等待时间去等待元素的出现。&#xff08;简单来说&#xff0c;就是设置…

CTFSHOW 年CTF

1.除夕 php的弱类型&#xff0c;用小数点绕过 这里后面直接加字母不行 2.初三 error_reporting(0); extract($_GET); include "flag.php"; highlight_file(__FILE__); 这里通过extract将get的参数导入为了变量 $_function($__,$___){return $__$___?$___:$__; }; …

恒运资本:银行股适合定投吗?为什么银行股适合定投?

在股票市场上&#xff0c;出资者能够通过手动不断的买入到达基金定投的效果&#xff0c;那么&#xff0c;银行股适合定投吗&#xff1f;为什么银行股适合定投&#xff1f;下面恒运资本为我们准备了相关内容&#xff0c;以供参考。 银行股适合定投&#xff0c;即通过定投不断的买…

索尼 toio™ 应用创意开发征文|小巧机器,大无限,探索奇妙世界

文章目录 前言微型机器人的未来&#xff1a;toio™小机器人简介toio™小机器人&#xff1a;创新功能一览toio™小机器人&#xff1a;多领域的变革者toio™小机器人贪吃蛇游戏代码实现写在最后 前言 当我们谈到现代科技的创新时&#xff0c;往往会联想到复杂的机器和高级的编程…

Linux CentOS7命令及命令行

Linux CentOS7中命令及命令行是非常重要的概念。对大多数初学者来说是既熟悉又了解甚少。本文初步讨论这方面的内容&#xff0c;与同行者交流。 一、命令 命令又称为指令&#xff0c;&#xff08;英语命令 command&#xff0c;可用简写cmd表示&#xff09;&#xff0c;在终端…