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

news2025/2/24 2:51:11

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

简介:本文详细介绍了在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 LR
    A[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/db1
      username: user1
      password: pass1
      driver-class-name: com.mysql.cj.jdbc.Driver
      jpa:
        properties:
          hibernate:
            dialect: org.hibernate.dialect.MySQL5InnoDBDialect
      initialization-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: 20
    max.TimeUnit: 1800
    validate: true

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

3.3.1 连接池的作用和选择

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

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

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

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

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

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

spring:
  datasource:
    datasource2:
      hikari:
        maximum-pool-size: 5
        minimum-idle: 2
        idle-timeout: 30000
        maxLifetime: 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 {

    @Bean
    public DataSource dataSourceOne() {
        // 实例化数据源,配置数据源属性
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/db_one");
        dataSource.setUsername("user");
        dataSource.setPassword("password");
        // 其他配置...

        return dataSource;
    }

    @Bean
    public 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 {
    @Autowired
    private PrimaryRepository primaryRepository;

    @Autowired
    private SecondaryRepository secondaryRepository;

    public void someBusinessLogic() {
        primaryRepository.findById(...); // 使用primary数据源的Repository
        secondaryRepository.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.coloradmin.cn/o/2256634.html

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

相关文章

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

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

数智运营一体化平台项目经营分享

分离前后台&#xff0c;增强产品管理灵活性 前端成熟的流程平台&#xff0c;支持低代码快速灵活配置流程表单&#xff0c;完美解决流程频繁变化与快速上线、费用控制的矛盾。使产品管理体系&#xff0c;摆脱了流程可移植性差和投入大量人力物力无止境修改流程的困境。同时&…

UE5 猎户座漂浮小岛 09 移动能力 角色属性

UE5 猎户座漂浮小岛 09 移动能力 角色属性&#xff08;1&#xff09; 1.移动能力 1.1 加速跑 BlendSpace&#xff1a;混合空间 2.角色属性 2.1 行动点数 AP&#xff1a;Action Point Max AP&#xff1a;Max Action Point AP CPS&#xff1a;Action Point Consume Per Sec…

LeetCode---426周赛

题目列表 3370. 仅含置位位的最小整数 3371. 识别数组中的最大异常值 3372. 连接两棵树后最大目标节点数目 I 3373. 连接两棵树后最大目标节点数目 II 一、仅含置位位的最小整数 题目要求我们返回二进制数位全为1&#xff0c;且大于 n 的最小的整数&#xff0c;我们可以直…

HTML笔记()蜘蛛纸牌之卡牌拖拽

效果 代码 <!DOCTYPE html> <html><head><style>body{display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #2b2b2b;position: relative;}.card{/*设置卡牌的外观*/width: 150px;height: 200px;background-…

基于springboot校园生活服务平台源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一…

C++ 数组与字符串全解析:从基础到应用

目录 数组和字符串 &#xff08;一&#xff09;数组&#xff08;在 C 中&#xff09; 1.一维数组 2.二维数组 &#xff08;二&#xff09;C - style 字符串 &#xff08;三&#xff09;C string 类 数组和字符串 &#xff08;一&#xff09;数组&#xff08;在 C 中&…

Git常用的命令【提交与回退】

git分布式版本控制系统 &#xff08;SVN集中式版本控制系统&#xff09;之间的对比 git有本地仓库和远程仓库&#xff0c;不同的开发人员可以分别提交自己的本地仓库并维护代码的版本控制。 然后多个人员在本地仓库协作的代码&#xff0c;可以提交到远程仓库中做整合。 git本…

JAVA秋招面试题精选-第一天总结

目录 分栏简介&#xff1a; 问题一&#xff1a;订单表每天新增500W条数据&#xff0c;分库分表应该怎么设计&#xff1f; 问题难度以及频率&#xff1a; 问题导向&#xff1a; 满分答案&#xff1a; 举一反三&#xff1a; 问题总结&#xff1a; 问题二&#xff1a;解释…

C—初阶结构体

若是阁下满意的话&#xff0c;能否一键三连呢&#xff01;&#xff01;&#xff01;&#xff01; 结构体基础知识&#xff1a; 概念&#xff1a;结构体是一些值的集合&#xff0c;这些值称为变量&#xff0c;变量可以是不同类型 这里我们再想一下之前的数组&#xff0c;数组是一…

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

JS学习(1)(基本概念与作用、与HTML、CSS区别)

目录 一、JavaScript是什么&#xff1f; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;简称&#xff1a;JS&#xff1f; 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 &#xff08;1&#xff09;html、css。 &#xff08;2&#xff09;JavaScript。 …

matlab读取NetCDF文件

matlab对NetCDF文件进行信息获取和读取数据 文章目录 前言一、什么是NetCDF文件二、读取NetCDF文件数据 1.引入库 2.读入数据总结 前言 在气象学中&#xff0c;许多气象数据存储在NetCDF文件中&#xff0c;后缀为.nc&#xff0c;通常可以用NCL、python和MATLAB等对该…

shell自动显示当前git的branch

效果简介&#xff1a; 1. 如果没在git仓库&#xff0c;显示无变化 2. 如果在git仓库&#xff0c;显示当前分支 实现方法&#xff1a; 在~/.bashrc 里添加&#xff1a; function git_branch { test -d .git && branch"git branch | grep "^\*" | sed…

第四十一天 ASP应用 HTTP.sys 漏洞 iis6文件解析漏洞和短文件漏洞 access数据库泄露漏洞

前言 随着时代的发展现在呀&#xff0c;这个ASp已经淡出大众的视线了 &#xff0c;ASP之前的火爆程度无异于现在的PHP 大家的童年 4399 什么的网站都是这个搭建的ASP 简介 | 菜鸟教程 那大家想问为什么你妹的 这个这么火的网站搭建语言被淘汰了呢 其实多半是以为它的不开…

Java——常用类(下)

时间类 “时间如流水&#xff0c;一去不复返”&#xff0c;时间是一维的。所以&#xff0c;我们需要一把刻度尺来表达和度量时间。在计算机世界&#xff0c;我们把1970 年 1 月 1 日 00:00:00定为基准时间&#xff0c;每个度量单位是毫秒(1秒的千分之一)&#xff0c;如图所示。…

ARMv8-A MacOS调试环境搭建

文章目录 简介安装qemu交叉编译工具链C语言插件 gdb调试测试代码添加调试配置 JLink 调试树莓派 简介 本节主要介绍基于Visual Studio Code在MacOS下调试环境的搭建&#xff0c;Linux发行版上的过程也类型&#xff0c;它主要使用到以下工具链&#xff1a; aarch64 架构的交叉…

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…

Javaweb 前端 ajax

作用&#xff1a;和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义&#xff0c;请求后端之后&#xff0c;后端把数据放在回调 点了清空之后&#xff0c;还要查询全部 await等待请求执行完之后&#xff0c;接收这个结果 代码…

IdentityServer4框架、ASP.NET core Identity

OAuth2.0 IdentityServer4 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID Connect和OAut…