当前位置: 首页 > 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压缩包.将压缩包解压之后 在根目录下加入启动脚本…...

Ubuntu22.04深度学习环境安装【显卡驱动安装】

前言 使用Windows配置环境失败&#xff0c;其中有一个包只有Linux版本&#xff0c;Windows版本的只有python3.10的&#xff0c;所以直接选用Linux来配置环境&#xff0c;显卡安装比较麻烦&#xff0c;单独出一期。 显卡驱动安装 方法一&#xff1a;在线安装&#xff08;操作…...

21届秋/校招面经

开篇先说一下我自身情况&#xff0c;东南大学本科计算机科学与技术专业毕业&#xff0c;gpa3.2/4.8。零零散散搞过一年多ACM&#xff0c;去年&#xff08;2019&#xff09;在icpc上海站拿了铜之后增加了信心&#xff08;因为当时训练总时间半年不到&#xff09;&#xff0c;于是…...

相机动态/在线标定

图1 图2 基本原理 【原理1】平行线在射影变换后会交于一点。如图所示,A为相机光心,蓝色矩形框为归一化平面,O为平面中心。地面四条黄色直线为平行且等距的车道线。HI交其中两条车道线于H、I, 过G作HI的平行线GM交车道线于M。HI、GM在归一化平面上的投影分别为JK、PN,二者会…...

MySQL 8.0 新特性汇总

文章目录 前言1. 运维管理 1.1 可持久化变量1.2 管理员端口1.3 资源组1.4 数据库粒度只读1.5 show processlist 实现方式1.6 加速索引创建速度1.7 控制连接的内存使用量1.8 克隆插件1.9 mysqldump 新增参数1.10 慢日志增强1.11 快速加列1.12 InnoDB 隐藏主键1.13 Redo 配置1.14…...

Resnet C ++ 部署 tensort 部署(四)

Resnet C 部署 pytorch功能测试&#xff08;一&#xff09; Resnet C 部署 模型训练&#xff08;二&#xff09; Resnet C 部署 模型测试&转 onnx&#xff08;三&#xff09; Resnet C 部署 tensort 部署&#xff08;四&#xff09; 之后&#xff0c;开始onnx 转trt 部…...

《Java核心技术I》对并发散列映射的批操作

对并发散列映射的批操作 Java API提供了批处理&#xff0c;计时其他线程处理映射&#xff0c;这些操作也能安全的执行。 3种不同操作&#xff1a; search(搜索)&#xff0c;为每个键或值应用一个函数&#xff0c;直到函数生成一个非null的结果&#xff0c;然后搜索终止&…...

记录一次使用git无权限的问题排查

正常的配置了公私钥之后&#xff0c;在gitlab中也存储了配对的公钥&#xff0c;但当使用git clone 时&#xff0c;总是报无权限 由于在这台机器中添加了多个公私钥&#xff0c;有点复杂&#xff0c;我们可以使用命令 ssh -vvvT 调试一下 ssh -vvvT yourGitlabAddr...

appium学习之二:adb命令

1、查看设备 adb devices 2、连接 adb connect IP:端口 3、安装 adb install xxx.apk 4、卸载 adb uninstall 【包名】 5、把对应目录下的1.txt文件传到手机sdcard下 adb push 1.txt /sdcard 6、进入对应的设备里 adb shell 7、切入sdcard目录 cd /sdcard 8、ls 查…...

Linux Vi/Vim使用 ⑥

掌握 CentOS 7 下的 Vi/Vim 编辑器&#xff1a;从安装到精通 在 CentOS 7 系统的日常运维、编程开发以及各类文本处理场景中&#xff0c;Vi/Vim 编辑器都是不可或缺的得力工具。它以轻量、高效、功能强大著称&#xff0c;虽然初次上手有一定学习门槛&#xff0c;但掌握之后便能…...

JCR一区牛顿-拉夫逊优化算法+分解对比!VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测

JCR一区牛顿-拉夫逊优化算法分解对比&#xff01;VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测 目录 JCR一区牛顿-拉夫逊优化算法分解对比&#xff01;VMD-NRBO-Transformer-BiLSTM多变量时序光伏功率预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.中科院…...

注册1000万公司需要多少钱/seo外包公司专家

一.while循环 1. while 循环语法结构 while当...的时候 while(条件表达式){ 循环体 } 2&#xff0e;执行思路当条件表达式结果为true则执行循环体否则退出循环 3&#xff0e;代码验证 var num 1; while (num < 100){ console.log(好啊有); num; } 4&#xf…...

wordpress 赞 插件/优化方案英语

第二章 数据库的基本知识一、名词1. 关系模型* P26(本P35)将数据元素(文件)内部各数据项间的联系和各数据元素间的联系都表示成满足一定条件的二维表形式的模型就是关系模型。2. 数据库 P26以一定的组织方式存储在计算机外存储器中的&#xff0c;相互关联的为多个用户或应用共享…...

公司建设网站属于什么费用/2345系统导航

枚举类型是一种的值类型&#xff0c;它用于声明一组命名的常数。 (1)枚举的声明:枚举声明用于声明新的枚举类型。 访问修辞符 enum 枚举名:基础类型 { 枚举成员 } 基础类型必须能够表示该枚举中定义的所有枚举数值。枚举声明可以显式地声明 byte、sbyte、…...

网站基本要素/鱼头seo软件

当我们使用最简单的红外发信器时&#xff0c;单次点击是没有问题的&#xff0c;但是当长按一个按钮时会接收到16进制的FFFFFFFF转化为10进制为4294967295&#xff0c;如果要处理长按信息&#xff0c;我的思路是设置两个string类型的变量&#xff0c;一个储存当前的状态&#xf…...

外贸工厂的网站建设/百度广告安装入口

挂载光盘&#xff1a; 光盘插入光驱后使用&#xff1a;mount -t iso9660 /dev/cdrom /mnt 或 mount /dev/sr0 /mnt [rootcentos7 ~]# ll /dev/cdrom lrwxrwxrwx 1 root root 3 Dec 12 10:55 /dev/cdrom -> sr0 挂载优盘&#xff1a; 优盘插入电脑后使用&#xff1a;[rootce…...

网站公司做的网站被攻击/广告联盟平台挂机赚钱

本文的目的是提供代码示例&#xff0c;并解释使用python和TensorFlow建模时间序列数据的思路。本文展示了如何进行多步预测并在模型中使用多个特征。本文的简单版本是&#xff0c;使用过去48小时的数据和对未来1小时的预测(一步)&#xff0c;我获得了温度误差的平均绝对误差0.4…...