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接口,以及通过注解注入服务层并使用特定的事务管理器执行操作。本文旨在为开发者提供一个清晰的多数据源配置流程,提高开发效率并确保数据一致性与完整性。

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

]

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

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

相关文章

如何配置Github并在本地提交代码

前提: 可以流畅访问github, 需要一些上网技巧, 这就自行处理了 申请一个github账号 Github官网地址 首先就是邮箱注册啦, github没有对邮箱的限制, 只要是能收邮件的就ok, qq邮箱, 163等都可以使用. 然后和普通注册账号一样, 一路填写需要的信息, 验证邮箱即可. 如何新增代…

详细聊聊 Spring Cloud for Amazon Web Services

Spring Cloud for Amazon Web Services&#xff08;简称 Spring Cloud AWS&#xff09;是 Spring Cloud 生态系统中用于与亚马逊网络服务&#xff08;AWS&#xff09;集成的一个重要模块。 Spring Cloud AWS 为在 AWS 上构建和部署微服务应用提供了一系列便利的功能和集成点。…

OpenAI 12Days 第二天 强化微调(RFT):推动语言模型在科学研究中的应用

OpenAI 12Days 第二天 强化微调&#xff08;RFT&#xff09;&#xff1a;推动语言模型在科学研究中的应用 文章目录 OpenAI 12Days 第二天 强化微调&#xff08;RFT&#xff09;&#xff1a;推动语言模型在科学研究中的应用RFT的工作原理与应用领域案例研究&#xff1a;基因突变…

21个Python脚本自动执行日常任务(2)

引言 作为编程领域摸爬滚打超过十年的老手&#xff0c;我深刻体会到&#xff0c;自动化那些重复性工作能大大节省我们的时间和精力。 Python以其简洁的语法和功能强大的库支持&#xff0c;成为了编写自动化脚本的首选语言。无论你是专业的程序员&#xff0c;还是希望简化日常工…

关于信号隔离转换器

isolate converter是隔离转换器‌。它是一种在电子电路中用于实现电路隔离、电压转换或信号隔离的设备‌。隔离转换器能在很多场合发挥关键作用&#xff0c;比如可以保护电路、提高安全性&#xff0c;还能帮助不同电压或信号之间的转换与传递‌。 ‌一、产品概述‌ ‌简介‌&a…

2.linux中调度kettle

一.准备转换&#xff0c;等会在linux中用 1.添加excel输入组件&#xff0c;并添加对应的文件 2.添加列拆分为多行组件 3.添加文本文件输出组件 4.保存转换 二.linux安装java 1.把jdk-8u144-linux-x64.tar.gz上传到linux的/lx目录下 2. 解压jdk包&#xff0c;然后配置环境变量…

图的割点、割边(Tarjan算法)

深度优先搜索的利用。 在一个无向连通图中&#xff0c;如果删掉某个顶点后&#xff0c;图不再连通&#xff08;即任意两点之间不能互相到达&#xff09;&#xff0c;我们称这样的顶点为割点。 在一个无向连通图中&#xff0c;如果删掉某条边后&#xff0c;图不在连通&#xff0…

【毕业设计选题】深度学习类毕业设计选题参考 开题指导

目录 前言 毕设选题 开题指导建议 更多精选选题 选题帮助 最后 前言 大家好,这里是海浪学长毕设专题! 大四是整个大学期间最忙碌的时光&#xff0c;一边要忙着准备考研、考公、考教资或者实习为毕业后面临的升学就业做准备,一边要为毕业设计耗费大量精力。学长给大家整…

Java 在Json对象字符串中查找和提取特定的数据

1、在处理JSON数据时&#xff0c;需要提出个别字段的值&#xff0c;通过正则表达式提取特定的数据 public static void main(String[] args) {//定义多个JSON对象字符串类型&#xff0c;假设每个对象有a,b,c 字段String strJson "{\"a\":1.23,\"b\"…

杨振宁大学物理视频中黄色的字,c#写程序去掉

先看一下效果&#xff1a;&#xff08;还有改进的余地&#xff09; 我的方法是笨方法&#xff0c;也比较刻板。 1&#xff0c;首先想到&#xff0c;把屏幕打印下来。c#提供了这样一个函数&#xff1a; Bitmap bmp new Bitmap(640, 480, PixelFormat.Format32bppArgb); // 创…

数字图像处理(15):图像平移

&#xff08;1&#xff09;图像平移的基本原理&#xff1a;计算每个像素点的移动向量&#xff0c;并将这些像素按照指定的方向和距离进行移动。 &#xff08;2&#xff09;平移向量包括水平和垂直分量&#xff0c;可以表示为&#xff08;dx&#xff0c;dy&#xff09;&#xff…

基于springboot+vue实现的剧本杀管理系统(源码+L文+ppt)4-114

摘 要 剧本杀管理系统是一个综合性平台&#xff0c;为剧本杀游戏爱好者、创作者及商家提供多方位服务。系统具备用户账号管理、剧本分类、预约、评价和论坛交流等核心功能。通过这个平台&#xff0c;用户可以便捷地浏览各类剧本信息&#xff0c;根据兴趣和时间安排进行预约&a…

FPGA工作原理、架构及底层资源

FPGA工作原理、架构及底层资源 文章目录 FPGA工作原理、架构及底层资源前言一、FPGA工作原理二、FPGA架构及底层资源 1.FPGA架构2.FPGA底层资源 2.1可编程输入/输出单元简称&#xff08;IOB&#xff09;2.2可配置逻辑块2.3丰富的布线资源2.4数字时钟管理模块(DCM)2.5嵌入式块 …

MATLAB中drawnow命令的作用和使用方法

MATLAB 中&#xff0c;drawnow 是一个非常有用的命令&#xff0c;它的主要功能是在图形绘制过程中强制 MATLAB 更新当前图形窗口。本文具体说明其作用和使用方法 文章目录 功能说明使用场景使用方法示例代码运行结果 总结 功能说明 更新图形&#xff1a; drawnow 会立即绘制所有…

HTML Input 文件上传功能全解析:从基础到优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

怎么获取Java高并发经验与系统设计技能?

如何获得高并发经验&#xff1f; 这是系统邀请我回答的一个问题&#xff0c;由此也引发了我的一些思考&#xff1a;为什么人人都想要获得高并发经验&#xff1b;想拥有高并发系统设计技能&#xff1f; 其原因LZ认为主要有以下三点&#xff1a; 涨薪&#xff1a;有高并发系统设…

Spark实训

实训目的: 介绍本实训的基本内容,描述知识目标、,以及本实训的预期效果等。 1、知识目标 (1)了解spark概念、基础知识、spark处理的全周期,了解spark技术是新时代对人才的新要求。 (2)掌握Linux、hadoop、spark、hive集群环境的搭建、HDFS分布文件系统的基础知识与应用…

算法-字符串-43.字符串相乘

一、题目 二、思路解析 1.思路&#xff1a; 1.双重for循环&#xff0c;倒序依次相乘 2.在倒序处理进位问题 3.最后返回参数的类型是string&#xff0c;用StringBuilder拼接&#xff0c;再转换为字符串 2.常用方法&#xff1a; 1.equals,比较对象内容是否一致 "0".eq…

【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法&#xff0c;通过引入 ​ 正则化&#xff08;绝对值惩罚项&#xff09;约束回归系数&#xff0c;既能解决多重共线性问题&#xff0c;又具有特征选择能力。 1. Lasso 回归的目标函数 Lasso 的目标是最小化以下损失函数&#xff1a; 其中&#xff…

CH592用PB10做GPIO输入中断问题记录

PB10和PB22正常用作烧录&#xff0c;但是可以正常做GPIO口使用的&#xff0c;同时支持输入中断。因实际layout问题最终使用PB10做GPIO输入中断功能。 主要功能&#xff1a;PB10检测充电芯片状态&#xff0c;并根据充电芯片状态切换芯片自身的工作模式&#xff0c;进行不同的任务…