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

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源,点击获取 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据源进行操作。内容涵盖了为不同的数据库配置独立数据源、实体类和对应的Repository接口,以及通过注解注入服务层并使用特定的事务管理器执行操作。本文旨在为开发者提供一个清晰的多数据源配置流程,提高开发效率并确保数据一致性与完整性。 springboot 配置多数据源

1. Spring Boot多数据源配置简介

在分布式系统和复杂应用日益增多的今天,单一数据源往往无法满足业务需求。多数据源配置应运而生,它允许应用连接和管理多个数据库,以实现数据的整合、优化和隔离。

什么是多数据源配置?

多数据源配置指的是在同一个应用或服务中配置并使用多个数据库连接。每个数据库连接对应一个数据源,它们可以是不同类型的数据库,如MySQL、PostgreSQL或MongoDB等。

为何需要使用多数据源?

在实际项目中,多数据源配置是因应多种业务场景的需要。例如,为了数据隔离,主从分离,或者整合遗留系统。它带来以下好处:

  • 灵活性 :能够根据不同数据源的特性优化数据库操作。
  • 扩展性 :支持水平扩展,对不同模块使用专用数据源。
  • 维护性 :可以单独管理和维护不同数据源,减少系统间干扰。

当然,使用多数据源也会面临挑战,比如复杂的配置管理,以及事务处理和数据一致性的问题。随着本系列文章的深入,我们将探讨这些挑战和相应的解决方案。

2. 依赖引入方法

2.1 Spring Boot项目中多数据源的支持

2.1.1 核心依赖介绍

在Spring Boot项目中实现多数据源配置,首先需要在项目中引入必要的核心依赖。核心依赖包括Spring Boot自身提供的starter以及与数据库连接相关的依赖。例如,如果我们需要连接MySQL数据库,则需要引入 spring-boot-starter-jdbcmysql-connector-java 。对于其他类型的数据库,比如PostgreSQL或Oracle,你将需要添加对应的数据库驱动依赖。

<!-- 引入Spring Boot Starter JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency><!-- 引入MySQL数据库驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version>
</dependency>

在上述Maven依赖中, spring-boot-starter-jdbc 是连接关系型数据库的核心starter,它负责自动配置JDBC和连接池。 mysql-connector-java 是MySQL的JDBC驱动,用于与数据库进行通信。

2.1.2 版本选择与兼容性问题

在选择依赖版本时,需要考虑项目中使用的Spring Boot版本,以确保所有组件的兼容性。可以通过Spring Initializr(***)生成一个基础项目,以获取推荐的依赖版本组合。

flowchart LRA[Spring Boot版本] -->|影响| B[依赖版本选择]B -->|确保| C[组件兼容性]

如果在实际开发中遇到版本冲突,可以使用Maven的 dependencyManagement 进行管理,明确指定需要的版本号。

2.2 多数据源相关的依赖库

2.2.1 数据访问技术栈选择

在多数据源的配置中,选择合适的数据访问技术栈至关重要。技术栈的选择取决于你的项目需求和开发者的熟悉度。Spring Data JPA是目前比较流行的选择,它提供了基于JPA的数据访问层,并且支持通过Repository接口简化数据操作。

<!-- 引入Spring Data JPA Starter -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

对于复杂的查询或者需要更灵活的数据访问方式,可以选择MyBatis。MyBatis提供了更细粒度的控制,使得SQL映射更加直观。

2.2.2 版本管理与冲突解决

在多数据源环境中,各个依赖库之间的版本兼容性问题可能会导致冲突。例如,HikariCP是Spring Boot 2.x推荐的连接池实现,如果引入了其他非兼容版本的连接池库,可能会导致冲突。

<!-- 引入HikariCP连接池 -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId>
</dependency>

在Maven项目中,可以通过 <dependencyManagement> 标签在 pom.xml 中锁定依赖的版本,确保项目中的依赖版本统一,避免冲突。

<dependencyManagement><dependencies><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>4.0.3</version></dependency></dependencies>
</dependencyManagement>

此外,还可以利用IDE的冲突解决工具来手动解决依赖冲突。以IntelliJ IDEA为例,可以通过右侧的Maven窗口查看项目的依赖树,点击相应的依赖项可以找到冲突的来源,并进行手动选择和排除。

3. 数据源配置细节

3.1 数据源配置文件设置

3.1.1 分离数据源配置文件的必要性

在大型企业级应用中,可能会涉及到多种不同类型的数据库,比如MySQL用于业务数据,Redis用于缓存,MongoDB用于非关系型数据存储。每种数据库的配置项、连接方式、连接池参数等可能都不相同。因此,将不同数据源的配置分离至各自的配置文件中,可以使得项目的配置更加清晰,方便管理和维护。

举例来说,我们可能需要维护多个配置文件,如:

  • application.yml - 基础配置文件
  • application-datasource1.yml - 数据源1的配置
  • application-datasource2.yml - 数据源2的配置

application.yml 中,我们可以指定哪些配置文件需要被加载:

spring:profiles:active: datasource1,datasource2
3.1.2 不同数据源配置文件的结构和内容

每个数据源的配置文件会遵循Spring Boot的配置规范,包含所有必要的配置项。一个典型的 application-datasource1.yml 配置文件内容示例如下:

spring:datasource:datasource1:url: jdbc:mysql://localhost:3306/db1username: user1password: pass1driver-class-name: com.mysql.cj.jdbc.Driverjpa:properties:hibernate:dialect: org.hibernate.dialect.MySQL5InnoDBDialectinitialization-mode: always

3.2 数据源参数配置详解

3.2.1 数据库连接URL、用户名和密码配置

数据库连接URL通常包含协议、主机地址、端口以及数据库名称。用户名和密码是访问数据库的凭证。

对于MySQL数据库,URL可能看起来像这样:

url: jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC

确保在配置数据库连接时,使用正确的URL、用户名和密码。敏感信息如密码不应该直接写在配置文件中,而是应该使用环境变量或其他安全的配置方式来管理。

3.2.2 驱动类名、JDBC参数等高级配置选项

对于JDBC参数,可以根据需要设置额外的JDBC连接参数,例如:

driver-class-name: com.mysql.cj.jdbc.Driver

而一些高级配置项,比如连接池的最大连接数,保持活动的最长时间,或者初始化时是否验证连接等,可以在 application.yml 中进行如下配置:

hibernate:connection:pool_size: 20max.TimeUnit: 1800validate: true

3.3 多数据源环境下的连接池配置

3.3.1 连接池的作用和选择

连接池是数据库连接的缓存池,它可以提供快速的数据库连接,同时减少资源消耗。在多数据源环境中,每个数据源都可以独立配置连接池。

常见的连接池实现有HikariCP、Apache DBCP、C3P0等。Spring Boot默认使用的是HikariCP,因其性能出色且配置简单。

3.3.2 针对不同数据源的连接池参数配置

针对不同的数据源,我们可能需要调整连接池的参数来优化性能。例如,对于读写负载较为均衡的数据源,我们可能希望设置更多的连接数:

spring:datasource:datasource1:hikari:maximum-pool-size: 10minimum-idle: 5idle-timeout: 30000maxLifetime: 1800000

而如果另一个数据源主要是用于读操作,可以减少最大池大小和保持活动时间:

spring:datasource:datasource2:hikari:maximum-pool-size: 5minimum-idle: 2idle-timeout: 30000maxLifetime: 900000

application-datasource2.yml 中进行类似的配置,可以帮助我们针对不同的数据库负载进行调优。

4. DataSource bean配置方法

4.1 DataSource接口与实现类

4.1.1 DataSource接口在Spring中的角色

DataSource 接口在Spring框架中扮演着连接数据库的关键角色。它定义了获取连接的方法,是连接池实现的抽象。通过 DataSource ,Spring能够管理数据库连接的生命周期,包括连接的创建、获取、释放和关闭,保证了数据库连接的有效管理,并提升了应用的性能。

在多数据源的场景中,需要为每个数据源定义一个 DataSource 实现。Spring Boot通过自动配置和约定优于配置的原则,简化了数据源的配置过程。当项目中存在多个数据源时,需要明确地为每个数据源指定相应的 DataSource 实例,并将它们配置到 Spring 容器中,以便在需要的时候,能够正确地注入对应的数据库连接。

4.1.2 常见的DataSource实现类介绍

在实际开发中,常见的 DataSource 实现类包括以下几种:

  • HikariDataSource : 由 HikariCP 提供的一个高效且轻量级的连接池实现,被广泛用于Spring Boot项目中。
  • TomcatJDBCDataSource : Tomcat 提供的 DataSource 实现,同样是高性能的连接池选项之一。
  • DruidDataSource : 阿里巴巴提供的Druid连接池,它提供了强大的监控和扩展功能。

选择合适的 DataSource 实现类是关键,需要综合考虑性能、功能和项目的具体需求。

4.2 基于Java配置的DataSource Bean创建

4.2.1 使用@Configuration注解创建DataSource

在Spring Boot项目中,通常使用 @Configuration 注解标注的类来配置 DataSource bean。这种方式是通过Java代码直接定义 DataSource 的配置,提供了灵活性和可读性。

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSourceOne() {// 实例化数据源,配置数据源属性HikariDataSource dataSource = new HikariDataSource();dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db_one");dataSource.setUsername("user");dataSource.setPassword("password");// 其他配置...return dataSource;}@Beanpublic DataSource dataSourceTwo() {// 实例化另一个数据源HikariDataSource dataSource = new HikariDataSource();// 配置数据源属性...return dataSource;}
}

在上述代码中,我们定义了两个 @Bean 方法,分别用于创建两个不同的 DataSource 实例。每个 DataSource 都需要单独配置相应的数据库连接信息,例如URL、用户名和密码等。通过这种方式,我们可以灵活地配置多个数据源,以满足项目需求。

4.2.2 配置数据源属性和连接池参数

在创建 DataSource bean时,需要根据不同的数据库和应用场景,设置合适的连接池参数。例如,在上面的 dataSourceOne 方法中,我们使用了 HikariCP 的 HikariDataSource ,它可以设置包括但不限于以下参数:

  • jdbcUrl : 数据库的JDBC URL。

  • username : 数据库的登录用户名。

  • password : 数据库的登录密码。

  • maximumPoolSize : 连接池中最大连接数,建议根据应用的并发需求进行设置。

  • connectionTimeout : 连接获取的最长等待时间。

    dataSource.setJdbcUrl(“jdbc:mysql://localhost:3306/db_one”);
    dataSource.setUsername(“user”);
    dataSource.setPassword(“password”);
    dataSource.setMaximumPoolSize(10);
    dataSource.setConnectionTimeout(30000);

合理的连接池参数设置可以显著提升应用性能,减少数据库的负载。

4.3 XML配置方式的DataSource Bean设置

4.3.1 XML配置文件的编写和读取

虽然Java配置在现代Spring Boot项目中占据了主流,但仍有部分遗留系统或特殊场景下会使用XML配置。XML配置方式提供了另一种配置 DataSource 的方式,适用于那些依赖于XML配置的应用场景。

application.xml 或者特定的配置文件中,可以通过XML标签来定义 DataSource ,如下所示:

<bean id="dataSourceOne" class="com.zaxxer.hikari.HikariDataSource"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db_one"/><property name="username" value="user"/><property name="password" value="password"/><!-- 其他连接池参数 -->
</bean><bean id="dataSourceTwo" class="com.zaxxer.hikari.HikariDataSource"><!-- 数据源二的配置 -->
</bean>

Spring会解析XML配置文件,根据 bean 标签创建对应的 DataSource 实例。这种方式虽然灵活度较低,但能清晰地将配置分离出业务代码。

4.3.2 XML中配置数据源的方法和注意事项

在使用XML配置数据源时,有几点需要注意:

  • 确保Spring能够加载到配置文件,通常通过在 applicationContext.xml 中引入配置文件来实现。

  • 指定合适的 DataSource 实现类的全限定名,以便Spring能够创建正确的实例。

  • 使用XML配置时,连接池的参数设置通常以 property 子标签的形式进行配置。

为了避免潜在的错误,确保XML文件的格式正确,属性名和参数名与数据源实现类的要求一致。同时,对于不同数据源的配置,需要为每个数据源指定唯一的ID,以便在Spring容器中准确引用。

5. JPA实体和Repository配置

5.1 JPA多数据源配置概述

在多数据源环境中,JPA配置需要为每个数据源创建一个独立的 EntityManagerFactory 实例。这样,应用程序就可以为每个数据源创建和管理不同实体类的实体管理器。关键点在于配置能够识别多个数据源,并且能够相应地管理它们的持久化操作。

5.1.1 配置多个EntityManagerFactory

要配置多个 EntityManagerFactory ,你需要在Spring配置中使用不同的数据源定义,并为每个数据源创建一个 LocalContainerEntityManagerFactoryBean 。例如,如果你有 primarysecondary 两个数据源,你需要为每个数据源定义一个 EntityManagerFactory

@Bean(name = "primaryEntityManager")
public LocalContainerEntityManagerFactoryBean primaryEntityManager(EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {return builder.dataSource(dataSource).packages("com.example.primary") // 指定实体类的包路径.persistenceUnit("primary").build();
}@Bean(name = "secondaryEntityManager")
public LocalContainerEntityManagerFactoryBean secondaryEntityManager(EntityManagerFactoryBuilder builder, @Qualifier("secondaryDataSource") DataSource dataSource) {return builder.dataSource(dataSource).packages("com.example.secondary") // 指定实体类的包路径.persistenceUnit("secondary").build();
}
5.1.2 实现不同数据源的实体管理

每个 EntityManagerFactory 创建的实例将只管理它所关联的数据源的实体。这允许你针对每个数据源的特定需求优化实体映射和查询性能。使用 @Entity 注解为每个实体指定数据源,并通过 @PersistenceContextEntityManager 注入不同的实体管理器实例到你的服务层。

5.2 Repository接口的配置和使用

JPA的Repository接口极大地简化了数据访问层的代码编写。配置Repository接口以使用多数据源需要一些额外的步骤。

5.2.1 配置JPA Repository接口的细节

每个数据源配置需要与 EntityManagerFactory 相匹配。为每个数据源定义一个配置类,并使用 @EnableJpaRepositories 注解指定该数据源的Repository接口位置:

@EnableJpaRepositories(basePackages = "com.example.primary.repository",entityManagerFactoryRef = "primaryEntityManager",transactionManagerRef = "primaryTransactionManager")

确保每个数据源都定义了对应的事务管理器。

5.2.2 不同数据源下Repository的使用方法

在服务层代码中,你可以通过依赖注入来获取特定数据源的Repository接口,并使用它们进行数据访问:

@Service
public class SomeService {@Autowiredprivate PrimaryRepository primaryRepository;@Autowiredprivate SecondaryRepository secondaryRepository;public void someBusinessLogic() {primaryRepository.findById(...); // 使用primary数据源的RepositorysecondaryRepository.findById(...); // 使用secondary数据源的Repository}
}

5.3 JPA事务管理配置

在多数据源环境下,事务管理变得复杂,因为需要确保事务在多个数据源之间一致性和正确性。

5.3.1 PlatformTransactionManager的配置要点

对于每个数据源,都需要配置一个 PlatformTransactionManager 实例。通常,每个数据源对应一个事务管理器:

@Bean(name = "primaryTransactionManager")
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryEntityManager") EntityManagerFactory entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory);
}@Bean(name = "secondaryTransactionManager")
public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryEntityManager") EntityManagerFactory entityManagerFactory) {return new JpaTransactionManager(entityManagerFactory);
}
5.3.2 多数据源环境下的事务隔离级别和传播行为

在多数据源事务管理中,特别需要注意事务的隔离级别和传播行为。正确的配置可以避免事务冲突、数据不一致以及性能问题:

@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)
public void performMultiSourceTransaction() {// 执行相关事务操作...
}

在实际操作中,你可能需要结合业务需求和数据一致性要求,来设置合理的事务隔离级别和传播行为。

以上章节详细介绍了在Spring Boot项目中配置JPA多数据源的步骤,包括EntityManagerFactory、Repository接口以及事务管理器的配置。这些步骤确保了应用能够正确地管理多个数据源,并进行高效的数据操作。在实际操作过程中,你可能还需要结合具体业务逻辑进行调整和优化。

本文还有配套的精品资源,点击获取 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据源进行操作。内容涵盖了为不同的数据库配置独立数据源、实体类和对应的Repository接口,以及通过注解注入服务层并使用特定的事务管理器执行操作。本文旨在为开发者提供一个清晰的多数据源配置流程,提高开发效率并确保数据一致性与完整性。

本文还有配套的精品资源,点击获取 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

]

相关文章:

Spring Boot中实现JPA多数据源配置指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始&#xff0c;到配置数据源、创建DataSource bean、定义实体和Repository&#xff0c;最后到配置事务管理器和使用多数据…...

服务器加固

1.服务器密码复杂度 密码最小长度&#xff0c;密码复杂度策略 vim /etc/pam.d/system-auth --------------- #密码配置 #ucredit&#xff1a;大写字母个数&#xff1b;lcredit&#xff1a;小写字母个数&#xff1b;dcredit&#xff1a;数字个数&#xff1b;ocredit&#xff1a;…...

探索CSS中的背景图片属性,让你的网页更加美观

导语&#xff1a;在网页设计中&#xff0c;背景图片的运用能够丰富页面视觉效果&#xff0c;提升用户体验。本文将详细介绍CSS中背景图片的相关属性&#xff0c;帮助大家更好地掌握这一技能。 一、背景图片基本属性 1、background-image 该属性用于设置元素的背景图片。语法如…...

Oracle的打开游标(OPEN_CURSORS)

一、OPEN_CURSORS 概述 OPEN_CURSORS 指定会话一次可以拥有的打开游标&#xff08;私有 SQL 区域的句柄&#xff09;的最大数量。可以使用此参数来防止会话打开过多的游标。 OPEN_CURSORS参数说明 特性 描述 参数类型 Integer 默认值 50 修改方式 ALTER SYSTEM PDB级别…...

数值分析—数值积分

研究背景 积分的数学解法为牛顿莱布尼兹公式&#xff0c;数学表示为 ∫ a b f ( x ) d x F ( b ) − F ( a ) \int_{a}^{b} f(x)dxF(b)-F(a) ∫ab​f(x)dxF(b)−F(a)&#xff0c;但应用该方法有如下困难&#xff1a; 1&#xff0c; f ( x ) f(x) f(x)的原函数有时不能用初等函…...

克服大规模语言模型限制,构建新的应用方法——LangChain

大模型 大模型的出现和落地开启了人工智能(AI)新一轮的信息技术革命&#xff0c;改变了人们的生 活方式、工作方式和思维方式。大模型的落地需要数据、算力和算法三大要素。经过几 年发展&#xff0c;大模型的数据集(包括多模态数据集)制作已经形成了规约&#xff0c;Meta、Go…...

计算机网络 —— HTTPS 协议

前一篇文章&#xff1a;计算机网络 —— HTTP 协议&#xff08;详解&#xff09;-CSDN博客 目录 前言 一、HTTPS 协议简介 二、HTTPS 工作过程 1.对称加密 2.非对称加密 3.中间人攻击 4.引入证书 三、HTTPS 常见问题 1.中间人能否篡改证书&#xff1f; 2.中间人能否调…...

React第十七章(useRef)

useRef 当你在React中需要处理DOM元素或需要在组件渲染之间保持持久性数据时&#xff0c;便可以使用useRef。 import { useRef } from react; const refValue useRef(initialValue) refValue.current // 访问ref的值 类似于vue的ref,Vue的ref是.value&#xff0c;其次就是vu…...

React第十五节useReducer使用详解差异

useReducer() 的用法注意事项 1、 概述&#xff1a; useReducer() 常用于管理复杂的状态更新逻辑&#xff0c;特别是在状态更新依赖于多个条件或动作时&#xff0c;useReducer 提供了一种更加结构化和可维护的方式来处理状态。可以将更新函数写在组件外面 它与 useState() 相…...

NanoLog起步笔记-5-客户端简要描述

nonolog起步笔记-5-客户端简要描述 客户端的简要的设计图路notify模式服务端最好分两个核 NanoLog::setLogLevel(NOTICE);从 NANO_LOG 开始NANO_LOGcompiling time的语句getNumNibblesNeeded&#xff1a;得到prompt中&#xff0c;number的数量countFmtParams&#xff1a;得到所…...

Flink:入门介绍

目录 一、Flink简介 2.1 Flink 架构 2.2 Flink 应用程序 运行模式 二、Flink 集群 部署 2.1 本地集群模式 2.1.1 安装JDK​编辑 2.1.2 下载、解压 Flink 2.1.3 启动集群 2.1.4 停止集群 2.2 Standalone 模式 2.2.0 集群规划 2.2.1 安装JDK 2.2.2 设置免密登录 2…...

目标跟踪领域经典论文解析

亲爱的小伙伴们&#x1f618;&#xff0c;在求知的漫漫旅途中&#xff0c;若你对深度学习的奥秘、JAVA 、PYTHON与SAP 的奇妙世界&#xff0c;亦或是读研论文的撰写攻略有所探寻&#x1f9d0;&#xff0c;那不妨给我一个小小的关注吧&#x1f970;。我会精心筹备&#xff0c;在…...

网络编程 | TCP套接字通信及编程实现经验教程

1、TCP基础铺垫 TCP/IP协议簇中包含了如TCP、UDP、IP、ICMP、ARP、HTTP等通信协议。TCP协议是TCP/IP协议簇中最为常见且重要的通信方式之一&#xff0c;它为互联网上的数据传输提供了可靠性和连接管理。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议…...

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果...

Linux下redis环境的搭建

1.redis的下载 redis官网下载redis的linux压缩包&#xff0c;官网地址:Redis下载 网盘链接&#xff1a; 通过网盘分享的文件&#xff1a;redis-5.0.4.tar.gz 链接: https://pan.baidu.com/s/1cz3ifYrDcHWZXmT1fNzBrQ?pwdehgj 提取码: ehgj 2.redis安装与配置 将包上传到 /…...

REDMI瞄准游戏赛道,推出小屏平板

近日&#xff0c;REDMI推出了一款8.8英寸的小屏平板&#xff0c;引发市场关注。该平板采用LCD屏幕&#xff0c;搭载天玑9400处理器&#xff0c;定位游戏市场&#xff0c;意在开拓小屏平板的新领域‌。 ‌小屏平板新尝试‌ 这款REDMI平板未追随大屏潮流&#xff0c;而是选择了8…...

springai结合ollama

目录 ollama 介绍 使用 下载&#xff1a; 安装&#xff1a; 点击这个玩意next就行了。 运行 spring ai使用ollama调用本地部署的大模型 加依赖 配置yml 写代码 ollama 介绍 官网&#xff1a;Ollama Ollama是一个用于部署和运行各种开源大模型的工具&#xff1b; …...

React第十三节开发中常见问题之(视图更新、事件处理)

一、视图更新有哪些方案&#xff1f; useState用法介绍 1、对于数据变量 正常的增删改查&#xff0c;只会让数据更新&#xff0c;但是不会触发 React 视图的更新&#xff1b; 如&#xff1a; <script lang"jsx">const baseTable [{name:Andy, age: 18, id…...

【Appium报错】安装uiautomator2失败

目录 1、通过nmp安装uiautomator2&#xff1a;失败 2、通过 Appium 的平台直接安装驱动程序 3、通过pip 来安装 uiautomator2 1、通过nmp安装uiautomator2&#xff1a;失败 我先是通过npm安装的uiautomator2&#xff0c;也显示已经安装成功了&#xff1a; npm install -g …...

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...