Spring Boot中实现JPA多数据源配置指南
本文还有配套的精品资源,点击获取
简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据源进行操作。内容涵盖了为不同的数据库配置独立数据源、实体类和对应的Repository接口,以及通过注解注入服务层并使用特定的事务管理器执行操作。本文旨在为开发者提供一个清晰的多数据源配置流程,提高开发效率并确保数据一致性与完整性。
1. Spring Boot多数据源配置简介
在分布式系统和复杂应用日益增多的今天,单一数据源往往无法满足业务需求。多数据源配置应运而生,它允许应用连接和管理多个数据库,以实现数据的整合、优化和隔离。
什么是多数据源配置?
多数据源配置指的是在同一个应用或服务中配置并使用多个数据库连接。每个数据库连接对应一个数据源,它们可以是不同类型的数据库,如MySQL、PostgreSQL或MongoDB等。
为何需要使用多数据源?
在实际项目中,多数据源配置是因应多种业务场景的需要。例如,为了数据隔离,主从分离,或者整合遗留系统。它带来以下好处:
- 灵活性 :能够根据不同数据源的特性优化数据库操作。
- 扩展性 :支持水平扩展,对不同模块使用专用数据源。
- 维护性 :可以单独管理和维护不同数据源,减少系统间干扰。
当然,使用多数据源也会面临挑战,比如复杂的配置管理,以及事务处理和数据一致性的问题。随着本系列文章的深入,我们将探讨这些挑战和相应的解决方案。
2. 依赖引入方法
2.1 Spring Boot项目中多数据源的支持
2.1.1 核心依赖介绍
在Spring Boot项目中实现多数据源配置,首先需要在项目中引入必要的核心依赖。核心依赖包括Spring Boot自身提供的starter以及与数据库连接相关的依赖。例如,如果我们需要连接MySQL数据库,则需要引入 spring-boot-starter-jdbc
和 mysql-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
。例如,如果你有 primary
和 secondary
两个数据源,你需要为每个数据源定义一个 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
注解为每个实体指定数据源,并通过 @PersistenceContext
或 EntityManager
注入不同的实体管理器实例到你的服务层。
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多数据源配置指南
本文还有配套的精品资源,点击获取 简介:本文详细介绍了在Spring Boot项目中配置和使用JPA进行多数据源管理的步骤。从引入依赖开始,到配置数据源、创建DataSource bean、定义实体和Repository,最后到配置事务管理器和使用多数据…...
【计算机网络】实验12:网际控制报文协议ICMP的应用
实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注,将所需要配置的IP地址写在对应的主机或者路由器旁边,如图1所示。 图…...
MVC基础——市场管理系统(二)
文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…...
使用Redis的Bitmap实现签到功能
1.基础签到实现 1.1代码如下Service Slf4j public class SignInService {Autowiredprivate StringRedisTemplate redisTemplate;private static final String SIGN_KEY_PREFIX "sign:";/*** 用户签到* param userId 用户ID* param date 签到日期*/public boolean s…...
OpenCV 图像基本操作
OpenCV快速通关 第一章:OpenCV 简介与环境搭建 第二章:OpenCV 图像基本操作 OpenCV 图像基本操作 OpenCV快速通关第二章:OpenCV 图像基本操作一、相关结构体与函数介绍(一)cv::Mat 结构体(二)c…...
SpringBoot3+Micormeter监控应用指标
监控内容简介 SpringBoot3项目监控服务 ,可以使用Micormeter度量指标库,帮助我们监控应用程序的度量指标,并将其发送到Prometheus中并用Grafana展示。监控指标有系统负载、内存使用情况、应用程序的响应时间、吞吐量、错误率等。 micromete…...
Leetcode打卡:变为棋盘
执行结果:通过 题目:782 变为棋盘 一个 n x n 的二维网络 board 仅由 0 和 1 组成 。每次移动,你能交换任意两列或是两行的位置。 返回 将这个矩阵变为 “棋盘” 所需的最小移动次数 。如果不存在可行的变换,输出 -1。 “棋盘…...
遣其欲,而心自静 -- 33DAI
显然,死做枚举只能的50分。 错了4次总算对了。 大体思路: 因题目说只有两个因数,那么有两种情况: 1:两个质数相乘,如:3*515 5*745 等(不包括5*525 或5*315 重复计算\ 因为3*5算了…...
物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉
0. 要实现的效果 让树莓派可以识别身边的一些物品,比如电脑,鼠标,键盘,杯子,行李箱,双肩包,床,椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…...
鸿蒙NEXT元服务:静态卡片
【引言】 最近上线的鸿蒙NEXT元服务受到了一些用户的反馈,指出其缺乏一个直观的入口。为了解决这个问题并提供类似传统应用程序的桌面快捷方式体验,决定通过添加静态卡片功能来让用户能够直接从桌面访问元服务。本文将详细介绍如何实现这一功能。 【参考…...
vue3父子组件通信
一般常用有6种方式: 使用 props 传递数据:父组件通过 props 传递数据给子组件,子组件通过 defineProps 获取父组件定义的数据。使用 v-model 语法糖:父组件通过 v-model="abc" 传递数据,并监听子组件的更新事件,子组件:通过 defineEmits 获取父传入的属性的更…...
2024年认证杯SPSSPRO杯数学建模D题(第一阶段)AI绘画带来的挑战解题全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 D题 AI绘画带来的挑战 原题再现: 2023 年开年,ChatGPT 作为一款聊天型AI工具,成为了超越疫情的热门词条;而在AI的另一个分支——绘图领域,一款名为Midjourney(MJÿ…...
虚幻引擎---材质篇
一、基础知识 虚幻引擎中的材质(Materials) 定义了场景中对象的表面属性,包括颜色、金属度、粗糙度、透明度等等;可以在材质编辑器中可视化地创建和编辑材质;虚幻引擎的渲染管线的着色器是用高级着色语言(…...
【Linux基础】yum 与 vim 的操作
目录 Linux 应用商店——yum yum和yum源是什么 关于镜像的简单理解 yum 的基本操作 yum的安装 yum install 命令 yum查看软件包 yum list 命令 yum的卸载 yum remove 命令 关于 rzsz 软件 安装 rzsz 软件: rz 命令 sz 命令 yum 源拓展 Linux 编辑器…...
一句话木马
作用: 一句话木马的作用主要是利用计算机系统或网络协议的安全漏洞,以实现未经授权访问、数据窃取或其他恶意目的。 木马举例: 1.PHP <?php eval($_POST[attack]);?> 解释 • <?php ... ?> 是 PHP 代码的开始和结束标记…...
给建筑物“穿毛衣”:AI绘图新玩法
随着气温的骤降,我们不仅感受到了自然界的寒冷,甚至连城市的建筑物似乎也在寒风中“颤抖”。在这样的背景下,一种新颖的AI绘图玩法——给建筑“穿毛衣”在网络上迅速走红。本文将详细介绍这一创意玩法,并提供手把手的教学指导。 A…...
【Qt】Qt Creator项目文件(.pro 文件)构建指令学习
文章目录 1. DESTDIR作用:实例: 2. INCLUDEPATH作用:实例: 3. LIBS作用:用法:实例: 4. TEMPLATE作用:实例: 5. OTHER_FILES作用:实例:其它说明 6.…...
突破!自然语言强化学习(NLRL):一个可处理语言反馈的强化学习框架
本论文由伦敦大学学院、上海交通大学、布朗大学、布里斯托大学、新加坡国立大学以及萨里大学的研究者合作完成。 冯熙栋是论文第一作者,即将毕业于伦敦大学学院。目前是Google DeepMind的Research Scientist,主要研究方向包括强化学习与生成模型。刘博是…...
core Webapi jwt 认证
core cookie 验证 Web API Jwt 》》》》用户信息 namespace WebAPI001.Coms {public class Account{public string UserName { get; set; }public string UserPassword { get; set; }public string UserRole { get; set; }} }》》》获取jwt类 using Microsoft.AspNetCore.Mvc…...
【Springboot知识】springboot基础-事件
文章目录 简介一、事件类型二、事件处理机制三、自定义事件和监听器四、异步事件处理五、条件事件监听 如何使用1. 自定义事件2. 发布事件3. 监听事件4. 测试事件机制 ApplicationEventPublisher接口使用的设计模式 简介 在Spring Boot中,事件机制是一种基于观察者…...
经典视觉神经网络1 CNN
一、概述 输入的图像都很大,使用全连接网络的话,计算的代价较高,图像也很难保留原本特征。 卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...
解决跨域问题方案
跨域问题在前后端分离架构下尤为常见,是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度,帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...
【python自动化五】接口自动化基础--requests的使用
python的接口请求可以用requests库,这个介绍就不多说了,网上说得很详细。 接下来直接记录下如何使用(当然也不限于自动化的使用) 1.安装requests requests也需要安装一下 pip install requests2.requests请求 1.常用的请求方法…...
文本三剑客——grep命令
介绍 作用 Linux grep (global regular expression) 命令用于查找文件里符合条件的字符串或正则表达式。 常用选项 -i:忽略大小写进行匹配。-v:反向查找,只打印不匹配的行。-n:显示匹配行的行号。-r:递归查找子目录…...
ASP 实例:深入解析与实战应用
ASP 实例:深入解析与实战应用 引言 ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于动态网页设计和开发。它允许开发者创建和运行动态交互性网页,如访问数据库、发送电子邮件等。本文将深入探讨AS…...
文件的操作
什么是文件 如何是数据持久化——保存在硬盘上(文件,数据库)磁盘上的文件是文件在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件,比如源文件(.c文件)读a文件写到b文件里,此时a…...
【简单谈谈UCIE PHY LSM链路训练】
UCIE PHY LSM链路训练 1 UCIE PHY LSM1.1 RESET1.2 SBINT1.3 MBINT1.3.1 MBINT.PARAM1.3.2 MBINIT.CAL1.3.3 MBINIT.REPAIRCLK1.3.4 MBINIT.REPAIRVAL1.3.5 MBINIT.REVERSALMB1.3.6 MBINIT.REPAIRMB 1.4 MBTRAIN1.5 LINKINIT1.6 ACTIVE1.7 L1/L21.8 PHY.RETRAIN1.9 TRAIN.ERROR…...
数学二常用公式(高等数学+线性代数)
目录 高等数学第一章 函数、极限和连续第二章 一元函数微分学第三章 一元函数积分学第四章 多元函数微分学第五章 多元函数积分学第六章 常微分方程 线性代数线性代数篇章涉及的知识内容及常用公式第一章 行列式第二章 矩阵第三章 向量第四章 线性方程组第五章 矩阵的相似化简第…...
【Java计算机毕业设计】Springboot+vue动物保护协会管理系统【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储:…...
鸿蒙面试---1208
HarmonyOS 三大技术理念 分布式架构:HarmonyOS 的分布式架构使得设备之间能够无缝协同工作。例如,它允许用户在不同的智能设备(如手机、平板、智能手表等)之间共享数据和功能。比如,用户可以在手机上开始编辑文档&…...
【论文阅读】一名系统研究者的攀登之路
作者:陈海波 陈海波是操作系统、系统结构、并行与分布式系统方向大牛,上海交通大学大牛团队 学习体会: 计算机系统论文准备周期较长,十有八九都是在解决新问题的路上~ 因此学习大佬的学习经验,少踩坑,把主…...
MySQL 索引(B+树)详解
MySQL 索引(B树)详解 MySQL逻辑架构对比InnoDB与MyISAM存储结构存储空间可移植性、备份及恢复事务支持AUTO_INCREMENT表锁差异全文索引表主键表的具体行数CRUD操作外键 sql优化简介什么情况下进行sql优化sql语句执行过程sql优化就是优化索引 索引索引的优…...
【不稳定的BUG】__scrt_is_managed_app()中断
【不稳定的BUG】__scrt_is_managed_app函数中断 参考问题详细的情况临时解决方案 参考 发现出现同样问题的文章: 代码运行完所有功能,仍然会中断 问题详细的情况 if (!__scrt_is_managed_app())exit(main_result);这里触发了一个断点很奇怪,这中断就发生了一次,代…...
护网蓝队日志分析
Windows日志分析 一、事件查看器 在「事件查看器」中,可以查看系统中记录的所有事件日志。操作步骤如下: 1、打开 Windows 事件查看器 1、使用Windows R快捷键打开「运行」对话框,输入eventvwr.msc,然后按回车键打开事件查看…...
滤波器设计(八)-McClellan-Parks design algorithm
步骤 Initialization: Choose an extremal set of frequences {ωi(0)}.Finite Set Approximation: Calculate the best Chebyshev approximation on the present extremal set, giving a value δ(m) for the min-max error on the present extremal set.Interpolation: Calc…...
ElasticSearch常见的索引_集群的备份与恢复方案
方案一:使用Elasticsearch的快照和恢复功能进行备份和恢复。该方案适用于集群整体备份与迁移,包括全量、增量备份和恢复。 方案二:通过reindex操作在集群内或跨集群同步数据。该方案适用于相同集群但不同索引层面的迁移,或者跨集…...
C#对Excel表csv文件的读写操作
C#对Excel表csv文件的读写 一、变量定义二、加载主窗口三、创建表头四、向表中添加数据五、从表中读取数据六、单击按钮向表中添加数据七、测试验证 一、变量定义 #region 变量定义 private string CurAppExeDir System.AppDomain.CurrentDomain.BaseDirectory; private strin…...
【MySQL】mysql服务器架构
目录 1、背景2、mysql服务器架构解释3、总结 1、背景 简单理解一下mysql的服务器架构。 2、mysql服务器架构解释 mysql的架构图如下: 主要分为三部分:客户端、服务端、存储引擎。接下来我们来解释一下各个部分: 客户端 用来连接mysql服务…...
Vue Web开发(三)
1. 添加el-menu样式 将Home.vue文件重新命名为Main.vue文件,本节涉及新的home目录和User目录下的index.js文件,因为侧边导航栏Aside和顶部Header是在每一个页面都存在的,所以重新命名为Main,而home文件夹下的index.js则对应系统首…...
Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)
目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速,小区居民对于出行方…...
云安全:云计算安全
目录 云安全的定义和重要性 云安全的关键组成部分 云安全技术实现 云安全最佳实践 云安全的定义和重要性 云安全是指在云计算环境中保护数据、应用程序和相关服务不受威胁的一系列策略、技术和控制措施。随着云计算的快速发展,云安全已成为企业和个人用户最关心…...
git clone加速(亲测好用)
用公司网git clone特别卡,本以为宿舍网会好一点,回来下的时候也只有几十kb. 然后找到了一种方法,就是在原始下载命令前加一个gitclone 比如 git clone https://github.com/infiniflow/ragflow.git替换成 git clone https://gitclone.com/gi…...
Python 网络爬虫进阶:突破数据采集的边界
在成功踏入 Python 网络爬虫的入门之境后,我们犹如初窥宝藏的探险家,领略到了数据采集世界的奇妙与潜力。而此刻,进阶之路在脚下徐徐展开,它将引领我们深入这片领域的更深处,挖掘出更为强大和精妙的爬虫技艺࿰…...
【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义
文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代,安全问题已成为技术领域不可忽视的…...
[论文解读]Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting
Street Gaussians是年初的一篇动态场景重建论文, 在当时是做到了SOTA,至今为止很多自动驾驶或者动态场景重建的文章都会将Street Gaussians作为实验的比较对象,这也表明了这篇文章的重要性,今天就一起来看看这篇文章; …...
在Github上上传大文件的办法(图文版)
在上一篇笔记中,笔者用图文的形式介绍了如何在GITHUB中上传文件夹。 可参考这篇笔记 在GITHUB上传本地文件指南(详细图文版)-CSDN博客 但接下来,笔者在继续上传别的文件的过程中,遇到了新的问题,gitbash…...
关于springBoot+vue项目中配置SSL证书问题
前端可以通过https进行访问 1.前端在访问后端接口时,使用https进行访问,在request.js配置文件中,这个文件是配置axios的基本请求的,在基础请求地址中改为https方式 2.需要在Linux中的nginx中配置ssl证书,具体请参考&…...
GitLab
Git服务器 一、概念 C/S 架构的 Git 服务端是存放代码的公用平台是多人并行协作的核心部分通常单独部署在一台独立的服务器上客户端可以通过网络访问服务器上的仓库 GitLab搭建 一、部署 1、安装依赖包 [rootGitLab ~]# yum -y install policycoreutils-python-utils.noarc…...
TCP客户端服务器端通信(线程池版)
1、什么是监听套接字,和UDP相比,TCP为什么文件描述符变多了? 在网络编程中,TCP和UDP是两种常见的传输协议,它们之间最大的不同之一在于连接的管理方式。为了更好地理解这个区别,我们可以用一个生动的比喻来…...
go语言的成神之路-标准库篇-fmt标准库
目录 一、三种类型的输出 print: println: printf: 总结: 代码展示: 二、格式化占位符 %s:用于格式化字符串。 %d:用于格式化整数。 %f:用于格式化浮点数。 %v࿱…...