SpringBoot核心功能与基础配置

news2024/11/23 9:22:46

SpringBoot简介

原先的Spring程序缺点,包括依赖设置繁琐,每项jar的引用都需要自己撰写。并且配置繁琐,配置文件中也需要自己写加载bean等。由此针对原始的Spring程序,Pivotal团队提供的全新框架——SpringBoot,其设计目的是用来简化Spring应用的初始搭建以及开发过程

1. SpringBoot的核心功能及优点

  • 起步依赖(简化依赖配置)
  • 自动配置(简化常用工程相关配置)
  • 辅助功能(内置服务器,……)

1.1 Parent

在进行开发时,对依赖版本具有固定搭配,故SpringBoot将所有基本版本常见的方案进行了整理,开发者可直接使用其提供的版本方案,不用担心冲突。故SpringBoot提供了parentparent自身具有很多个版本,每个parent版本中包含有几百个其他技术的版本号。parent帮助开发者统一的进行各种技术的版本管理。

注意parent定义出来以后,并不是直接使用,仅仅是给开发者一个说明书。

总结:继承spring-boot-starter-parent,其中定义了若干个依赖管理。继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突。

  • 在pom.xml文件中,继承了一个spring-boot-starter-parent的坐标
    在这里插入图片描述

  • 打开后可以查阅到其中又继承了一个spring-boot-dependencies的坐标
    在这里插入图片描述

  • 打开 spring-boot-dependencies ,可以看到其 properties 下,列出了各式各样的依赖版本号属性,定义了若干个技术的依赖版本号。
    在这里插入图片描述

  • 而后的 dependencyManagement 中,列出了依赖坐标信息,其中依赖没有具体的依赖版本号,而是引用了上面定义的依赖版本属性值
    在这里插入图片描述

1.2 Starter

在实际开发时,对于依赖坐标的使用往往都有一些固定的组合方式,繁琐且格式固定,没有技术含量。由此SpringBoot提供了starter,定义了使用某种技术时对于依赖的固定搭配格式,一次配置就可引入一组依赖,使用starter可以帮助开发者减少依赖配置

命名规则:spring-boot-starter-技术名称

注意:

  1. starter是一个坐标中定了若干个坐标,以前写多个的,现在写一个,是用来减少依赖配置的书写量的
  2. parent是定义了几百个依赖版本号,以前写依赖需要自己手工控制版本,现在由SpringBoot统一管理,这样就不存在版本冲突了,是用来减少依赖冲突的
  • 在pom.xml文件中,引入 spring-boot-starter-web在这里插入图片描述
  • 打开 spring-boot-starter-web 后,可以看到其又定义了若干个具体依赖的坐标
    在这里插入图片描述

1.3 引导类

SpringBoot程序运行的入口就是工程创建时自带的,带有main方法的类,运行这个类就可以启动SpringBoot工程的运行。

package com.ty;

import com.ty.controller.DemoController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemoApplication.class, args);
    }
}

pringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是 Bean。当前SpringBoot启动类运行后就会产生一个Spring容器对象,通过容器对象直接操作Bean。

package com.ty;

import com.ty.controller.DemoController;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class SpringbootDemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(SpringbootDemoApplication.class, args);
        DemoController bean = run.getBean(DemoController.class);
        System.out.println(bean);
    }
}

1.4 内嵌tomcat

1.4.1 定位tomcat
在 SpringBoot 中,引入了 spring-boot-starter-web ,当打开 spring-boot-starter-web 便能看到,又引入了 spring-boot-starter-tomcat ,再打开这个starter,其中的 tomcat-embed-core,叫做tomcat内嵌核心,便是这个奖tomcat功能引入到了我们SpringBoot项目中。

在这里插入图片描述
1.4.2 更换内嵌Tomcat

SpringBoot提供了3款内置的服务器

  • tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件

  • jetty:更轻量级,负载性能远不及tomcat

  • undertow:负载性能勉强跑赢tomcat

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

总结

  1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
  2. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
  3. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

2. SpringBoot基础配置

2.1 配置文件分类

SpringBoot支持的配置文件:

  • properties格式:

    server.port=80
    
  • yml格式:

    server:
      port: 81
    
  • yaml格式:

    server:
      port: 82
    

2.2 配置文件优先级

  1. 配置文件间的加载优先级 properties> yml > yaml
  2. 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

2.3 读取配置数据

2.3.1 Environment 读取全部配置数据

  • application.yml 中配置:

    datasource:
      driver: com.mysql.jdbc.Dirver
      url: jdbc:mysql://localhost/springboot_db
      username: root
      password: 123
    
  • 直接通过自动装配注解,将配置文件中的配置数据封装到 Environment 对象中。

    package com.ty.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.core.env.Environment;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/demo")
    public class DemoController {
    
        @Autowired
        private Environment environment;
        
        @GetMapping
        public String getByIds(){
            String id = "TY Demo SpringBoot is Running...";
            System.out.println(id);
            System.out.println("Driver" + environment.getProperty("driver"));
            System.out.println("Url" + environment.getProperty("url"));
            System.out.println("Username" + environment.getProperty("username"));
            System.out.println("Password" + environment.getProperty("password"));
    
            return id;
        }
    }
    

2.3.2 @ConfigurationProperties 读取配置对象数据

SpringBoot 可将一组配置数据封装为一个Java对象。

  • application.yml 中配置:

    datasource:
      driver: com.mysql.jdbc.Dirver
      url: jdbc:mysql://localhost/springboot_db
      username: root
      password: 123
    
  • 首先定义一个配置参数封装类,使用注解 @ConfigurationProperties,指定对象加载的配置文件中的信息。@ConfigurationProperties 必须告诉他加载的数据前缀,这样当前前缀下的所有属性就封装到这个对象中。

    package com.ty;
    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component
    @Data
    @ConfigurationProperties(prefix = "datasource")
    public class MyDataSource {
    
        private String driver;
    
        private String url;
    
        private String username;
    
        private String password;
    
        @Override
        public String toString() {
            return "MyDataSource{" +
                    "driver='" + driver + '\'' +
                    ", url='" + url + '\'' +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    '}';
        }
    }
    
  • 直接通过自动装配注解,引入 MyDataSource对象。

    package com.ty.controller;
    
    import com.ty.MyDataSource;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/demo")
    public class DemoController {
    
        @Autowired
        private Environment environment;
    
        @Autowired
        MyDataSource myDataSource;
    
        @GetMapping
        public String getById() {
            String id = "TY Demo SpringBoot is Running...";
            System.out.println(id);
            System.out.println("Driver" + myDataSource.getDriver());
            System.out.println("Url" + myDataSource.getUrl());
            System.out.println("Username" + myDataSource.getUsername());
            System.out.println("Password" + myDataSource.getPassword());
    
            return id;
        }
    }
    
    

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

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

相关文章

PyQt 定义控件SwitchButton 指南

PyQt 定义控件SwitchButton 指南 PyQt 定义控件SwitchButton 指南实例程序效果如下所示&#xff1a; PyQt 定义控件SwitchButton 指南 SwitchButton 是一个自定义开关按钮控件&#xff0c;通常用于在用户界面中启用或禁用某些功能或选项。它是一种用户友好的控件&#xff0c;允…

云汉芯城一站式电子制造平台启想智联顺利通过IATF16949:2016质量管理体系认证

近日&#xff0c;云汉芯城旗下一站式电子制造服务平台上海启想智能科技有限公司&#xff08;以下简称“启想智联”&#xff09;顺利通过IATF16949:2016质量管理体系认证&#xff0c;并获得由URS颁发的认证证书。通过此项认证&#xff0c;标志着启想智联在全球汽车行业的技术规范…

AdminLTE 2 图标大全

AdminLTE 2 图标大全 链接地址&#xff1a;&#xff1a;&#xff1a;&#xff1a;&#xff1a;AdminLTE 2 | Icons

再也不用花钱了,教你一套键鼠控制多台电脑

Synergy是一款用于多台电脑之间共享键盘和鼠标的软件。它允许用户使用一套键盘和鼠标同时控制多台电脑&#xff0c;极大地提高了工作效率。Synergy支持跨平台使用&#xff0c;包括Windows、Mac和Linux等操作系统。用户只需在每台电脑上安装Synergy客户端&#xff0c;并按照软件…

十四.镜头知识之镜头色差

十四.镜头知识之镜头色差 文章目录 十四.镜头知识之镜头色差**14.1 色差** /Chromatic Aberration/**14.2 纵向色差****14.3 横向色差**14.4 ISP色彩还原同一场景两张由不同镜头拍出来的照片比较:上方的照片来自更高质量的镜头,下方的照片则出现了明显的色差,特别是在房顶右…

什么是云原生?零基础学云原生难吗?

伴随着云计算的浪潮&#xff0c;云原生概念也应运而生&#xff0c;而且火得一塌糊涂&#xff0c;但真正谈起“云原生”&#xff0c;大多数非 IT 从业者的认知往往仅限于将服务应用放入云端&#xff0c;在云上处理业务。实际上&#xff0c;云原生远不止于此。 现在越来越多的企…

LIMS第三方实验室信息化管理系统

实验室信息化管理系统LIMS&#xff0c;由计算机硬件和应用软件组成&#xff0c;能够实现实验室数据和信息的收集、分析、陈述和处理。实验室信息化管理系统LIMS是以查验检测作业为中心&#xff0c;包含一个以样品分析为主线的从样品登录、登记处理、查验检测、数据计算分析到成…

文字连续光影特效实现思路

文字连续光影特效实现思路 实现了一个文字阴影的效果&#xff0c;文字会不断变换颜色并产生阴影效果。具体实现如下&#xff1a; 使用 keyframes 定义一个名为 shadow 的动画&#xff0c;动画从当前颜色到 #ff0266&#xff0c;同时设置文字阴影的偏移量和模糊半径。使用 * 选…

CSS魔法!如何将任意CSS类型转换为数值?

在 CSS 中有各式各样的类型值&#xff0c;例如 1rem、10vw、100cqw等等&#xff0c;这些相对值给与了 CSS 强大的适应能力。但有时候&#xff0c;我们还需要知道这些相对值所对应的真实值&#xff0c;也就是px值&#xff0c;比如在移动端&#xff0c;我们经常会设置这样的根字号…

实验四:回溯算法的设计与分析

某不知名学校大二算法课实验报告 题目来自力扣 第一题&#xff1a;幂集 力扣题目链接&#xff1a;幂集 题目描述&#xff1a; 幂集。编写一种方法&#xff0c;返回某集合的所有子集。集合中不包含重复的元素。 说明&#xff1a;解集不能包含重复的子集。 示例: 输入&#xf…

2023年中国TFT-LCD面板产业链、需求量及市场规模分析[图]

按显示技术尺寸来分&#xff0c;主要分为大尺寸和小尺寸&#xff08;10寸以下&#xff09;&#xff0c;TFT-LCD行业下游主要是各类型消费电子&#xff0c;包括PC显示器&#xff0c;液晶电视&#xff0c;智能手机等。 TFT&#xff0d;LCD面板产业链 资料来源&#xff1a;共研产…

使用simpleperf跟踪自定义的perf events

目录 前言 tracepoint简介 添加tracepoint&#xff1a; 使用simpleperf 跟踪自定义的tracepoint 前言 simpleperf可以跟踪指定的perf events&#xff0c;通过adb shell & simpleperf list可以查看当前设备支持的所有perf event。但是如果这些perf event不能满足我们的…

深入理解操作系统之线程

目录 补充进程知识&#xff1a; 是什么触发了进程的切换&#xff1f; 进程切换时要做什么&#xff1f; 切换进程的时机分为主动和被动。 进程上下文指的是什么&#xff1f; 线程篇&#xff1a; 以进程创建子进程为例引入线程&#xff1a; 线程定义&#xff1a; Motivat…

Spring Cloud Alibaba—Sentinel 控制台安装

1、Sentinel 控制台包含如下功能: 查看机器列表以及健康情况&#xff1a;收集 Sentinel 客户端发送的心跳包&#xff0c;用于判断机器是否在线。 监控 (单机和集群聚合)&#xff1a;通过 Sentinel 客户端暴露的监控 API&#xff0c;定期拉取并且聚合应用监控信息&#xff0c;最…

实验室超声波清洗器如何选择?

实验室是很多科研人员工作的地方&#xff0c;而且他们的工作环境较为特殊&#xff0c;与一般的工作环境有所不同&#xff0c;在大多数实验过程后会通常都会需要使用到效率高实验室超声波清洗机&#xff0c;而且其清洁效率也要比普通的清洗机高。不同实验室会对实验室超声波清洗…

记一次密码重置到后台GetShell

1.尝试登录 打开网页&#xff0c;看到一个登录&#xff0c;尝试点击 2.发现提示 Unknown host 3.因为刚开始是用 IP 访问的网站&#xff0c;点击登录按钮为域名访问该网站&#xff0c;猜测可能使用域名访问不了&#xff0c;于是把域名改为IP加上后... 1.尝试登录 1.打开网页&…

ITextRenderer将PDF转换为HTML详细教程

引入依赖 <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.18</version></dependency> 问题一&#xff1a;输出中文字体 下载字体simsun.ttc 下载链接&am…

动态规划:09 0-1背包理论基础I

动态规划&#xff1a;09 0-1背包理论基础I 背包问题概述 对于面试的话&#xff0c;其实掌握01背包&#xff0c;和完全背包&#xff0c;就够用了&#xff0c;最多可以再来一个多重背包。 如果这几种背包&#xff0c;分不清&#xff0c;就看下图 leetcode上连多重背包的题目都…

【MATLAB-Retinex图像增强算法的去雾技术】

续&#xff1a;【MATLAB-基于直方图优化的图像去雾技术】 【MATLAB-Retinex图像增强算法的去雾技术】 1 原图2 MATLAB实现代码3 结果图示 参考书籍&#xff1a;计算机视觉与深度学习实战:以MATLAB、Python为工具&#xff0c; 主编&#xff1a;刘衍琦, 詹福宇&#xff0c; 王德建…

C++入门篇(3)---引用

1.引用 你有没有被人起过外号?比如身边的朋友,喊他的时候不会叫他的全名,像我很好的朋友,我一般都喜欢叫他"阿威",而不会去称呼全名.我叫他"阿威",他还是他没有什么问题. 这里新登场的引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&am…