Spring Boot 中的 “依赖管理和自动配置” 详解透彻到底(附+详细代码流程)

news2024/9/28 1:19:03

1. 如何理解 “ 约定优于配置 ”

约定优于配置(Convention over Configuration / CoC),又称约定编程,是一种软件设计规范,本质上是对系统,类库或框架中一些东西。

一个大众化合理的默认值(缺省值)

例如在模型中存在一个名为User的类,那么对应到数据库会存在一个名为 user 的表,只有偏离这个约定时才需要做相关的配置(例如你想将表名命名为:t_user等非user时才需要写关于这个名字的配置)

简单来说就是假如你所期待的配置 与 约定的配置 一致,那么就可以不做任何配置,约定不符合期待时,才需要对约定进行替换配置。

约定优于配置:为什么要搞一个“约定优于配置”约定其实就是一个规范,遵循了规范,那么就存在通用性。存在了通用性,那么事情就会变得相对简单 ,程序员之间的沟通成本就会降低,工作效率会提升,合作也会变得更加简单。

生活中,这样的情况,大量存在:比如:两个都是男生,你说一起去上厕所去,那么,他们两个人都是(默认,约定好的都是去男生厕所,而特意说明是:去女生厕所。)

注意:误区:默认是采用约定的,但是你配置了,还是采用你的配置的信息的。

2. Spring Boot 依赖管理 和 自动配置

2.1 Spring Boot 的依赖管理

2.1.1 什么是依赖管理

  1. spring-boot-starter-parent 还有父项目,声明了开发中常用的依赖的版本号

  2. 并且进行 自动版本仲裁 ,即如果程序员没有指定某个 依赖的 jar 的版本,则以父项目指定的版本为准。

在这里插入图片描述

在这里插入图片描述

2.1.2 修改自动仲裁 / 默认版本号

如果 Spring Boot 当中默认配置的 jar 依赖的版本,不是,我们所想要的该如何配置修改成我们自己想要的呢。

如何修改 Spring Boot 当中对应 jar。

演示: 将 SpringBoot mysql 驱动修改成 5.1.49 版本的。

首先,我们先要学会如何查看到对应我们所需的 jar 在 Spring Boot 的默认配置当中使用的是什么版本的。

在spring-boot-dependencies\2.5.3\spring-boot-dependencies-2.5.3.pom,中我们可以找到对应的 jar 包的依赖版本,如下图所示:这里 Spring Boot 对于 MySQL 的依赖默认配置是 8.0.26 的

在这里插入图片描述

查 看 spring-boot-dependencies.pom 里 面 规 定 当前 依 赖 的 版 本 对 应 的 key , 这 里 是 mysql.version

在这里插入图片描述

在这里插入图片描述

修改 Spring Boot 当中对应 jar;有两种方式:

  • 方式一: 直接在项目的 pom.xml 文件当中直接导入,自己想要的 jar 的版本即可。

  • 方式二: 和方式一是一样的,不同的是编写方式,有所不同:“方式二:是将 jar 信息和 jar的版本 信息分开来编写的了”。

方式一: 修改 pom.xml 重写配置 当更新 Maven 时,就依赖到新的 ,mysql 驱动。

直接导入我们自己想要的 依赖的jar 的配置,然后,更新 Maven 即可。

在这里插入图片描述

  <!--      自定义设置:1  我们自己指定mysql/驱动版本-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version> <!--不指明就是,采用SpringBoot 约定好的(也就是默认的8.26)-->
        </dependency>

然后,我们在刷新 Maven,重新加载 jar

在这里插入图片描述

注意: 如果配置的依赖jar 包时,不指明就是version 版本的话,就会采用 SpringBoot 约定好的(也就是默认的8.26)版本的。

如下:我们将指明的版本的 version 注释掉,再次更新,看看。

在这里插入图片描述

完整的 pom.xml 信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>quickstartBlog</artifactId>
    <version>1.0-SNAPSHOT</version>


    <!-- 导入 springboot  父工程,规定的写法 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
    </parent>


    <!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--      自定义设置:1  我们自己指定mysql/驱动版本-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version> <!--不指明就是,采用SpringBoot 约定好的(也就是默认的8.26)-->
        </dependency>
    </dependencies>




</project>

方式二: 将依赖jar 包的配置信息,和配置版本分开来编写。

  • 在 <properties> 标签中,配置 jar 的版本信息 ,可以配置多个不同的 jar 的版本信息。

  • 在 <dependencies> 标签中,配置 jar 的 配置坐标信息 ,可以配置多个 jar

在这里插入图片描述

    <properties>
        <mysql.version>5.1.49</mysql.version>
    </properties>


    <!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  -->
    <dependencies>
        <!--      自定义设置:1  我们自己指定mysql/驱动版本-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

更新 Maven ,重新加载 jar 。

在这里插入图片描述

完整的 pom.xml 信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>quickstartBlog</artifactId>
    <version>1.0-SNAPSHOT</version>


    <!-- 导入 springboot  父工程,规定的写法 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
    </parent>


    <properties>
        <mysql.version>5.1.49</mysql.version>
    </properties>


    <!-- 导入 web 项目场景启动器,会自动导入和 web 开发相关依赖,非常方便  -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--      自定义设置:1  我们自己指定mysql/驱动版本-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>




</project>

3.1 starter 场景启动器

3.1.1 starter 场景启动器的说明介绍

开发中我们引入了相关场景的 starter,这个场景中所有的相关依赖都引入进来了,比如:我们之前学习到的 web 开发引入了,该 starter 将导入与 web 开发相关的所有包。

在这里插入图片描述

在这里插入图片描述

依赖树 : 可以看到 spring-boot-starter-web ,帮我们引入了 spring-web mvc,spring-web 开发模块,还引入了 spring-boot-starter-tomcat 场景,spring-boot-starter-json 场景,这些场景下面又引入了一大堆相关的包,这些依赖项可以快速启动和运行一个项目,提高开发效率.

在这里插入图片描述

在这里插入图片描述

所有场景启动器最基本的依赖就是 spring-boot-starter, 前面的依赖树分析可以看到,

在这里插入图片描述

在这里插入图片描述

这个依赖也就是 SpringBoot 自动配置的核心依赖

在这里插入图片描述

3.1.2 Spring Boot 官方提供的 starter 场景启动器

Spring Boot 官方提供的 starter 场景启动器的介绍说明:Build Systems :: Spring Boot 。

在这里插入图片描述

意思就是说:在开发中我们经常会用到 spring-boot-starter-xxx ,比如 spring-boot-starter-web,该场 景是用作 web 开发,也就是说 xxx 是某种开发场景。

这时候,我们只要引入 starter,这个场景的所有常规需要的依赖我们都自动引入。

Spring Boot3 支持的所有场景如下:官方地址:Build Systems :: Spring Boot

在这里插入图片描述

3.1.3 Spring Boot支持的第三方 starter 场景启动器

Spring Boot 也支持第三方starter。

第三方starter不要从spring-boot 开始,因为这是官方spring-boot保留的命名方式的。第三方启动程序通常以项目名称开头,例如:名“XXx”的第三方启动程序项目通常被命名为:“XXx-spring-boot-stater”。

也就是说:xxx-spring-boot-starter是第三方为我们提供的简化开发的场景启动器

4.1 Spring Boot 的自动配置

我们是否还记得,前面学习SSM整合时,需要配置 Tomcat ,配置 Spring MVC,以及配置如何扫描包,配置字符过滤器,配置视图解析器,文件上传等 ✏️✏️✏️ SSM 整合(Spring + MyBatis;Spring + Spring MVC)-CSDN博客 。非常麻烦。而在 Spring Boot 中,存在自动配置 机制,提高开发效率。

简单回顾以前 SSM 整合的配置:

在这里插入图片描述

在这里插入图片描述

4.1.1 Spring Boot 自动配置有哪些

  1. 自动配置 Tomcat

在这里插入图片描述

  1. 自动配置了 Spring MVC

在这里插入图片描述

  1. 自动配置了 Web 常用功能: 比如 字符过滤器。

我们可以通过获取到的 ioc 容器,查看容器创建的组件来验证。

在这里插入图片描述

package com.rainbowsea.springboot;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;


// @SpringBootApplication  表示是一个 springboot 应用
@SpringBootApplication
public class MainApp {
    public static void main(String[] args) {
        // 启动 SpringBoot 应用程序
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        // 查看容器里面的组件
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println("beanDefinitionName ---" + beanDefinitionName);
        }


    }
}

在这里插入图片描述

更加直接查看的方式:我们可以通过 Debug 的方式,在 ioc 打上断点,从而查看 ioc 容器中有哪些 Bean 对象被创建了。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在Spring Boot 的自动配置中,我们不需要像Spring MVC 中一定要配置扫描包 。Spring Boot 有默认的扫描包结构。

如下是来自 Spring Boot 官方文档说明 【https://docs.spring.io/spring-boot/reference/using/structuring-your-code.html#using.structuring-your-code.using-the-default-package】的:自动扫描的包结构。你按照该“约定/自动扫描包结构”,开发项目,就不需要配置扫描包了,直接用 Spring Boot 约定的/默认的即可。

在这里插入图片描述

com
 +- example
     +- myapplication
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

在这里插入图片描述

4.1.2 如何修改 Spring Boot 中的默认配置

演示: 要求能扫描 com.rainbowsea 包下的 HiController.java 应该如何处理 ?

首先我们先测试一下,不按照 Spring Boot 默认的包结构创建的,主程序类。会怎么样。

在 quickstartBlog\src\main\java\com\rainbowsea\目录/包下创建一个,名为 HiController.java主程序类。 并测试, 这时是访问不到的。

在这里插入图片描述

运行主程序,打开浏览器输入:http://localhost:8080/hi 测试。

在这里插入图片描述

原因是:hello 配置的 HelloController 是在 Spring Boot 的默认自动配置的包结构下的,而我们的 hi 配置的 HiController 并不是在,Spring Boot 的自动配置打包结构下的,而我们自己有没有配置包扫描,Spring Boot 自然找不到了。

在这里插入图片描述

5.1 如何修改默认配置

5.1.1 如何修改默认扫描包结构

上面我们测试了,在 com.rianbowsea 包下的 HiController.java 是扫描不到了,扫描不到,也就无法加入到 ioc 容器当中被 Spring Boot管理起来了,也就无法被访问到了。

所以想要,让 HiController.java 可以被扫描到,就解决了这个,无法访问找不到的问题了。

方法:

我们修改 MainApp.java, 增加扫描的包 。

使用 @SpringBootApplication 注解当中的 scanBasePackages 注解属性,该属性的值:就是让Spring Boot 扫描的,包路径。

在这里插入图片描述

在这里插入图片描述

package com.rainbowsea.springboot;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;


// @SpringBootApplication  表示是一个 springboot 应用
// 直接在    SpringBootApplication 注解后指定,让 Spring Boot 要扫描到的包路径
 @SpringBootApplication(scanBasePackages = {"com.rainbowsea"})
public class MainApp {
    public static void main(String[] args) {
        // 启动 SpringBoot 应用程序
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        // 查看容器里面的组件
        String[] beanDefinitionNames = ioc.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println("beanDefinitionName ---" + beanDefinitionName);
        }


    }
}

配置好之后,我们再次重启 ,运行试试。

在这里插入图片描述

5.1.2 Spring Boot中的 resources(类路径下)\application.properties 配置大全

SpringBoot 项目最重要也是最核心的配置文件就是 application.properties,所有的框架配 置都可以在这个配置文件中说明 :Spring Boot 框架中配置文件 application.properties 当中的所有配置大全-CSDN博客

5.1.3 演示:使用一些常用的配置

在Spring Boot中各种配置都有默认,而想要修改配置的话, 可 以 在 resources\application.properties文件中修改。至于application.properties文件是需要我们手动创建的。

特别注意:该文件名必须是 application.properties,后缀也不可以修改。强烈建议将其放到 类的根路径下(也就是resources 目录下 )

其次是,注意:在.properties 后缀的配置文件,当中编写,不要有空格,尽量不要有空格。

如下:

  • 演示一:我们设置该服务器 Tomcat ,我们项目启动的端口,默认是 8080,这里我们设置为 9090。

在这里插入图片描述

编写配置:设置修改 Server 的监听窗口为 9090

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090

在这里插入图片描述

编写配置好后,运行主程序,重新加载程序,看看。

在这里插入图片描述

在这里插入图片描述

  • 演示2: 修改文件上传的大小;

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090


# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB

这里,我们想要看到效果的话,需要Debug,打上断点,进行 Debug 调试才可以比较清除的看到效果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 演示三: 配置开始的项目根的映射路径 .

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090


# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB




# 配置开始的项目根的映射路径
server.servlet.context-path=/rainbowsea

重新启动程序,测试:

在这里插入图片描述

特别说明:讲解

上述的配置文件时在哪里读取的

比如:multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)

默认 Spring Boot 都会将其映射到某个类上,比如:multipart.max-file-size,会映射/关联到MultipartProperties 类。配置都会被映射到相对应的类上的。

而我们将光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)

在这里插入图片描述

5.1.4 Spring Boot 中 application.properties 自定义配置

在 Spring Boot 中,我们还可以还在 .properties 文件中自定义配置,通过 @Value("${}") 的方式来获取对应属性值。

在这里插入图片描述

# 修改server的监听窗口为 9090
# Tomcat started on port(s): 9090 (http) with context path ''
server.port=9090


# 修改文件上传的大小
# 解读一下这个配置是在哪里读取!
#multipart.max-file-size,属性可以指定SpringBoot 上传文件的大小限制(体现“约定优于配置”)
# 默认骗子hi最总都是映射到某个类上,比如:multipart.max-file-size
# 会映射/关联到MultipartProperties 类
# 把光标放在该属性,输入 ctrl + b,或者是按住 ctrl + 点击,就可以定位这个属性是管理到哪个类(属性)
spring.servlet.multipart.max-file-size=10MB




# 配置开始的项目根的映射路径
server.servlet.context-path=/rainbowsea


# 自定义配置属性
my.website=https://www.baidu.com

在这里插入图片描述

package com.rainbowsea;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller // 注入到 ioc 容器当中
public class HiController {
    @RequestMapping("/hi")  // 设置请求映射路径
    @ResponseBody   // 表示返回的是一个 json/字符串,而不是一个网页
    public String hi(){
        System.out.println("website" + website);
        return "hi~, spring boot";
    }

    // 需求website,属性值从application.properties 的 k-v
    @Value("${my.website}")
    private String website;
}

运行测试:

在这里插入图片描述

当然,我们也时可以 将其 配置到 Bean 对象上的,只不过,配置到 Bean 对象上的话,有更好的方式,可以用 Spring Boot 的容器管理。

6.1 Spring Boot 中在哪里配置读取 application.properties 配置文件

打开 ConfigFileApplicationListener.java , 看一下源码;

在这里插入图片描述

在这里插入图片描述

// 指明: application.properties 可以存放的位置在哪里,Spring Boot 可以成功读取到 
private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/*/,file:./config/";

// 指明: 配置类,要是为:application,  
private static final String DEFAULT_NAMES = "application";

7.1 自动配置,遵守按需加载原则

自动配置遵守按需加载原则:也就是说,引入了哪个场景 starter启动器 就会加载该场景关联,的 jar 包,没有引入的 starter 则不会加载其关联 jar 。

在这里插入图片描述

SpringBoot 所有的自动配置功能都在 spring-boot-autoconfigure 包里面;

在这里插入图片描述

在Spring Boot 中的自动配置包,一般是 XXxAutoConfiguration.java 对应 XXxProperties.java,如图

在这里插入图片描述


3. 总结:

  1. Spring Boot 理解其中的 “约定优于配置”,又称约定编程,是一种软件设计规范,本质上是对系统,类库或框架中一些东西。减少不必要的配置,使用约定(默认的配置)吗。

  2. Spring Boot 当中的 jar 版本的查看,以及 修改 Spring Boot 当中的 jar 版本的为字节所需。方式一: 直接在项目的 pom.xml 文件当中直接导入,自己想要的 jar 的版本即可。方式二: 和方式一是一样的,不同的是编写方式,有所不同:“方式二:是将 jar 信息和 jar的版本 信息分开来编写的了”。

  3. Spring Boot 当中的 starter 场景启动器,Spring Boot 官方提供的 starter 场景启动器的介绍说明:Build Systems :: Spring Boot 。

  4. Spring Boot 自动配置,Spring Boot 默认的扫描包结构,修改配置扫描包

  5. Spring Boot当中核心配置文件 application.properties 的理解和使用。 application.properties 的每个配置属性,都对应这 Spring Boot 当中的某个类当中的某个属性,并且加入到了 ioc 容器当中。

  6. 在Spring Boot 中的自动配置包,一般是 XXxAutoConfiguration.java 对应 XXxProperties.java

文章转载自:Rainbow-Sea

原文链接:https://www.cnblogs.com/TheMagicalRainbowSea/p/18387661

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

VSCode+Keil协同开发之Keil Assistant

VSCodeKeil协同开发之Keil Assistant 目录 VSCodeKeil协同开发之Keil Assistant1. 效果展示2. Keil Assistant简介3. Keil Assistant功能特性4. 部署步骤4.1. 1.部署准备4.2. 2.安装Keil Assistant插件4.3. 3.配置Keil Assistant插件 5. Keil Assistant使用6. 总结 大家在单片机…

java 使用网易邮箱发送邮件

java 使用网易邮箱发送邮件 准备条件 网易邮箱账号开通邮箱的POP3/SMPT服务&#xff0c;申请授权码 引入工具包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version></de…

深入浅出Entity-Component-System:重塑游戏开发的未来

引言 在游戏开发领域&#xff0c;架构设计往往决定了项目的成败。随着游戏规模和复杂度的不断增加&#xff0c;传统的面向对象编程(OOP)模式逐渐显露出其局限性。而ECS(Entity-Component-System)架构作为一种新兴的设计模式&#xff0c;正在彻底改变游戏开发的方式。本文将深入…

C# 安卓开发1(基于MAUI框架)

1&#xff1a;什么是 .NET MAUI&#xff1f;这里参考一下官方文档&#xff0c;因为解释的更详细&#xff0c;点击这里&#xff1b; 2&#xff1a;开发工具VS2022&#xff0c;下载下图开发框架 3: 安装完成后创建新项目,选择net6.0长期支持(创建文件的存放路径不要有中文): 4:…

FPGA速度优化

速度优化 文章目录 速度优化前言一、时序优化1.1 减少关键路径上的时序1.1.1 关键路径重组1.1.2 解决扇出问题1.1.3 路径上插入寄存器1.1.4 寄存器平衡1.1.5 并行结构1.1.6 消除代码优先级 总结 前言 速度优化&#xff0c;主要就是设计时序进行优化 吞吐量&#xff1a;每个时…

bbr 随机 phase 的麻烦与 inflight 守恒算法的动机

bbr 有个要点&#xff0c;要把 probebw 的 phase 错开&#xff1a; static void bbr_reset_probe_bw_mode(struct sock *sk) {struct bbr *bbr inet_csk_ca(sk);bbr->mode BBR_PROBE_BW;bbr->cycle_idx CYCLE_LEN - 1 - prandom_u32_max(bbr_cycle_rand);bbr_advance…

炒现货黄金白银通用的技术

要在现货黄金、现货白银等市场&#xff0c;甚至是股票、期货等其他以市场走势为分析对象的市场&#xff0c;我们都需要熟练的掌握一些交易的技术&#xff0c;这些技术可以为我们入场交易打好基础&#xff0c;让我们获得比随机交易更高一点的概率。下面我们就来讨论一下炒现货黄…

关于el-table的show-summary,合计栏不显示以及保留两位小数问题

<el-tableref"table1"v-loading"loading":data"":stripe"true"height"600"show-summary:summary-method"getSummaries":show-overflow-tooltip"true">...</el-table>合计部分不显示的问题 …

安全升级:Docker部署Redis,启用密码验证

1.在自己选定的目录中创建文件夹 在redis文件夹里面创建&#xff1a;data文件夹和conf文件夹&#xff08;文件夹名称随意&#xff09; 2.在conf文件夹中创建redis.conf文件&#xff1a; vim redis.conf 2.1.redis.conf里面编写内容可以根据官网&#xff08;Index of /releases…

Threejs之OrbitControls轨道控制器

本文目录 前言一、Orbitcontrols&#xff08;轨道控制器&#xff09;1.1 基础使用1.2 代码演示 二、效果展示 前言 Orbitcontrols&#xff08;轨道控制器&#xff09;可以使得相机围绕目标进行轨道运动。 一、Orbitcontrols&#xff08;轨道控制器&#xff09; 1.1 基础使用 C…

Hreflang 和 SEO:新手完整指南

每天&#xff0c;数以百万计的法国用户访问像 Amazon.com 这样的全球网站。虽然 Amazon.com 的官方页面是英文的&#xff0c;但用户仍然可以看到法语的文本和产品描述。这是因为亚马逊的全球网站有针对法国的本地化版本&#xff0c;确保所有法国用户都可以自动看到法语的网站内…

ELK学习笔记——如何给Kibana新增用户和角色

Kibana新增用户和角色 首先用超管账号登录上Kibana&#xff0c;按照下面步骤操作 1、创建角色 按图操作 2、创建用户 按图操作 3、给用户分配角色 至此&#xff0c;角色和用户绑定成功&#xff1b; 最后&#xff0c;可以退出管理员账号&#xff0c;登录这个新…

Vue的状态管理——Vuex34Pinia

Vue3中Vuex的使用_vue3 vuex-CSDN博客 VueX详解_组合式vuex-CSDN博客 15分钟学会Pinia Vuex 3和4详解 Vuex 3 Vuex 3是Vue.js 2.x版本的状态管理库&#xff0c;它提供了一种集中式存储和管理组件状态的方式。以下是Vuex 3的一些关键特性&#xff1a; 状态集中管理&#x…

Vulnhub靶场 | DC系列 - DC-3

文章目录 DC-3环境搭建渗透测试 DC-3 环境搭建 靶机镜像下载地址&#xff1a;https://vulnhub.com/entry/dc-32,312/需要将靶机和 kali 攻击机放在同一个局域网里&#xff1b;本实验kali 的 IP 地址&#xff1a;192.168.10.146。 渗透测试 使用 nmap 扫描 192.168.10.0/24 …

鸿蒙(API 12 Beta5版)【通过文本生成码图】

基本概念 码图生成能力支持将字符串转换为自定义格式的码图。 场景介绍 码图生成能力支持将字符串转换为自定义格式的码图&#xff0c;包含条形码、二维码生成。 可以将字符串转成联系人码图&#xff0c;手机克隆码图&#xff0c;例如将"HUAWEI"字符串生成码图使…

如何借助前端表格控件实现软硬一体化数据管理平台

行业背景 在当今数字化时代&#xff0c;随着以数据为关键要素的数字中国建设蓬勃发展&#xff0c;数字化转型的步伐也日益加快。数据的重要性不仅体现在其所包含的信息和见解上&#xff0c;更在于其能够推动社会各领域的创新与进步&#xff0c;为构建数字化未来提供了强劲动力…

优化数据以提升大模型RAG性能思路:Meta Knowledge for RAG的一个实现思路

传统的RAG系统通过检索然后阅读框架来增强LLMs&#xff0c;但存在一些挑战&#xff0c;如知识库文档的噪声、缺乏人工标注信息、长文档的编码问题以及用户查询的模糊性。 因此可以采用数据为中心的增强方法&#xff0c;我们可以看看最近的一个工作。 一、Meta Knowledge for …

Windows中jupyter开启远程连接(局域网)

我是用实验室的电脑&#xff08;做服务器&#xff0c;window&#xff09;给我的电脑&#xff08;做客户机&#xff0c;window&#xff09;开远程连接&#xff0c;step1-4都是在服务器上操作&#xff0c;step5是在客户机上 step1&#xff1a;生成密钥 服务器cmd输入 jupyter n…

计算机网络803-(3)数据链路层

目录 一.数据链路两种类型 二.使用点对点信道的数据链路层 1. 数据链路和帧 2.数据链路层传送的是帧 三.三个基本问题 1.封装成帧 2.透明传输 ①字节填充法 ②其他方法&#xff1a;字符计数法&#xff0c;比特填充法&#xff0c;违规编码 3. 差错检测 &#xff08;1…

OpenAI API Error: Resource not found - Text Summarization in NodeJS

题意&#xff1a;OpenAI API 错误&#xff1a;资源未找到 - NodeJS 中的文本摘要 问题背景&#xff1a; Here is the text summarization function. I have valid azure openai API, endpoint through a valid subscription and I have mentioned them in the .env file corre…