当前位置: 首页 > article >正文

汇丰xxx

1. Spring Boot 的了解,解决什么问题?

  • 我的理解: Spring Boot 是一个基于 Spring 框架的快速开发脚手架,它简化了 Spring 应用的初始搭建和开发过程。
  • 解决的问题:
    • 简化配置: 传统的 Spring 应用需要大量的 XML 配置,Spring Boot 通过约定大于配置的原则,提供了大量的默认配置,减少了手动配置的工作量。
    • 快速启动: Spring Boot 内嵌了常用的服务器(如 Tomcat、Jetty),可以直接运行,无需额外部署,大大缩短了开发周期。
    • 依赖管理: Spring Boot 提供了 Starter POMs,将常用的依赖打包在一起,方便管理依赖,避免版本冲突。
    • 监控和管理: Spring Boot Actuator 提供了对应用的监控和管理功能,如健康检查、指标收集等。
    • 易于部署: Spring Boot 可以打包成独立的 JAR 包或 WAR 包,方便部署到各种环境。
  • 总结: Spring Boot 提高了开发效率,降低了维护成本,使开发者可以更专注于业务逻辑的实现。

2. Spring Boot 的自动装配,为什么可以实现自动配置?

  • 核心机制: Spring Boot 的自动装配基于 Spring 的条件化配置和 EnableAutoConfiguration 注解。
  • 实现原理:
    • EnableAutoConfiguration 注解: 这是一个复合注解,包含了 @Configuration@EnableImport 和 @ComponentScan 等注解。
      • @Configuration:表明这是一个配置类。
      • @EnableImport:导入 AutoConfigurationImportSelector 类,该类负责扫描和加载自动配置类。
      • @ComponentScan:扫描当前应用中的组件。
    • AutoConfigurationImportSelector 类: 该类实现了 DeferredImportSelector 接口,负责延迟加载自动配置类。
      • selectImports() 方法: 该方法会扫描 META-INF/spring.factories 文件,该文件中定义了大量的自动配置类。
      • 条件化配置: Spring Boot 使用 @ConditionalOnClass@ConditionalOnBean 等条件化注解,根据当前环境中的类、Bean 等条件,决定是否加载某个自动配置类。
  • 总结: EnableAutoConfiguration 注解触发自动配置的扫描和加载,条件化注解决定是否应用某个自动配置,最终实现自动配置。

3. Spring Boot 怎么做到自动配置,加了 EnableAutoConfiguration 怎样扫描的?

  • 详细流程:
    1. @SpringBootApplication 注解: 通常在 Spring Boot 应用的启动类上使用,它包含了 @EnableAutoConfiguration 注解。
    2. EnableAutoConfiguration 注解: 触发 AutoConfigurationImportSelector 类的执行。
    3. AutoConfigurationImportSelector 类:
      • selectImports() 方法: 从 META-INF/spring.factories 文件中读取自动配置类的全限定名。
      • SpringFactoriesLoader.loadFactoryNames() 方法: 负责加载 spring.factories 文件中的配置。
      • 条件判断: 根据 @ConditionalOnClass@ConditionalOnBean 等条件化注解,判断是否需要加载某个自动配置类。
      • 实例化 Bean: 如果满足条件,则将自动配置类实例化成 Bean,并添加到 Spring 容器中。
  • 总结: EnableAutoConfiguration 注解通过 AutoConfigurationImportSelector 类扫描 spring.factories 文件,并根据条件化注解加载自动配置类,最终实现自动配置。

4. 如果我想对 Spring Boot 有一些默认的配置,如何修改这些配置?

  • 方法一:使用 application.properties 或 application.yml 文件:
    • 这是最常用的方法,可以在 src/main/resources 目录下创建 application.properties 或 application.yml 文件,覆盖 Spring Boot 的默认配置。
    • 示例:
      • application.properties
        server.port=8081
        spring.datasource.url=jdbc:mysql://localhost:3306/mydb
        
      • application.yml
        server:port: 8081
        spring:datasource:url: jdbc:mysql://localhost:3306/mydb
        
  • 方法二:使用命令行参数:
    • 可以在启动应用时,通过命令行参数覆盖默认配置。
    • 示例:
      java -jar myapp.jar --server.port=8082 --spring.datasource.url=jdbc:mysql://localhost:3306/mydb
      
  • 方法三:使用环境变量:
    • 可以通过设置环境变量覆盖默认配置。
    • 示例:
      export SERVER_PORT=8083
      export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
      java -jar myapp.jar
      
  • 方法四:编写自定义配置类:
    • 可以编写自定义的配置类,使用 @Configuration 注解,并使用 @PropertySource 注解加载自定义的配置文件。
    • 示例:
      @Configuration
      @PropertySource("classpath:myconfig.properties")
      public class MyConfig {@Value("${my.property}")private String myProperty;
      }
      
  • 总结: 可以通过 application.properties 或 application.yml 文件、命令行参数、环境变量或自定义配置类来修改 Spring Boot 的默认配置。

5. 那如果不想要默认的数据库,应该如何处理呢?

  • 方法一:排除默认的数据源自动配置:
    • 在启动类上使用 @SpringBootApplication 注解的 exclude 属性,排除默认的数据源自动配置类。
    • 示例:
      @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
      public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
      }
      
  • 方法二:不提供数据源相关的依赖:
    • 如果项目中没有引入任何数据源相关的依赖(如 spring-boot-starter-jdbcspring-boot-starter-data-jpa),Spring Boot 就不会自动配置数据源。
  • 方法三:使用条件化配置:
    • 可以使用 @ConditionalOnClass 或 @ConditionalOnBean 等条件化注解,根据当前环境中的类或 Bean 来决定是否配置数据源。
    • 示例:
      @Configuration
      @ConditionalOnMissingBean(DataSource.class)
      public class NoDataSourceConfig {// 不配置数据源
      }
      
  • 方法四:自定义数据源配置:
    • 如果需要使用自定义的数据源,可以编写自定义的配置类,并使用 @Configuration 和 @Bean 注解来配置数据源。
    • 示例:
      @Configuration
      public class MyDataSourceConfig {@Beanpublic DataSource myDataSource() {// 配置自定义的数据源DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");dataSource.setUsername("root");dataSource.setPassword("password");return dataSource;}
      }
      
  • 总结: 可以通过排除默认的数据源自动配置、不提供数据源相关的依赖、使用条件化配置或自定义数据源配置来处理不想要默认数据库的情况。

 

相关文章:

汇丰xxx

1. Spring Boot 的了解,解决什么问题? 我的理解: Spring Boot 是一个基于 Spring 框架的快速开发脚手架,它简化了 Spring 应用的初始搭建和开发过程。解决的问题: 简化配置: 传统的 Spring 应用需要大量的…...

Spring MVC与Spring Boot文件上传配置项对比

Spring MVC与Spring Boot文件上传配置项对比 一、Spring MVC配置项(基于不同MultipartResolver实现) 1. 使用 CommonsMultipartResolver(Apache Commons FileUpload) Bean public MultipartResolver multipartResolver() {Common…...

小型园区网实验

划分VLAN SW3 [sw3]vlan batch 2 3 20 30 [sw3]interface GigabitEthernet 0/0/1 [sw3-GigabitEthernet0/0/1]port link-type access [sw3-GigabitEthernet0/0/1]port default vlan 2 [sw3-GigabitEthernet0/0/1]int g0/0/2 [sw3-GigabitEthernet0/0/2]port link-type acces…...

c# 数据结构 链表篇 有关单链表的一切

本人能力有限,本文仅作学习交流与参考,如有不足还请斧正 目录 0.单链表好处 0.5.单链表分类 1.无虚拟头节点情况 图示: 代码: 头插/尾插 删除 搜索 遍历全部 测试代码: 全部代码 2.有尾指针情况 尾插 全部代码 3.有虚拟头节点情况 全部代码 4.循环单链表 几个…...

VS Code连接服务器编写Python文件

1、下载 Visual Studio Code 2、打开扩展(ctrl shift x ) 3、搜索 Remote - SSH,安装 4、F1 或者 点金左下角 5、选择:Remote-SSH: Connect to Host……,回车 6、第一次用的时候,VS Code 会提示添加 SSH 主机。输…...

图解AUTOSAR_SWS_FlexRayNetworkManagement

FlexRay网络管理详解 AUTOSAR标准FlexRay网络管理模块技术说明 目录 1. FlexRay网络管理概述 1.1 模块功能与目的1.2 适用范围与限制2. FlexRay网络管理架构 2.1 模块层次结构2.2 组件交互关系3. FlexRay网络管理状态机 3.1 状态转换机制3.2 主要状态说明4. FlexRay网络管理通信…...

Gitea的安装和配置以及应用

Gitea的安装和配置以及应用 一、安装 1、创建数据库和数据库账户(pg) su – postgres -c "psql" CREATE ROLE gitea WITH LOGIN PASSWORD gitea; CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE …...

Blender 转 STL 文件全攻略:从基础到进阶

在 3D 建模与打印领域,Blender 凭借其强大的功能和开源特性,深受创作者喜爱。而 STL 文件格式,作为 3D 打印行业的通用标准,能被绝大多数 3D 打印软件和设备所识别。因此,将 Blender 模型转换为 STL 文件,是…...

UI自动化基础(1)

1、pip install selenium4.3.0,最好指定版本安装,因为不同的版本可能会有一些兼容 性的问题。 2、pip uninstall urllib3 ,pip install urllib31.26.15 【执行版本安装】,goole是114.版本 3、装好浏览器,正确安装。最好…...

$_GET变量

$_GET 是一个超级全局变量,在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组,包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…...

TBE(TVM的扩展)

算子 张量 一个张量只有一种数据类型 在内存中只能线性存储,最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式:DSL TBE的第二种开发方式:TVM TBE的第…...

【Function Calling与Tool Calling】深度解析大模型智能中枢的架构革命

目录 一、范式转移:从对话引擎到智能中枢 二、核心技术解析 2.1 Function Calling技术栈 2.2 Tool Calling实现模式 三、企业级应用架构设计 3.1 智能工单系统案例 3.2 性能优化策略 四、安全与治理框架 4.1 权限控制矩阵 4.2 审计追踪设计 五、开发者实…...

知识表示方法之六:过程表示法(Procedural Representation)

在人工智能的发展史中,关于知识的表示方法曾存在两种不同的观点。一种观点认为知识主要是陈述性的,其表示方法应着重将其静态特性,即事物的属性以及事物间的关系表示出来,称以这种观点表示知识的方法为陈述式或说明式表示法&#…...

Java 中序列化和反序列化

Java 中的序列化(Serialization)和反序列化(Deserialization)是将对象和二进制数据(或其他格式)之间转换的过程,常见于对象传输、缓存、持久化等场景。 下面是 Java 中常见的几种 序列化/反序列…...

sql-labs靶场 less-2

文章目录 sqli-labs靶场less 2 联合注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”&#xf…...

Spring配置部分

Spring配置部分 单纯的使用Spring可以通过配置文件xml,配置注解,全注解方式执行 无论使用哪种方式,都需要在Main方法中加载配置(配置文件或者注解)获取到Spring容器,在通过容器的GetBean方法获取Bean对象…...

git clone(复制)下载

1、复制 下载地址 2、打开网页,点击 克隆/下载按扭 3、按提示复制命令行到终端 4、VS里打开终端,并粘贴以下命令 5、 下载完毕 6、复制文件夹到你选定的位置 7、用VSCODE打开文件夹,开始你接下来的工作...

Android设置adjustResize时无法生效 解决办法

删除Activity类下执行全屏的一行参数。 将图中这段Activity类中执行命令给删除就解决了。 注意关闭后状态栏和导航栏的透明度就无法自动处理了&#xff0c;需要到values和values-night下的themes.xml手动设置状态栏背景颜色。 <item name"android:statusBarColor"…...

按键长按代码

这些代码都存放在定时器中断中。中断为100ms中断一次。 数据判断&#xff0c;看的懂就看吧...

Idea将Java工程打包成war包并发布

1、问题概述? 项目开发之后,我们需要将Java工程打包成war后缀,并进行发布。之前在网上看到很多的文章,但是都不齐全,今天将提供一个完整的实现打包war工程,并发布的文章,希望对大家有所帮助,主要解决如下问题: 1、war工程需要满足的相关配置 2、如何解决项目中的JDK…...

SGLang实战问题全解析:从分布式部署到性能调优的深度指南

引言&#xff1a;当高性能推理遇上复杂生产环境 在大型语言模型(LLM)的生产部署中&#xff0c;SGLang以其革命性的RadixAttention和结构化编程能力&#xff0c;正成为越来越多企业的首选推理引擎。然而&#xff0c;当我们将32B/70B级别的大模型部署到实际生产环境时&#xff0…...

优选算法第八讲:链表

优选算法第八讲&#xff1a;链表 1.链表常用操作和技巧总结2.两数相加3.两两交换链表中的节点4.重排链表5.合并k个升序链表6.k个一组翻转链表 1.链表常用操作和技巧总结 2.两数相加 3.两两交换链表中的节点 4.重排链表 5.合并k个升序链表 6.k个一组翻转链表...

Python语言的需求分析

Python语言的需求分析 引言 在信息技术快速发展的今天&#xff0c;编程语言的选择对于软件开发的成功与否起着至关重要的作用。Python作为一种高级编程语言&#xff0c;以其简洁易读的语法和强大的功能受到越来越多开发者的青睐。通过对Python语言的需求分析&#xff0c;我们…...

vue项目本地调试使用https

由于测试环境远程接口&#xff0c;是采用https协议&#xff0c;为了能正常携带cookie访问接口&#xff0c;需要把本地项目也采用https协议访问。前提是后端的cookie设置在二级域名下&#xff0c;且允许固定其他子域名跨域访问&#xff08;需要在后端设置&#xff09; 项目框架…...

4S店汽车维修保养管理系统 (源码+lw+部署文档+讲解),源码可白嫖!

摘要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式已经与当今4S店汽车维修保养管理系统的业务需求不相适应,也与4S店汽车维修保养管理系统化建设的发展趋势不相适应。本文针对这一需求设计并实现了…...

【NLP 面经 8】

目录 一、文本生成任务 模型架构方面 训练数据方面 生成策略方面 二、命名实体识别任务NER 模型架构方面 特征工程方面 训练优化方面 三、情感分析任务 模型架构方面 训练数据方面 超参数调整方面 四、计算余弦相似度并添加符合条件结果 提示&#xff1a; 思路与算法 任由深渊的…...

UE5学习笔记 FPS游戏制作43 UI材质

文章目录 实现目标制作UI材质使用UI材质 实现目标 把图片变为灰色 制作UI材质 右键新建一个材质 左侧细节栏&#xff0c;材质域改为用户界面&#xff0c;混合模式改为半透明 此时输出节点应该有两个属性 在内容浏览器里找到要用的图片&#xff0c;然后向上拖动到材质标题…...

12、主频和时钟配置实验

一、I.MX6U 时钟系统详解 1、系统时钟来源 开发板的系统时钟来源于两部分: 32.768KHz 和24MHz 的晶振,其中 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源, 24MHz 晶振是 I.MX6U 内核和其它外设的时钟源。 2、7路PLL时钟源 I.MX6U 的外设有很多,不同的外设时钟源不同, NXP 将…...

网络安全小知识课堂(十一)

数据加密&#xff1a;明文传输为什么极度危险&#xff1f; 引言 当你在咖啡店连上公共 WiFi&#xff0c;悠闲地浏览网页时&#xff0c;是否想过黑客可能正在 “偷看” 你的一举一动&#xff1f;如果网站未启用加密&#xff0c;你输入的账号密码、聊天记录&#xff0c;甚至支付…...

Redis 与 MongoDB 对比分析

Redis 与 MongoDB 对比分析 1. 核心定位 Redis&#xff1a;内存键值数据库&#xff0c;侧重高性能读写和低延迟&#xff0c;常用于缓存、实时分析、消息队列等场景。MongoDB&#xff1a;分布式文档型数据库&#xff0c;侧重灵活的数据模型和大规模数据存储&#xff0c;支持复…...