SpringBoot 之基础(一)

news2024/10/6 16:22:04

文章目录

  • SpringBoot 基础
    • 基本概念
    • 创建 SpringBoot 项目
    • 编码
      • 编写启动类
      • 写 Controller
      • 运行 / 测试
      • properties 和 yml
      • 关闭 Spring banner
      • 日志
      • spring-boot 默认的日志格式
    • 解决 start.spring.io 不能访问
    • 不使用 spring boot 的 parent pom

SpringBoot 基础

Spring Boot 是由 Pivotal 团队提供的基于 Spring 的全新框架,其设计目的是为了简化 Spring 应用的搭建和开发过程。该框架遵循"约定大于配置"原则,采用特定的方式进行配置,从而使开发者无需定义大量的 XML 配置。

Spring Boot 并不重复造轮子,而且在原有 Spring 的框架基础上封装了一层,并且它集成了一些类库(提供了默认的配置),用于简化开发。

简而言之,Spring Boot 就是一个大容器,其中包含了很多类库的默认配置,你只需要在项目中引入这些类库即可使用。

基本概念

Spring Boot 是 Spring 项目中的一个子工程,推崇约定大于配置的方式以便于你能够尽可能快速的启动并运行程序。

由于 Spring Boot 使用一些固定的方式来构建生产级别的 spring 应用,所有人们把 SpringBoot 称为搭建程序的『脚手架』。

SpringBoot 简化了基于 Spring 的应用开发,只需要 run 就能创建一个独立的、生产级别的 Spring 应用。

SpringBoot 为 Spring 平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器),这样我们就可以简单的开始。多数 SpringBoot 应用只需要很少的 Spring 配置。

我们可以使用 SpringBoot 创建 java 应用,并使用 java –jar xxx.jar 启动它,就能得到一个生产级别的 web 工程。

SpringBoot 主要特点和目标是:

  • 为所有 Spring 的开发者提供一个非常快速的、广泛接受的入门体验

  • 开箱即用(启动器 starter-* 其实就是 Spring Boot 提供的一个 jar 包),但通过自己设置参数.properties.yml,即可快速摆脱这种方式。

  • 提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等

  • 绝对没有代码生成,也无需 XML 配置。

创建 SpringBoot 项目

创建一个 Maven 项目,但是『不用』勾选 Create from archetype截止目前为止,该项目与 SpringBoot 还没有任何关系。

Spring Boot 提供了一个名为 spring-boot-starter-parent 的工程,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!

  • 添加父工程坐标:

    <parent>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-parent</artifactId>
      <version>2.1.11.RELEASE</version>
    </parent>
    
  • 添加 web 启动器:

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

需要注意的是,我们并没有在这里指定版本信息。因为 Spring Boot 的父工程已经对版本进行了管理了。

springboot_1

这些都是 Spring Boot 根据 spring-boot-starter-web 这个依赖自动引入的,而且所有的版本都已经管理好,不会出现冲突。

  • 完整 pom 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.11.RELEASE</version>
      </parent>
      <groupId>hemiao3000.gitee.io</groupId>
      <artifactId>springboot-demo</artifactId>
      <version>1.0-SNAPSHOT</version>
    
      <properties>
        <java.version>1.8</java.version>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      </dependencies>
    </project>
    

有时候,你不想,甚至是不能使用使用 spring-boot-starter-parent 作为你的父项目。例如,在父子模块项目中,你本身就有自己的父亲。这种情况下,你需要使用别的方式来使用 spring boot。见最后。

编码

编写启动类

SpringBoot 项目通过 main 函数即可启动,我们需要创建一个启动类:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootDemo1Application.class, args);
    }
}

写 Controller

接下来的编码工作,就是正常的 Spring MVC 项目的开发过程。

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String helo() {
        return "hello world";
    }
}

运行 / 测试

运行启动类的 main 方法,会在控制台中看见日志信息,其中有一条信息如下:

Tomcat started on port(s): 8080 (http) with context path ''
  1. 监听的端口是 8080

  2. Spring MVC 的映射路径是:/

  3. /hello 路径已经映射到了 HelloController 中的 hello() 方法

打开页面访问:http://localhost:8080/hello

properties 和 yml

Spring Boot 整个应用程序只有一个配置文件,那就是 .properties.yml 文件。如果你的 Spring Boot 项目中没有包含这个配置文件,Spring Boot 对每个配置项都有默认值(当然,我们也可以添加配置文件,用以覆盖其默认值)。

这里以 .properties 文件为例,首先在 resources 下新建一个名为 applicatioon.properties的文件。

输入内容为:

server.port=8081
server.servlet.context-path=/api

并且启动 main 方法,这时程序请求地址则变成了:http://localhost:8081/api/hello

Spring Boot 支持 .properties 和 .yml 两种格式的文件,文件名分别对应 application.propertiesapplication.yml

下面贴出 yaml 文件格式供大家参考:

server:
  port: 8080
  servlet:
    context-path: /api

可以看出 yml 则 换行 + tab 隔开。这里需要注意的是冒号后面 必须有空格 ,否则会报错。

关闭 Spring banner

spring.main.banner-mode=off

日志

Spring Boot 直接使用 slf4j ,默认间接使用 logback 日志,因此,它支持直接在 .properties.yml 文件中对日志的相关信息进行配置。

另外,Spring Boot 还支持控制台日志上色功能。

logging.level.root=INFO
logging.level.xxx.yyy.zzz=DEBUG
logging.pattern.console=%clr(%5level) \
  %clr(|){faint} \
  %clr(%-40.40logger{39}){cyan} \
  %clr(:){faint} \
  %m%n

有一点需要注意,如果是 .yml 文件格式,在设置 logging.pattern.console 时,其值必须用双引号括起来,形如:console="..."

spring-boot 默认的日志格式

了解

spring-boot.jar
└── org.springframework.boot.logging
    └── defaults.xml

其中有一段日志的格式配置(格式化后显示如下):

<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} 
%clr(${LOG_LEVEL_PATTERN:-%5p}) 
%clr(${PID:- }){magenta} 
%clr(---){faint} 
%clr([%15.15t]){faint} 
%clr(%-40.40logger{39}){cyan} 
%clr(:){faint} %m%n
${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

其中单词 blue、cyan、faint、green、magenta、red、yellow,表示颜色。

解决 start.spring.io 不能访问

使用阿里云国服链接替代:https://start.aliyun.com

不使用 spring boot 的 parent pom

这种情况下,你可以在你自己的 parent 项目中加入如下东西(通过 spring-boot-dependencies 使用 scope=import 依赖项来保持依赖项管理)

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
 
        <!-- 在未来,spring cloud 遇到这种情况时,也是如此处理。
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        -->
    </dependencies>
</dependencyManagement>

这样,你的子项目中就不再需要编写版本号了。

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

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

相关文章

【SpringMVC】_SpringMVC项目返回HTML与JSON

目录 1. SpringMVC项目返回HTML页面 2. SpringMVC项目返回JSON 2.1 程序演示 2.2 关于响应的Content-Type 2.2.1 接口为对象 2.2.2 接口为String 2.2.3 接口为Map 本专栏已介绍&#xff1a; 返回静态页面&#xff1a; 【Spring MVC】_SpringMVC项目返回静态页面_mvc 返…

C# 数组/集合排序

一&#xff1a;基础类型集合排序 /// <summary> /// 排序 /// </summary> /// <param name"isReverse">顺序是否取反</param> public static void Sort<T>(this IList<T> array, bool isReverse false)where T : IComparable …

Linux下多线程的相关概念

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误或者有写的不好的地方的话&…

py黑帽子学习笔记_scapy

简介 代码简洁&#xff1a;相比于前两个博客总结&#xff0c;很多socket操作&#xff0c;如果使用scapy仅需几行代码即可实现 获取邮箱身份凭证 编写基础嗅探器&#xff0c;脚本可显示任何收到的一个包的详细情况 直接运行 尝试监听邮件收发&#xff0c;监听指定端口&#x…

2024年03月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 以下选项中,创建类正确的是?() A: class test1: def prt(self): …… B: class Mg(): def__init__(na,ag): self.na=na C: class A(): def print(self): print(“Yes”) a=A() a.print() D…

理解多线程看这一篇就够了

一、基本概念与关系 程序 程序是含有指令和数据的文件&#xff0c;静态地存储在磁盘等存储设备上。它是软件的实体&#xff0c;但未被激活。 进程 进程是程序的一次执行过程&#xff0c;是系统运行程序的基本单位。当程序被操作系统加载并执行时&#xff0c;就成为一个进程&a…

Kprobe实现原理

kprobe其实就是将某个要检测的指令备份&#xff0c;再替换成int3(x86)或者未定义指令(arm)来触发异常&#xff0c;再调用对应体系的异常处理函数来执行我们自定义的hook&#xff0c;执行完我们自定义的hook,再将备份的指令放回原来的位置继续往下执行 下面我们就来看下linux内核…

拍视频麦克风什么牌子好?户外无线麦克风哪个牌子好,看本期文章

​无线领夹麦克风&#xff0c;作为现代音频技术的重要代表&#xff0c;已经广泛应用于各种场合。它不仅能提高演讲者的声音质量&#xff0c;还能增加演讲的互动性和生动性。然而&#xff0c;面对市场上众多的无线领夹麦克风产品&#xff0c;如何选择一款适合自己的设备成为了一…

TPshop商城的保姆教程(windows)

提前准备 phpStudy下载&#xff1a;https://www.xp.cn/download.html 选择适合自己的版本下载 TPshop商城源文件下载链接&#xff1a; https://pan.baidu.com/s/143fLrxbwe9CTMCbyx7mXJQ?pwd6666 开始安装 安装完phpstudy后 以管理员的身份启动phpstudy.exe 选择合适自己…

C语言 指针——指针变量的定义、初始化及解引用

目录 指针 内存如何编址&#xff1f; 如何对变量进行寻址&#xff1f; 用什么类型的变量来存放变量的地址? 如何显示变量的地址?​编辑 使用未初始化的指针会怎样&#xff1f; NULL是什么&#xff1f; 如何访问指针变量指向的存储单元中的数据&#xff1f; 指针变量的…

二刷算法训练营Day15 | 二叉树(2/9)

目录 详细布置&#xff1a; 1. 层序遍历 2. 226. 翻转二叉树 3. 101. 对称二叉树 详细布置&#xff1a; 1. 层序遍历 昨天练习了几种二叉树的深度优先遍历&#xff0c;包括&#xff1a; ​​​​​​前中后序的递归法前中后序的迭代法前中后序迭代的统一写法 今天&…

糖尿病视网膜病变分级新方法:卷积网络做分割和诊断 + 大模型生成详细的测试和治疗建议

糖尿病视网膜病变分级新方法&#xff1a;卷积网络做分割和诊断 大模型生成详细的测试和治疗建议 提出背景相关工作3.1 数据集3.1.1 病变分割 3.1.2 图像分级3.1.3 大型语言模型&#xff08;LLMs&#xff09; 解法 数据预处理 数据增强 网络架构 训练过程 测试过程子解法1…

spdlog日志库源码:线程池thread_pool

线程池 线程池本质上一组事先创建的子线程&#xff0c;用于并发完成特定任务的机制&#xff0c;避免运行过程中频繁创建、销毁线程&#xff0c;从而降低程序运行效率。通常&#xff0c;线程池主要涉及到以下几个方面问题&#xff1a; 如何创建线程池&#xff1f;线程池如何执…

FPGA基础:触发器和锁存器

目录 锁存器&#xff08;Latch&#xff09;D触发器&#xff08;Flip-Flop&#xff09;最基本时序电路时序块&#xff08;Sequential blocks&#xff09;:同步与异步触发器概念触发器分类触发器的Verilog实现1. 上升沿触发的触发器2. 带异步复位、上升沿触发的触发器3. 带异步复…

Pandas-中axis的用法

在Pandas中&#xff0c;min(axis)方法是计算DataFrame或Series中每行或每列的最小值的函数。该函数可以接受一个参数axis&#xff0c;用于指定计算最小值的方向。当axis0时&#xff0c;表示沿着行的方向计算最小值&#xff1b;当axis1时&#xff0c;表示沿着列的方向计算最小值…

奶奶也能看懂的耦合协调度分析

不会计算&#xff1f;跟着文献学起来~ 案例数据连接&#xff08;复制链接后粘贴到浏览器中&#xff09;&#xff1a; 耦合协调度数据​spssau.com/spssaudata.html?shareDataF363000CD033FF15E557BB75B9B0D412 假如你有这样一组数据&#xff1a; 如何进行计算分析耦合协调度…

python中pow是什么意思

pow()方法返回xy&#xff08;x的y次方&#xff09;的值。 语法 以下是math模块pow()方法的语法&#xff1a; import math math.pow( x, y ) 内置的pow()方法 pow(x, y[, z]) 函数是计算x的y次方&#xff0c;如果z在存在&#xff0c;则再对结果进行取模&#xff0c;其结果等效…

【后端开发】服务开发场景之分布式(CAP,Raft,Gossip | API网关,分布式ID与锁 | RPC,Dubbo,Zookeeper)

【后端开发】服务开发场景之分布式&#xff08;CAP&#xff0c;Raft&#xff0c;Gossip | API网关&#xff0c;分布式ID与锁 | RPC&#xff0c;Dubbo&#xff0c;Zookeeper&#xff09; 文章目录 1、如何设计一个分布式系统&#xff1f;&#xff08;底层原理&#xff09;理论&a…

企业网站有必要进行软件测试吗?网站测试有哪些测试流程?

企业网站在现代商业中扮演着重要的角色&#xff0c;它不仅是企业形象的重要体现&#xff0c;也是与客户、合作伙伴进行沟通与交流的重要渠道。然而&#xff0c;由于企业网站的复杂性和关键性&#xff0c;其中可能存在各种潜在的问题和隐患。因此&#xff0c;对企业网站进行软件…

网页中的音视频裁剪拼接合并

一、需求描述 项目中有一个配音需求&#xff1a; 1&#xff09;首先&#xff0c;前台会拿到一个英语视频&#xff0c;视频的内容是A和B用英语交流&#xff1b; 2&#xff09;然后&#xff0c;用户可以选择为某一个角色配音&#xff0c;假如选择为A配音&#xff0c;那么视频在播…