SpringBoot 开发入门—Springboot基础框架汇总

一、环境准备

Java:Spring Boot 3.0.2 需要 Java 17,并且与 Java 19 兼容

Maven:Apache Maven 3.5 或更高版本兼容

二、启动器

以下应用程序启动器由 Spring Boot 在该组下提供:org.springframework.boot

表 1.Spring 引导应用程序启动器

名字

描述

spring-boot-starter

核心启动器,包括自动配置支持、日志记录和 YAML

spring-boot-starter-amqp

使用Spring AMQP和Rabbit MQ的入门

spring-boot-starter-aop

使用Spring AOP和AspectJ进行面向方面的编程的入门器

spring-boot-starter-artemis

使用 Apache Artemis 的 JMS 消息传递入门

spring-boot-starter-batch

使用弹簧批处理的启动器

spring-boot-starter-cache

使用 Spring 框架缓存支持的入门工具

spring-boot-starter-data-cassandra

使用 Cassandra 分布式数据库和 Spring Data Cassandra 的入门

spring-boot-starter-data-cassandra-reactive

使用 Cassandra 分布式数据库和 Spring Data Cassandra Reactive 的入门

spring-boot-starter-data-couchbase

使用Couchbase面向文档的数据库和Spring Data Couchbase的入门

spring-boot-starter-data-couchbase-reactive

用于使用 Couchbase 面向文档的数据库和 Spring Data Couchbase Reactive 的入门

spring-boot-starter-data-elasticsearch

使用Elasticsearch搜索和分析引擎以及Spring Data Elasticsearch的入门工具

spring-boot-starter-data-jdbc

使用Spring Data JDBC的入门器

spring-boot-starter-data-jpa

将 Spring Data JPA 与 Hibernate 一起使用的入门程序

spring-boot-starter-data-ldap

使用Spring Data LDAP的入门

spring-boot-starter-data-mongodb

使用MongoDB面向文档的数据库和Spring Data MongoDB的入门

spring-boot-starter-data-mongodb-reactive

使用MongoDB面向文档的数据库和Spring Data MongoDB反应式的入门

spring-boot-starter-data-neo4j

使用 Neo4j 图形数据库和 Spring Data Neo4j 的入门

spring-boot-starter-data-r2dbc

使用弹簧数据R2DBC的入门器

spring-boot-starter-data-redis

将 Redis 键值数据存储与 Spring Data Redis 和 Lettuce 客户端一起使用的入门

spring-boot-starter-data-redis-reactive

将 Redis 键值数据存储与 Spring Data Redis 反应式和生菜客户端一起使用的入门

spring-boot-starter-data-rest

使用Spring Data REST通过REST公开Spring Data Repository的入门程序

spring-boot-starter-freemarker

使用 FreeMarker 视图构建 MVC Web 应用程序的入门器

spring-boot-starter-graphql

使用 Spring GraphQL 构建 GraphQL 应用程序的入门器

spring-boot-starter-groovy-templates

使用 Groovy 模板视图构建 MVC Web 应用程序的入门工具

spring-boot-starter-hateoas

使用Spring MVC和Spring HATEOAS构建基于超媒体的RESTful Web应用程序的入门

spring-boot-starter-integration

使用弹簧集成的启动器

spring-boot-starter-jdbc

将 JDBC 与 HikariCP 连接池一起使用的入门

spring-boot-starter-jersey

使用 JAX-RS 和 Jersey 构建 RESTful Web 应用程序的入门工具。弹簧启动启动网的替代方案

spring-boot-starter-jooq

使用 jOOQ 通过 JDBC 访问 SQL 数据库的入门工具。spring-boot-starter-data-jpaspring-boot-starter-jdbc 的替代方案

spring-boot-starter-json

用于读取和写入 json 的入门器

spring-boot-starter-mail

使用Java Mail和Spring Framework的电子邮件发送支持的入门

spring-boot-starter-mustache

使用 Mustache 视图构建 Web 应用程序的入门器

spring-boot-starter-oauth2-client

使用Spring Security的OAuth2 / OpenID Connect客户端功能的入门

spring-boot-starter-oauth2-resource-server

使用Spring Security的OAuth2资源服务器功能的入门

spring-boot-starter-quartz

使用石英调度程序的入门器

spring-boot-starter-rsocket

用于构建 RSocket 客户端和服务器的入门器

spring-boot-starter-security

使用弹簧安全性的入门

spring-boot-starter-test

用于测试Spring Boot应用程序的入门器,包括JUnit Jupiter,Hamcrest和Mockito等库

spring-boot-starter-thymeleaf

使用 Thymeleaf 视图构建 MVC Web 应用程序的入门器

spring-boot-starter-validation

将 Java Bean Validation 与 Hibernate Validator 结合使用的入门程序

spring-boot-starter-web

用于构建Web的入门工具,包括使用Spring MVC构建Web(包括RESTful)的应用程序。使用 Tomcat 作为默认的嵌入式容器

spring-boot-starter-web-services

使用 Spring Web 服务的入门器

spring-boot-starter-webflux

使用 Spring Framework 的响应式 Web 支持构建 WebFlux 应用程序的入门工具

spring-boot-starter-websocket

使用Spring Framework的MVC WebSocket支持构建WebSocket应用程序的入门工具

除了应用程序启动器之外,以下启动器还可用于添加生产就绪功能:

表 2.Springboot启动器

名字

描述

spring-boot-starter-actuator

使用Spring Boot执行器的入门,该执行器提供生产就绪功能,可帮助您监视和管理应用程序

最后,Spring Boot 还包括以下启动器,如果要排除或交换特定的技术方面,可以使用它们:

表 3.Springboot技术启动器

名字

描述

spring-boot-starter-jetty

使用 Jetty 作为嵌入式 servlet 容器的入门工具。弹簧启动启动器-雄猫的替代品

spring-boot-starter-log4j2

使用 Log4j2 进行日志记录的入门程序。弹簧引导启动日志记录的替代方案

spring-boot-starter-logging

使用回日志进行日志记录的启动器。默认日志记录启动器

spring-boot-starter-reactor-netty

使用 Reactor Netty 作为嵌入式反应式 HTTP 服务器的入门程序。

spring-boot-starter-tomcat

使用 Tomcat 作为嵌入式 servlet 容器的入门工具。spring-boot-starter-web 使用的默认 servlet 容器启动器

spring-boot-starter-undertow

使用 Undertow 作为嵌入式 servlet 容器的入门工具。弹簧启动启动器-雄猫的替代品

要了解如何交换技术方面,请参阅交换 Web 服务器日志记录系统的操作文档。

三、配置类

Spring Boot 倾向于基于 Java 的配置。 尽管SpringApplication 可以与 XML 源一起使用,但我们通常建议将主源设置为单个类@Configuration。 通常,用@Configuration定义一个有main方法的类。

3.1. 导入其他配置类

当你不需要把所有的东西都放在一个Class里时。 @Import注释可用于导入其他配置类。或者,您可以使用@ComponentScan 自动加载所有 Spring 组件,包括类。


@Import({ 类名.class , 类名.class... })
public class Appcalss {}

3.2自动配置

Spring Boot的自动装配机制会试图根据你所添加的依赖来自动配置你的Spring应用程序。 例如,如果你添加了 HSQLDB 依赖,而且你没有手动配置任何DataSource Bean,那么Spring Boot就会自动配置内存数据库。

你需要将 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到你的 @Configuration 类中,从而开启自动配置功能。

@EnableAutoConfiguration:启用Spring Boot的自动配置机制,类似在java代码中自动import,属于自动导入


@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ SomeConfiguration.class, AnotherConfiguration.class })
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}

禁用特定的自动配置类

如果发现正在应用不需要的特定自动配置类,则可以使用 的 exclude 属性来禁用它们,如以下示例所示:@SpringBootApplication


@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {}

四、Spring Bean 和 依赖注入

你可以使用任何标准的Spring技术来定义你的Bean以及依赖注入关系。 推荐使用构造函数注入,并使用 @ComponentScan 注解来扫描Bean。

如果你按照上面的建议构造你的代码(将你的启动类定位在顶级包中),你可以在启动类添加 @ComponentScan 注解,也不需要定义它任何参数, 你的所有应用组件(@Component、@Service、@Repository、@Controller 和其他)都会自动注册为Spring Bean。

也可以直接使用 @SpringBootApplication 注解(该注解已经包含了 @ComponentScan)。

下面的例子展示了一个 @Service Bean,它使用构造器注入的方式注入了 RiskAssessor Bean。

五、使用@SpringBootApplication注释

许多 Spring Boot 开发人员喜欢他们的应用程序使用自动配置、组件扫描并能够在他们的“应用程序类”上定义额外的配置。 单个注释可用于启用这三个功能,即:@SpringBootApplication

  • @EnableAutoConfiguration:启用 Spring 启动的自动配置机制

  • @ComponentScan:在应用程序所在的包上启用扫描(请参阅最佳实践)@Component)

  • @SpringBootConfiguration:在上下文中启用额外 Bean 的注册或导入其他配置类。 Spring 标准的替代方案,可帮助在集成测试中进行配置检测


// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}

六、开发一个 SpringBoot应用程序

在开始之前,请打开终端并运行以下命令以确保已安装有效版本的 Java 和 Maven:


$ java -version
openjdk version "17.0.4.1" 2022-08-12 LTS
OpenJDK Runtime Environment (build 17.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM (build 17.0.4.1+1-LTS, mixed mode, sharing)

 mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: usr/Users/developer/tools/maven/3.8.5
Java version: 17.0.4.1, vendor: BellSoft, runtime: /Users/developer/sdkman/candidates/java/17.0.4.1-librca

1、创建 POM

我们需要从创建一个 Maven 文件开始。


<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>myproject</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.2</version></parent><!-- Additional lines to be added here... --></project>

2、添加类路径依赖

在此之前,我们可以通过运行以下命令来查看我们当前拥有的内容:spring-boot-starter-web

$ mvn dependency:tree[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

由于我们正在开发一个 Web 应用程序,因此我们添加一个依赖项


<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

3、编写代码

为了完成我们的应用程序,我们需要创建一个 Java 文件。 默认情况下,Maven 从 编译源代码,因此您需要创建该目录结构,然后添加一个名为以包含以下代码的文件:src/main/javasrc/main/java/MyApplication.java

@RestController
@SpringBootApplication
public class MyApplication {@RequestMapping("/")String home() {return "Hello World!";}public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}}

@RestController:相当于@ResponseBody + @Controller,@Controller注解表示后,该类将会被spring管理,@ResponseBody注解标识后,响应数据可以是文本或者JSON数据类型

@RequestMapping:是一个用来处理请求地址映射的注解,可用于映射一个请求或一个方法,可以用在类或方法上。

七、Tracing

Spring Boot 提供依赖管理和自动配置Micrometer Tracing,这是常用信息监控库 。

Spring Boot 为以下跟踪器提供自动配置:

  • 使用ZipkinWavefrontOpenTelemetry

  • OpenZipkin Brave with Zipkin or Wavefront

我们需要一个可用于开始跟踪的示例应用程序。 就我们的目的而言,“入门.html部分中介绍的简单”Hello World!“Web 应用程序就足够了。 我们将使用OpenTelemetry跟踪器与Zipkin作为跟踪后端。

回顾一下,我们的主要应用程序代码如下所示:


@RestController
@SpringBootApplication
public class MyApplication{privatestaticfinal Log logger = LogFactory.getLog(MyApplication.class);@RequestMapping("/")String home(){logger.info("home() has been called");return"Hello World!";}public static void main(String[] args){SpringApplication.run(MyApplication.class, args);}}
该方法中添加了一个记录器语句,稍后会很重要。home()

现在我们必须添加以下依赖项:

  • org.springframework.boot:spring-boot-starter-actuator

  • io.micrometer:micrometer-tracing-bridge-otel- 这是将千分尺观测 API 桥接到开放遥测所必需的。

  • io.opentelemetry:opentelemetry-exporter-zipkin- 需要向 Zipkin 报告痕迹

添加以下应用程序属性:


management.tracing.sampling.probability=1.0

默认情况下,Spring Boot 仅对 10% 的请求进行采样,以防止跟踪后端不堪重负。 此属性将其切换为 100%,以便将每个请求发送到跟踪后端。

为了收集和可视化跟踪,我们需要一个正在运行的跟踪后端。 我们在这里使用 Zipkin 作为我们的跟踪后端。 Zipkin 快速入门指南提供了如何在本地启动 Zipkin 的说明。

Zipkin 运行后,您可以启动应用程序。

八、日志记录

Spring Boot 没有强制性的日志记录依赖项,除了通常由 Spring Framework 模块提供的 Commons Logging API。 要使用 Logback,您需要将其包含在类路径中。 推荐的方法是通过启动器,这完全取决于 . 对于 Web 应用程序,您只需要 ,因为它以传递方式依赖于日志记录启动器。 如果使用 Maven,则以下依赖项会为您添加日志记录:


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

Spring Boot 有一个抽象,它试图根据类路径的内容配置日志记录。 如果 Logback 可用,则它是首选。LoggingSystem

如果需要对日志记录进行的唯一更改是设置各种记录器的级别,则可以使用“logging.level”前缀执行此操作,如以下示例所示:application.properties


logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

除了控制台之外,您还可以使用 设置要将日志写入的文件的位置。要配置日志记录系统的更细粒度设置,您需要使用相关支持的本机配置格式。 默认情况下,Spring 引导从系统的默认位置(例如 Logback)选取本机配置,但您可以使用该属性设置配置文件的位置。

1、为日志记录配置回日志

如果需要将自定义应用于 logback,而不是可以使用 实现的自定义项,则需要添加标准 logback 配置文件。 您可以将文件添加到类路径的根目录中,以便进行回查

Spring 引导提供了许多登录配置,这些配置可以在您自己的配置中。 这些包括旨在允许重新应用某些常见的 Spring 引导约定。included

以下文件在 下提供:org/springframework/boot/logging/logback/

  • defaults.xml- 提供转换规则、模式属性和常用记录器配置。

  • console-appender.xml- 使用 .ConsoleAppenderCONSOLE_LOG_PATTERN

  • file-appender.xml- 使用适当的设置添加 和。RollingFileAppenderFILE_LOG_PATTERNROLLING_FILE_NAME_PATTERN

此外,还提供了旧文件以与早期版本的 Spring Boot 兼容。base.xml

典型的自定义文件如下所示:logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><include resource="org/springframework/boot/logging/logback/console-appender.xml" /><root level="INFO"><appender-ref ref="CONSOLE" /></root><logger name="org.springframework.web" level="DEBUG"/>
</configuration>

您的登录配置文件还可以利用负责为您创建的系统属性:

  • ${PID}:当前进程 ID。

  • ${LOG_FILE}:是否在引导的外部配置中设置。logging.file.name

  • ${LOG_PATH}:是否在 Boot 的外部配置中设置了(表示日志文件所在的目录)。logging.file.path

  • ${LOG_EXCEPTION_CONVERSION_WORD}:是否在引导的外部配置中设置。logging.exception-conversion-word

  • ${ROLLING_FILE_NAME_PATTERN}:是否在引导的外部配置中设置。logging.pattern.rolling-file-name

Spring Boot 还通过使用自定义 Logback 转换器在控制台上(但不在日志文件中)提供了一些不错的 ANSI 颜色终端输出

2、配置 log4j 用于日志记录

Spring Boot 支持 Log4j 2 进行日志记录配置,如果它位于类路径上。 如果使用启动器来组装依赖项,则必须排除 Logback,然后改为包含 Log4j 2。 如果您不使用启动器,除了 Log4j 2 之外,您还需要(至少)提供。

推荐的路径是通过启动器,即使它需要一些摇晃。 以下示例显示了如何在 Maven 中设置启动器:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

九、配置 SSL

可以通过设置各种属性(通常在 或 中)以声明方式配置 SSL。 以下示例显示如何使用 Java 密钥库文件设置 SSL 属性:server.ssl.*


server.port=8443
server.ssl.key-store=classpath:keystore.jks
server.ssl.key-store-password=secret
server.ssl.key-password=another-secret

十、Lazy Initialization

SpringApplication允许应用程序被懒初始化。 当启用懒初始化时,Bean在需要时被创建,而不是在应用程序启动时。 因此,懒初始化可以减少应用程序的启动时间。 在一个Web应用程序中,启用懒初始化后将导致许多与Web相关的Bean在收到HTTP请求之后才会进行初始化。

懒初始化的一个缺点是它会延迟发现应用程序的问题。 如果一个配置错误的Bean被懒初始化了,那么在启动过程中就不会再出现故障,问题只有在Bean被初始化时才会显现出来。 还必须注意确保JVM有足够的内存来容纳应用程序的所有Bean,而不仅仅是那些在启动期间被初始化的Bean。 由于这些原因,默认情况下不启用懒初始化,建议在启用懒初始化之前,对JVM的堆大小进行微调。


spring.main.lazy-initialization=true
如果你想禁用某些Bean的懒初始化,同时对应用程序的其他部分使用懒初始化,你可以使用 注解将其'Lazy' 属性显式地设置为 false。@Lazy(false)

十一、优雅停机

所有四个嵌入式Web服务器(Jetty、Reactor Netty、Tomcat和Undertow)以及基于响应式和Servlet的Web应用都支持优雅关闭。 它作为关闭应用程序上下文的一部分发生,并在停止 SmartLifecycle bean的最早阶段执行。 这种停止处理使用一个超时,提供一个宽限期,在此期间,现有的请求将被允许完成,但不允许有新的请求。 不允许新请求的确切方式取决于正在使用的网络服务器。 Jetty、Reactor Netty和Tomcat将在网络层停止接受请求。 Undertow将接受请求,但立即响应服务不可用(503)的回应。


server:shutdown: "graceful"

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

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

相关文章

前端批量导入方式

webpack批量导入 webpack中使用 require.context 实现自动导入 const files require.context(./modules, false, /\.ts$/); const modules {}; files.keys().forEach((key) > {if (key ./index.ts) { return; }modules[key.replace(/(\.\/|\.ts)/g, )] files(key).def…

阿里巴巴1688类网站高保真原型设计

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>1688类B2B平台原型</title><script src…

C++设计模式-装饰模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、装饰模式基本介绍 装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;允许你在不改变对象自身的基础上&#xff0c;动态地给一个对象添加额外的职责。这种模式创建了一个装饰类&#xff0c;用来包装原有的类&#xff0c;并在保持类方法签…

2、学习Docker前置操作

docker三件套&#xff1a;镜像、容器、仓库 Docker hubhub.docker.com ubuntu安装【待更新】 CentOS安装 CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 (64-bit)上&#xff0c;要求系统为 64 位、Linux 系统内核版本为 3.8 以上&#xff0c;这里选用 Cen…

70. Linux驱动开发与裸机开发区别,字符设备驱动开发

一、裸机驱动开发回顾 1、底层&#xff0c;跟寄存器打交道&#xff0c;有些MCU提供了库。 二、Linux驱动开发思维 1、Linux下驱动开发直接操作寄存器不现实。 2、根据Linux下的各种驱动框架进行开发。一定要满足框架&#xff0c;也就是Linux下各种驱动框架的掌握。 3、驱动最…

【JavaScript 简明入门教程】为了Screeps服务的纯JS入门教程

0 前言 0-1 Screeps: World 众所不周知&#xff0c;​Screeps: World是一款面向编程爱好者的开源大型多人在线即时战略&#xff08;MMORTS&#xff09;沙盒游戏&#xff0c;其核心机制是通过编写JavaScript代码来控制游戏中的单位&#xff08;称为“Creep”&#xff09;&#…

第12章:优化并发_《C++性能优化指南》notes

优化并发 一、并发基础与优化核心知识点二、关键代码示例与测试三、关键优化策略总结四、性能测试方法论多选题设计题答案与详解多选题答案&#xff1a; 设计题答案示例 一、并发基础与优化核心知识点 线程 vs 异步任务 核心区别&#xff1a;std::thread直接管理线程&#xf…

[C++面试] RAII资源获取即初始化(重点)

一、入门 1、什么是 RAII&#xff1f; RAII&#xff08;Resource Acquisition Is Initialization&#xff0c;资源获取即初始化&#xff09;是 C 的核心编程范式&#xff0c;核心思想是 ​将资源的生命周期与对象的生命周期绑定&#xff1a; ​资源获取&#xff1a;在对象构造…

Unity粒子系统

目录 一、界面参数介绍1.主模块2.Emission 模块3.Shape 模块4.Velocity over Lifetime 模块5.Noise 模块6.Limit Velocity Over Lifetime 模块7.Inherit Velocity 模块8.Force Over Lifetime 模块9.Color Over Lifetime 模块10.Color By Speed 模块11.Size over Lifetime 模块1…

Docker-清理容器空间prune

docker system prune -a 是一个非常有用的命令&#xff0c;用于清理 Docker 系统中未使用的资源&#xff0c;包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像&#xff08;悬空镜像和所有未使用的镜像&#xff09;。以下是关于该命令的详细说明&#xff1a; 命令格…

LabVIEW远程控制通讯接口

abVIEW提供了多种远程控制与通讯接口&#xff0c;适用于不同场景下的设备交互、数据传输和系统集成。这些接口涵盖从基础的网络协议&#xff08;如TCP/IP、UDP&#xff09;到专用技术&#xff08;如DataSocket、远程面板&#xff09;&#xff0c;以及工业标准协议&#xff08;如…

LeetCode hot 100—寻找重复数

题目 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums…

linux - centos7 部署 redis6.0.5

事先说明 本篇文章只解决在部署redis中出现的问题&#xff0c;并没有部署redis的全过程&#xff0c;详细部署过程可以参考Linux安装部署Redis(超级详细) - 长沙大鹏 - 博客园 执行 make 命令时报错 原因&#xff1a;是因为gcc版本太低 升级gcc版本时 出现没有可用软件包 devt…

31天Python入门——第15天:日志记录

你好&#xff0c;我是安然无虞。 文章目录 日志记录python的日志记录模块创建日志处理程序并配置输出格式将日志内容输出到控制台将日志写入到文件 logging更简单的一种使用方式 日志记录 日志记录是一种重要的应用程序开发和维护技术, 它用于记录应用程序运行时的关键信息和…

AI Agent开发大全第八课-Stable Diffusion 3的本地安装全步骤

前言 就像我们前面几课所述,本系列是一门体系化的教学,它不像网上很多个别存在的单篇博客走“吃快餐”模式,而是从扎实的基础来带领大家一步步迈向AI开发高手。所以我们的AI课程设置是相当全面的,除了有牢固的基础知识外还有外面互联网上也搜不到的生产级实战。 前面讲过…

用selenium+ChromeDriver豆瓣电影 肖申克的救赎 短评爬取(pycharm 爬虫)

一、豆瓣电影 肖申克的救赎 短评urlhttps://movie.douban.com/subject/1292052/comments 二、基本知识点讲解 1. Selenium 的基本使用 Selenium 是一个用于自动化浏览器操作的库&#xff0c;常用于网页测试和爬虫。代码中使用了以下 Selenium 的核心功能&#xff1a; webdriv…

开源在线客服系统源码-前端源码加载逻辑

客服源码是使用Golang(又称Go)开发的&#xff0c;Go是Google公司开发的一种静态强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的编程语言。Go 天生支持并发。好处太多就不多说了。 全源码客服系统用户&#xff0c;想要针对自己的业务&#xff0c;进行二次开发&#xf…

Oracle数据库服务器地址变更与监听配置修改完整指南

一、前言 在企业IT运维中&#xff0c;Oracle数据库服务器地址变更是常见的运维操作。本文将详细介绍如何安全、高效地完成Oracle数据库服务器地址变更及相关的监听配置修改工作&#xff0c;确保数据库服务在迁移后能够正常运行。 二、准备工作 1. 环境检查 确认新旧服务器I…

g对象在flask中主要是用来实现什么

在Flask中&#xff0c;g对象&#xff08;全称flask.g&#xff09;是一个线程局部&#xff08;thread-local&#xff09;的临时存储对象&#xff0c;主要用于在单个请求的上下文&#xff08;request context&#xff09;中共享数据。它的核心作用是为同一请求的不同处理阶段&…

工具介绍《WireShark》

Wireshark 过滤命令中符号含义详解 一、比较运算符 Wireshark 支持两种比较运算符语法&#xff1a;英文缩写&#xff08;如 eq&#xff09;和 C语言风格符号&#xff08;如 &#xff09;&#xff0c;两者功能等价。 符号&#xff08;英文缩写&#xff09;C语言风格符号含义示…