汇丰xxx

news2025/4/18 1:55:17

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 {
          @Bean
          public 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;
          }
      }
      
  • 总结: 可以通过排除默认的数据源自动配置、不提供数据源相关的依赖、使用条件化配置或自定义数据源配置来处理不想要默认数据库的情况。

 

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

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

相关文章

小型园区网实验

划分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 主机。输…

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 …

$_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)

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

sql-labs靶场 less-2

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

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;看的懂就看吧

优选算法第八讲:链表

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

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 将…

2025 年河北交安安全员考试:巧用行业报告丰富知识储备​

河北交通行业发展迅速&#xff0c;各类行业报告蕴含大量有价值信息。考生可从河北省交通运输行业发展报告、安全专项检查报告等资料入手。在行业发展报告中&#xff0c;了解本省交通建设规模、重点项目规划等内容&#xff0c;这些信息与交安安全员工作紧密相关。比如&#xff0…

​2025快递业绿色包装创新发展论坛(上海)将于9月3日举办

​2025快递业绿色包装创新发展论坛&#xff08;上海&#xff09;将于9月3日举办 为进一步推进快递包装标准化、循环化、减量化、无害化转型&#xff0c;促进邮政快递业绿色低碳发展&#xff0c;在“2025 快递物流新质生产力发展论坛暨 2025 长三角国际快递物流供应链与智能装备…

stm32+esp8266+机智云手机app

现在很多大学嵌入式毕设都要求云端控制&#xff0c;本文章就教一下大家如何使用esp8266去连接机智云的app去进行显示stm32的外设传感器数据啊&#xff0c;控制一些外设啊等。 因为本文章主要教大家如何移植机智云的代码到自己的工程&#xff0c;所以前面的一些准备工作&#x…