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

 

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

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

相关文章

基于 Spring Boot 瑞吉外卖系统开发(一)

基于 Spring Boot 瑞吉外卖系统开发(一) 系统概述 系统功能 技术选型 初始项目和数据准备 初始项目和SQL文件下载 创建数据库并导入数据 打开reggie项目 运行效果 主函数启动项目,访问URL: http://127.0.0.1:8080/backend/pag…

大型语言模型智能应用Coze、Dify、FastGPT、MaxKB 对比,选择合适自己的LLM工具

大型语言模型智能应用Coze、Dify、FastGPT、MaxKB 对比,选择合适自己的LLM工具 Coze、Dify、FastGPT 和 MaxKB 都是旨在帮助用户构建基于大型语言模型 (LLM) 的智能应用的平台。它们各自拥有独特的功能和侧重点,以下是对它们的简要对比: Coz…

【项目管理】第6章 信息管理概论 --知识点整理

项目管理 相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应&…

Zapier MCP:重塑跨应用自动化协作的技术实践

引言:数字化协作的痛点与突破 在当今多工具协同的工作环境中,开发者与办公人员常常面临数据孤岛、重复操作等效率瓶颈。Zapier推出的MCP(Model Context Protocol)协议通过标准化数据交互框架,为跨应用自动化提供了新的…

echart实现动态折线图(vue3+ts)

最近接到个任务,需要用vue3实现动态折线图。之前没有用过,所以一路坎坷,现在记录一下,以后也好回忆一下。 之前不清楚echart的绘制方式,以为是在第一秒的基础上绘制第二秒,后面实验过后,发现并…

Java学习——day24(反射进阶:注解与动态代理)

文章目录 1. 反射与注解2. 动态代理3. 实践:编写动态代理示例4. 注解定义与使用5. 动态代理6. 小结与思考 1. 反射与注解 注解:注解是 Java 提供的用于在代码中添加元数据的机制。它不会影响程序的执行,但可以在运行时通过反射获取和处理。反…

C++之nullptr

文章目录 前言 一、NULL 1、代码 2、结果 二、nullptr 1、代码 2、结果 总结 前言 当我们谈论空指针时,很难避免谈及nullptr。nullptr是C++11引入的一个关键字,用来表示空指针。在C++中,空指针一直是一个容易引起混淆的问题,因为在早期版本的C++中,通常使用NULL来…

JavaScript惰性加载优化实例

这是之前的一位朋友的酒桌之谈,他之前负责的一个电商项目,刚刚开发万,首页加载时间特别长,体验很差,所以就开始排查,发现是在首页一次性加载所有js导致的问题,这个问题在自己学习的时候并不明显…

苹果内购支付 Java 接口

支付流程&#xff0c;APP支付成功后 前端调用后端接口&#xff0c;后端接口将前端支付成功后拿到的凭据传给苹果服务器检查&#xff0c;如果接口返回成功了&#xff0c;就视为支付。 代码&#xff0c;productId就是苹果开发者后台提前设置好的 产品id public CommonResult<S…

数据库中的数组: MySQL与StarRocks的数组操作解析

在现代数据处理中, 数组 (Array) 作为一种高效存储和操作结构化数据的方式, 被广泛应用于日志分析, 用户行为统计, 标签系统等场景. 然而, 不同数据库对数组的支持差异显著. 本文将以MySQL和StarRocks为例, 深入解析它们的数组操作能力, 并对比其适用场景. 文章目录 一 为什么需…

LeetCode零钱兑换(动态规划)

题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无…

/sys/fs/cgroup/memory/memory.stat 关键指标说明

目录 1. **total_rss**2. **total_inactive_file**3. **total_active_file**4. **shmem**5. **其他相关指标**总结 以下是/sys/fs/cgroup/memory/memory.stat文件中一些关键指标的详细介绍&#xff0c;特别是与PostgreSQL相关的指标&#xff1a; 1. total_rss 定义&#xff1…

C++第14届蓝桥杯b组学习笔记

1. 日期统计 小蓝现在有一个长度为 100100 的数组&#xff0c;数组中的每个元素的值都在 00 到 99 的范围之内。数组中的元素从左至右如下所示&#xff1a; 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4…

[Effective C++]条款28:避免返回handles指向对象内部成分

. 在C中&#xff0c;返回指向对象内部成分的引用&#xff08;handles&#xff09;可能会导致封装性降低和对象空悬问题。为了避免這些问题&#xff0c;可以通过返回const引用来限制对内部数据的修改&#xff0c;从而确保只读访问 1、返回内部引用对象 下面代码中getData函数返…

PyTorch 学习笔记

环境&#xff1a;python3.8 PyTorch2.4.1cpu PyCharm 参考链接&#xff1a; 快速入门 — PyTorch 教程 2.6.0cu124 文档 PyTorch 文档 — PyTorch 2.4 文档 快速入门 导入库 import torch from torch import nn from torch.utils.data import DataLoader from torchvision …

windows开启wsl与轻量级虚拟机管理

基于win 10 打造K8S应用开发环境&#xff08;wsl & kind&#xff09; 一、wsl子系统安装 1.1 确认windows系统版本 cmd/powershell 或者win r 运行winver 操作系统要> 19044 1.2 开启wsl功能 控制面板 -> 程序 -> 启用或关闭Windows功能 开启适用于Linux的…

C++ -异常之除以 0 问题(整数除以 0 编译时检测、整数除以 0 运行时检测、浮点数除以 0 编译时检测、浮点数除以 0 运行时检测)

一、整数除以 0&#xff08;编译时检测&#xff09; 1、演示 #include <iostream>using namespace std;int main() {int result 10 / 0;cout << result << endl;return 0; }程序无法运行&#xff0c;输出结果 error C2124: 被零除或对零求模2、演示解读 …

【蓝桥杯】搜索算法:剪枝技巧+记忆化搜索

1. 可行性剪枝应用 1.1. 题目 题目描述: 给定一个正整数n和一个正整数目标值target,以及一个由不同正整数组成的数组nums。要求从nums中选出若干个数,每个数可以被选多次,使得这些数的和恰好等于target。问有多少种不同的组合方式? 输入: 第一行:n和target,表示数组…

Uniapp 集成极光推送(JPush)完整指南

文章目录 前言一、准备工作1. 注册极光开发者账号2. 创建应用3. Uniapp项目准备 二、集成极光推送插件方法一&#xff1a;使用UniPush&#xff08;推荐&#xff09;方法二&#xff1a;手动集成极光推送SDK 三、配置原生平台参数四、核心功能实现1. 获取RegistrationID2. 设置别…

Linux中进程

一、认识进程 进程(PCB)内核数据结构(task_struct)程序的代码和数据 每一个进程都有其独立的task_struct,OS对众多的task_struct进行管理&#xff0c;如何管理&#xff1f;先描述再组织&#xff0c;所有运⾏在系统⾥的进程都以task_struct链表的形式存在内核⾥&#xff0c;而…