Springboot入门篇

一、概述

Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者Rod Johnson  。Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

1.1对比

对比一下 Spring 程序和 SpringBoot 程序。如下图

坐标
  • Spring 程序中的坐标需要自己编写,而且坐标非常多
  • SpringBoot 程序中的坐标是我们在创建工程时进行勾选自动生成的
web3.0 配置类
  • Spring 程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂
  • SpringBoot 程序不需要我们自己书写
配置类
  • Spring/SpringMVC 程序的配置类需要自己书写。而 SpringBoot 程序则不需要书写。

1.2文件解析

parent

1.开发SpringBoot程序要继承spring-boot-starter-parent

2.spring-boot-starter-parent中定义了若干个依赖管理

3.继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

4.继承parent的形式也可以采用引入依赖的形式实现效果

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version></parent>

点进去:(Ctrl+B) 

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version></parent>

 点进去:(Ctrl+B) 

<modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>3.2.0</version></parent>

再点进去:(Ctrl+B)

会发现定义了很多版本控制以及依赖

starter

SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的

1.开发springboot程序需要导入坐标时通常导入对应的starter

2.每个不同的starter根据功能不同,通常包含多个依赖坐标

3.使用starter可以实现快速配置的效果,达到简化配置的目的 

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

这个我们都知道,一般称为 SpringBoot框架web项目的起步依赖,那么为什么我们添加这个依赖之后,之前在SpringMVC中的一些依赖就不需要再添加了呢?点进入这个依赖看看。 

可以看到这个依赖中,还管理着其他依赖,其中就有tomcat、spring-webmvc这些,这不都是之前学SpringMVC需要配置tomcat以及其他依赖项吗?而spring-boot-starter-web这个起步依赖已经帮我们做好了,你就不需要再添加很多其他依赖了,是不是很方便呢?

向其中的pom文件添加依赖的时候,我们会发现,添加的很多依赖都是以 spring-boot-start-XXX 这样的形式,我当时就按照字面意思去理解:springboot-开始-XXX的依赖。

那么,我们现在说的规范一点:

spring-boot-start-XXX就是spring-boot的场景启动器。

  • spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件;
  • spring-boot-starter-thymeleaf:帮我们导入了thymeleaf模板引擎正常运行所依赖的组件;

引导类

1.SpringBoot工程提供引导类用来启动程序

2.SpringBoot工程启动后创建并初始化Spring容器

package com.yanyu;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringTest1Application {public static void main(String[] args) {SpringApplication.run(SpringTest1Application.class, args);}}

 SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目

SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

内嵌tomcat

内嵌tomcat(spring-boot-starter-web)

工作原理是将tomcat服务器作为对象运行,并将该对象交给Spring容器管理 

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><version>3.2.0</version><scope>compile</scope></dependency>

springboot内置服务器:

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

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

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

1.3快速启动

打包

  <plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>

 所以我们只需要使用 Maven package 指令打包就会在 target 目录下生成对应的 Jar

启动

进入 jar 包所在位置,在 命令提示符 中输入如下命令
jar -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar 1
执行上述命令就可以看到 SpringBoot 运行的日志信息

1.4概述

SpringBoot程序优点:

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

SpringBoot的四大核心了:

  • 自动装配:简单配置甚至零配置即可运行项目
  • 起步依赖:场景启动器
  • Actuator:指标监控
  • 命令行界面 :命令行

 辅助功能

排除依赖

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

二、基础配置

2.1配置文件格式

SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的

  • application.properties

    • 语法结构 :key=value

  • application.yml

    • 语法结构 :key:空格 value

  •  application.yaml

注意: SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同而已。
优先级为:properties>yml>yaml

配置文件的作用 :修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;

比如我们可以在配置文件中修改Tomcat 默认启动的端口号!测试一下!


server.port=8081

2.2配置文件历史

xml

xml ,格式如下:
<enterprise>
<name>itcast</name>
<age>16</age>
<tel>4006184000</tel>
</enterprise>

properties

properties 类型的配置文件如下
enterprise.name=itcast
enterprise.age=16
enterprise.tel=4006184000

yaml 类型

yaml 类型的配置文件内容如下
enterprise:name: itcastage: 16tel: 4006184000

2.3yaml格式

YAML YAML Ain't Markup Language ),一种数据序列化格式。这种格式的配置文件在近些年已经占有主导地位,。

优点:

        容易阅读

        容易与脚本语言交互

        以数据为核心,重数据轻格式 

yml语法规则

①大小写敏感

②属性层级关系使用多行描述,每行结尾时用冒号结束

③属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

④#表示注释

⑤使用缩进标识层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

 

读取yaml数据

读取yaml单一属性数据

使用@Value配合SpEL读取单个数据

如果数据存在多层级,依次书写层级名称即可

lesson: SpringBoot
server:
port: 80
enterprise:name: itcastage: 16tel: 4006184000subject:- Java- 前端- 大数据
@RestController
@RequestMapping("/books")
public class BookController {@Value("${lesson}")private String lesson;@Value("${server.port}")private Integer port;@Value("${enterprise.subject[0]}")private String subject_00;@GetMapping("/{id}")public String getById(@PathVariable Integer id){System.out.println(lesson);System.out.println(port);System.out.println(subject_00);return "hello , spring boot!";}
}
Environment对象
上面方式读取到的数据特别零散, SpringBoot 还可以使用 @Autowired 注解注入 Environment 对象的方式读取数据。这 种方式 SpringBoot 会将配置文件中所有的数据封装到 Environment 对象中,如果需要使用哪个数据只需要通过调用
Environment 对象的 getProperty(String name) 方法获取。具体代码如下:
 读取yaml引用类型属性数据

1.使用@ConfigurationProperties注解绑定配置信息到封装类中

2.封装类需要定义为Spring管理的bean,否则无法进行属性注入

 

注意:这种方式,框架内容大量数据,而在开发中我们很少使用。

 举例

配置

#创建类,用于封装下面的数据
#由spring帮我们去加载数据到对象中,一定要告诉spring加载这组信息
#使用的时候从spring中直接获取信息使用datasource:driver: com.myswl.cj.jdbc.Driverurl: jdbc:mysql://localhost/db_springbootusername: rootpassword: root

自定义环境类

package com.yanyu.pojo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;//1.定义数据模型封装yaml文件中对应的数据
//2.定义为spring管控的bean
@Component
//3.指定加载的数据
@ConfigurationProperties(prefix="datasource")
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MyDataSource {private String driver;private String url;private String username;private String password;}

测试

package com.yanyu.controller;import com.yanyu.pojo.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate MyDataSource myDataSource;@GetMapping("/datasource")public String getMyDatasource(){System.out.println(myDataSource);return "source";}
}
GET http://localhost:8080/books/datasource

自定义对象封装数据警告解决方案
这个警告提示解决是在 pom.xml 中添加如下依赖即可

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

读取Property数据

加载指定的配置文件

@PropertySource :加载指定的配置文件;

@configurationProperties:默认从全局配置文件中获取值;

配置文件占位符

配置文件还可以编写占位符生成随机数

person:name: qinjiang${random.uuid} # 随机uuidage: ${random.int}  # 随机inthappy: falsebirth: 2000/01/01maps: {k1: v1,k2: v2}lists:- code- girl- musicdog:name: ${person.hello:other}_旺财age: 1

1、新建一个实体类User


@Component //注册bean
public class User {private String name;private int age;private String sex;
}

2、编辑配置文件 user.properties

user1.name=kuangshen
user1.age=18
user1.sex=男

3、我们在User类上使用@Value来进行注入!


@Component //注册bean
@PropertySource(value = "classpath:user.properties")
public class User {//直接使用@value@Value("${user.name}") //从配置文件中取值private String name;@Value("#{9*2}")  // #{SPEL} Spring表达式private int age;@Value("男")  // 字面量private String sex;
}

 4、Springboot测试


@SpringBootTest
class DemoApplicationTests {@AutowiredUser user;@Testpublic void contextLoads() {System.out.println(user);}}

三、多环境配置

 yaml 类型

#设置启用的环境
spring:
profiles:
active: dev
---
#开发
spring:
profiles: dev
server:
port: 80
---
#生产
spring:
profiles: pro
server:
port: 81
---
#测试
spring:
profiles: test
server:
port: 82
注意:
在上面配置中给不同配置起名字的 spring.profiles 配置项已经过时。最新用来起名字的配置项是
#开发
spring:
config:
activate:
on-profile: dev

properties文件

 命令行启动参数设置

使用 SpringBoot 开发的程序以后都是打成 jar 包,通过 java - jar xxx.jar 的方式启动服务的。那么就存在一个问 题,如何切换环境呢?因为配置文件打到的jar 包中了。
我们知道 jar 包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成 jar 包就可以了。这种方式显然有点麻烦, 而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下
java –jar xxx.jar –-spring.profiles.active=test
那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式
java –jar xxx.jar –-server.port=88 
当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

配置文件分类

SpringBoot 4 级配置文件放置位置:
  • 1级:classpathapplication.yml
  • 2级:classpathconfig/application.yml
  • 3级:file :application.yml
  • 4级:file config/application.yml
说明: 级别越高优先级越高

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

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

相关文章

【Hadoop_04】HDFS的API操作与读写流程

1、HDFS的API操作1.1 客户端环境准备1.2 API创建文件夹1.3 API上传1.4 API参数的优先级1.5 API文件夹下载1.6 API文件删除1.7 API文件更名和移动1.8 API文件详情和查看1.9 API文件和文件夹判断 2、HDFS的读写流程&#xff08;面试重点&#xff09;2.1 HDFS写数据流程2.2 网络拓…

软件设计师——软件工程(一)

&#x1f4d1;前言 本文主要是【软件工程】——软件设计师——软件工程的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

phpstorm中使用 phpunit 时的配置和代码覆盖率测试注意点

初始化一个composer项目&#xff0c;composer.json配置文件如下 {"name": "zingfront/questions-php","type": "project","require": {"php": "^7.4"},"require-dev": {"phpunit/phpun…

Mac安装DevEco Studio

下载 首先进入鸿蒙开发者官网&#xff0c;顶部导航栏选择开发->DevEco Studio 根据操作系统下载不同版本&#xff0c;其中Mac(X86)为英特尔芯片&#xff0c;Mac(ARM)为M芯片。 安装 下载完毕后&#xff0c;开始安装。 点击Agree 首次使用&#xff0c;请选择Do not impor…

张驰咨询:数据驱动的质量改进,六西格玛绿带在汽车业实践

尊敬的汽车行业同仁们&#xff0c;您是否曾面临生产效率低下、成本不断攀升或顾客满意度下降的困扰&#xff1f;本期专栏&#xff0c;我们将深入探讨如何通过六西格玛绿带培训&#xff0c;在汽车行业中实现过程优化和质量提升。 汽车行业的竞争日趋激烈&#xff0c;致力于提供…

Flask维护者:李辉

Flask维护者&#xff1a;李辉&#xff0c; 最近看b站的flask相关&#xff0c;发现了这个视频&#xff1a;[PyCon China 2023] 濒危 Flask 扩展拯救计划 - 李辉_哔哩哔哩_bilibili 李辉讲他在维护flask之余&#xff0c;开发了apiflask这个依托flask的框架。GitHub - apiflask/a…

融合科技,升级医疗体验——医院陪诊服务的技术创新

随着科技的迅猛发展&#xff0c;医疗服务领域也在积极借助技术手段提升患者体验。本文将探讨如何利用先进的技术代码&#xff0c;将医院陪诊服务推向新的高度。 1. 医疗预约系统的实现 # 通过Python代码实现医疗预约系统 class MedicalAppointment:def __init__(self, patie…

基于轻量级神经网络GhostNet开发构建光伏太阳能电池缺陷图像识别分析系统

工作中经常会使用到轻量级的网络模型来进行开发&#xff0c;所以平时也会常常留意使用和记录&#xff0c;在前面的博文中有过很多相关的实践工作&#xff0c;感兴趣的话可以自行移步阅读即可。 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、mobil…

python的websocket方法教程

WebSocket是一种网络通信协议&#xff0c;它在单个TCP连接上提供全双工的通信信道。在本篇文章中&#xff0c;我们将探讨如何在Python中使用WebSocket实现实时通信。 websockets是Python中最常用的网络库之一&#xff0c;也是websocket协议的Python实现。它不仅作为基础组件在…

NSSCTF web刷题记录7

文章目录 [SDCTF 2022]CURL Up and Read[NUSTCTF 2022 新生赛]Translate [SDCTF 2022]CURL Up and Read 考点&#xff1a;SSRF 打开题目发现是curl命令&#xff0c;提示填入url 尝试http://www.baidu.com&#xff0c;成功跳转 将url的字符串拿去解码&#xff0c;得到json格式数…

低功耗模式的通用 MCU ACM32F0X0 系列,具有高整合度、高抗干扰、 高可靠性的特点

ACM32F0X0 系列是一款支持多种低功耗模式的通用 MCU。集成 12 位 1.6 Msps 高精度 ADC 以及比 较器、运放、触控按键控制器、段式 LCD 控制器&#xff0c;内置高性能定时器、多路 UART、LPUART、SPI、I2C 等丰富的通讯外设&#xff0c;内建 AES、TRNG 等信息安全模块&#xff0…

云降水物理基础

云降水物理基础 云的分类 相对湿度变化方程 由相对湿度的定义&#xff0c;两边取对数之后可以推出 联立克劳修斯-克拉佩龙方程&#xff08;L和R都为常数&#xff09; 由右式看出&#xff0c;增加相对湿度的方式&#xff1a;增加水汽&#xff08;de增大&#xff09;和降低…

基于node 安装express后端脚手架

1.首先创建文件件 2.在文件夹内打开终端 npm init 3.安装express: npm install -g express-generator注意的地方&#xff1a;这个时候安装特别慢,最后导致不成功 解决方法&#xff1a;npm config set registry http://registry.npm.taobao.org/ 4.依次执行 npm install -g ex…

【基础知识】大数据概述

关键词—分布式 化整为零&#xff0c;再化零为整 大数据的定义 传统数据库处理起来困难的数据集。 发展历程 中国开源生态图谱2023 参考内容 中国开源生态图谱 2023.pdf 技术组件说明 数据集成 sqoop、dataX、flume 数据存储 hdfs、kafka 数据处理 mapreduce、hive…

用PHP和HTML做登录注册操作数据库Mysql

用PHP和HTML做登录注册操作数据库Mysql 两个HTML页面&#xff0c;两个PHP,两个css,两张图片&#xff0c;源码资源在上方。 目录 HTML页面 login.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta nam…

AtCoder ABC周赛2023 11/4 (Sat) E题题解

目录 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 主要思路&#xff1a; 代码&#xff1a; 原题截图&#xff1a; 原题翻译 题目大意&#xff1a; 给你一个数组&#xff0c;给你一个公式&#xff0c;让你选k个元素&#xff0c;用公式算出最终得分。 主要思路&am…

PyQt6 表单布局Form Layout (QFormLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计43条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

嵌入式系统复习--概述

文章目录 基本概念嵌入式系统的组成结构嵌入式操作系统嵌入式软件开发环境硬件基础简介下一篇 基本概念 嵌入式计算机&#xff1a;把嵌入到对象体系中、实现对象体系智能化控制的带有微控制器的计算机&#xff0c;称作嵌入式计算机 嵌入式系统&#xff1a;以应用为中心&#…

STM32-01-认识单片机

文章目录 一、单片机简介二、Cortex-M系列介绍三、初识STM32四、STM32原理图设计五、搭建开发环境六、STM32初体验七、MDK5使用技巧 一、单片机简介 单片机是什么&#xff1f; 单片机&#xff1a;Single-Chip Microcomputer&#xff0c;单片微型计算机&#xff0c;是一种集成电…

【mysql】下一行减去上一行数据、自增序列场景应用

背景 想获取if_yc为1连续账期数据 思路 获取所有if_yc为1的账期数据下一行减去上一行账期&#xff0c;如果为1则为连续&#xff0c;不等于1就为断档获取不等于1的最小账期&#xff0c;就是离当前账期最近连续账期 代码 以下为mysql语法&#xff1a; select acct_month f…