Spring Boot-01-通过一个项目快速入门

官方参考文档:Spring Boot Reference Documentation 

0. 概述 

Spring的缺点:

1. 配置繁琐:虽然Spring的组件代码是轻量级,但它的配置却是重量级的。
2. 依赖繁琐:项目的依赖管理也是一件耗时耗力的事情。分析要导入哪些库的坐标、与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。
这些问题Spring Boot可以解决,Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式,底层依然是Spring。基于约定优于配置的思想,不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中。

Spring Boot功能:

1. 自动配置:运行时过程,按需自动配置Spring以及第三方库。约定大于配置:每个场景都有很多默认配置。自定义:配置文件中修改几项即可。
2. 起步依赖:依赖传递
起步依赖本质上是一个Maven项目对象模型(ProjectObject Model,POM),定义了对其他库的传递依赖这些东西加在一起即支持某项功能。
简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
3. 直接嵌入Tomcat、Jetty or Undertow(无需部署 war 包)【Servlet容器】,将应用打成jar包,有java运行环境即可。
4. 提供可选的starter场景启动器,简化应用整合。如果要使用web、json、邮件、oss(对象存储)、异步、定时任务、缓存...,要导包一堆,控制好版本。Springboot为每一种场景准备了一个依赖; web-starter。mybatis-starter,只需导入这一个依赖即可。
5. 提供生产级特性:如监控指标、健康检查、外部化配置等
6. 无代码生成、无xml

一、Spring Boot 快速入门项目

搭建SpringBoot工程,定义HelloController.hello()方法,返回”Hello SpringBoot!”,定义引导类,启动Springboot应用。

1. 创建Maven项目、目录结构

2. 导入SpringBoot起步依赖:pom.xml

<!--    所有springboot项目都必须继承自 spring-boot-starter-parent --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.5</version></parent><dependencies><!--        web开发的场景启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><!--    SpringBoot应用打包插件--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

3. 定义Controller

只扫描主程序所在这个包及其子包,

package com.circle.boot.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/**** @author circle* @date 2024/4/6* @Description 控制类*/@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello,Spring Boot 3!";}
}

4. 编写引导类:springboot应用的入口

package com.circle.boot;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/**** @author circle* @date 2024/4/6* @Description*/@SpringBootApplication //这是一个SpringBoot应用
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class,args);  // Springboot启动代码}
}

5. application.properties配置文件

在resource目录下,由于我的8080端口被占用,在此处设置成其他端口。

server.port=8004

6. 启动测试

在浏览器输入:localhost:8004/hello

7. 打包

点击Maven,Lifecycle下的clean和package(按住ctrl同时选),将本项目打成jar包。

jar包位于target目录下:

在文件夹中找到target目录,进入cmd,执行命令:java -jar helloworld_01-1.0-SNAPSHOT.jar

E:\IntelliJ IDEA 2022.1.4\project\Springboot3_demo\helloworld_01\target>java -jar helloworld_01-1.0-SNAPSHOT.jar

即可运行我们的项目,必须在IDEA中先终止项目,否则显示端口被占用。

由此项目,我们可以体会到Springboot的特性:

1. 简化整合:场景启动器

只要导入相关的场景,就能拥有相关的功能。不用配一堆依赖!

默认支持的所有场景:Developing with Spring Boot

  • 官方提供的场景:命名为:spring-boot-starter-*
  • 第三方提供场景:命名为:*-spring-boot-starter
2. 简化开发:无需编写任何配置,直接开发业务
3. 简化配置:application.properties
  • 集中式管理配置。只需要修改这个文件就行 。
  • 配置基本都有默认值
  • 能写的所有配置都在: Common Application Properties
4. 简化部署:打包为可执行的jar包,只要有java环境即可。
5. 简化运维

修改配置(外部放一个application.properties文件)、监控、健康检查。


上述各步骤,还可以简化,不用手动创建各文件——>Spring Initializr 创建向导,一键创建好整个项目结构

还是new Module,但此时选择Spring Initializr:

需要什么,此处就选什么,create: 

目录结构如下,很多文件和内容都已经准备好:

Initializr02Application:主程序

resources/static:静态资源,图片、JS、CSS等

resource/template:页面模板

application.properties:配置文件

创建同样的控制类,相应hi

package com.circle.boot.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**** @author circle* @date 2024/4/6* @Description */@RestController
public class HelloController {@GetMapping("/hi")public String hello(){return "Hi,Spring Boot 3!";}
}

 启动测试:

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

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

相关文章

动手学深度学习 | Jupyter Notebook 打开指定目录

目录 1 下载课件代码 2 在目录中打开 3 展示目录失败 3.1 问题分析 3.2 问题解决 ⚠️ 写在前面&#xff1a; 无语子&#xff0c;打开个目录花了我一天时间下文中提到的 “d2l-zh” 和 “pytorch” 均为目录名jupyter notebook 的安装请参考其它博客 1 下载课件代码…

计算机出现msvcr110.dll丢失是什么意思?七种方法解决msvcr110.dll丢失

msvcr110.dll文件是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;由Microsoft Corporation开发。它是Visual C Redistributable for Visual Studio 2012的必要部分&#xff0c;包含了C运行时库函数的代码&#xff0c;这些函数为执行C/C应用程序提供了基础服务。这…

基于Socket简单的TCP网络程序

⭐小白苦学IT的博客主页 ⭐初学者必看&#xff1a;Linux操作系统入门 ⭐代码仓库&#xff1a;Linux代码仓库 ❤关注我一起讨论和学习Linux系统 TCP单例模式的多线程版本的英汉互译服务器 我们先来认识一下与udp服务器实现的不同的接口&#xff1a; TCP服务器端 socket()&…

设置你的第一个React应用

目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…

wireshark数据流分析学习日记day3-从 Pcap 导出对象

从 HTTP 流量导出文件 过滤http请求 发现get请求上传了两个文件 保存即可 也可以保存网页 点击保存 改文件名为html结尾以便于访问 请谨慎使用此方法。如果从 pcap 中提取恶意 HTML 代码并在 Web 浏览器中查看它&#xff0c;则 HTML 可能会调用恶意域&#xff0c;这就是为什么…

HTML——5.表单、框架、颜色

一、表单 HTML 表单用于在网页中收集用户输入的数据&#xff0c;例如登录信息、搜索查询等。HTML 提供了一系列的表单元素&#xff0c;允许用户输入文本、选择选项、提交数据等。 <!DOCTYPE html> <html lang"en"> <head> <meta charset&q…

01.IDEA中出现Cannot resolve symbol ‘SpringApplication异常

试了很多次&#xff0c;看了这篇文章终于发现了问题。IDEA解决springboot工程中Cannot resolve symbol SpringApplication异常-CSDN博客 我存在的问题在于Maven home path有误&#xff0c;改正之后就没有问题&#xff0c;不标红了。

C语言实现快速排序算法

1. 什么是快速排序算法 快速排序的核心思想是通过分治法&#xff08;Divide and Conquer&#xff09;来实现排序。 算法的基本步骤是: 1. 选择一个基准值&#xff08;通常是数组中的某个元素&#xff09;&#xff0c;将数组分成两部分&#xff0c;使得左边的部分所有元素都小于…

RabbitMQ3.13.x之六_RabbitMQ使用场景

RabbitMQ3.13.x之六_RabbitMQ使用场景 文章目录 RabbitMQ3.13.x之六_RabbitMQ使用场景1. 为什么选择 RabbitMQ&#xff1f;1. 可互操作2. 灵活3. 可靠 2. 常见用户案例1. 服务解耦2. 远程过程调用3. 流处理4. 物联网 1. 为什么选择 RabbitMQ&#xff1f; RabbitMQ 是一个可靠且…

C语言 | Leetcode C语言题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; int myAtoi(char * s){int i0;int out0;int pol1;int lenstrlen(s);if(len0) return 0;while(s[i] ) i; //删除空格if(s[i]-){ //判断正负pol-1;i;}else if(s[i]){pol1;i;}else{pol1;}while(s[i]!\0){if(s[i]<0||s[i]>9){ /…

【智能算法】跳蛛优化算法(AOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;H Peraza-Vzquez等人受到跳蛛狩猎行为启发&#xff0c;提出了跳蛛优化算法&#xff08;Jumping Spider Optimization Algorithm&#xff0c;JSOA&#xff09;。 2.算法原理 2.1…

【Kaggle】练习赛《鲍鱼年龄预测》(上)

前言 上一篇文章&#xff0c;讲解了《肥胖风险的多类别预测》机器学习方面的文章&#xff0c;主要是多分类算法的运用&#xff0c;本文是一个回归的算法&#xff0c;本期是2024年4月份的题目《Regression with an Abalone Dataset》即《鲍鱼年龄预测》&#xff0c;在此分享高手…

C++数据结构与算法——回溯算法组合问题

C第二阶段——数据结构和算法&#xff0c;之前学过一点点数据结构&#xff0c;当时是基于Python来学习的&#xff0c;现在基于C查漏补缺&#xff0c;尤其是树的部分。这一部分计划一个月&#xff0c;主要利用代码随想录来学习&#xff0c;刷题使用力扣网站&#xff0c;不定时更…

特征增强自蒸馏卷积神经网络

目录 1.1 模型总体架构 1.2 特征增强金字塔模块 1.3 辅助分类器 1.1 模型总体架构 与自然图像相比&#xff0c;遥感场景图像地物较为复杂&#xff0c;具有类间相似度高和类内差异大的特点&#xff0c;这导致常用的网络模型难以有效学习遥感场景图像的表征特征。此外&#xf…

springboot之mybatisPlus多表查询及分页查询

文章目录 一、多表查询二、mybatis-plus条件查询三、分页查询 一、多表查询 可能会用到的注解 这里的场景是&#xff0c;查询每个用户及其所有的订单。就是查询你的id号的同时&#xff0c;把你所有的历史订单信息都拉出来。 表结构这样 CREATE TABLE User ( id INT PRIMARY…

【可靠性】陷阱电荷对TDDB影响的多尺度模拟

【From Accelerated to Operating Conditions: How Trapped Charge Impacts on TDDB in SiO2 and HfO2 Stacks】 文章总结&#xff1a; 本研究深入探讨了在SiO2和HfO2介质堆叠中&#xff0c;陷阱电荷对时间依赖介电击穿&#xff08;TDDB&#xff09;现象的影响。通过引入载流子…

位运算-191. 位1的个数- 136. 只出现一次的数字

位1的个数 已解答 简单 相关标签 相关企业 编写一个函数&#xff0c;输入是一个无符号整数&#xff08;以二进制串的形式&#xff09;&#xff0c;返回其二进制表达式中 设置位 的个数&#xff08;也被称为汉明重量&#xff09;。 示例 1&#xff1a; 输入&#xff1a;n 11 输…

Git 术语及中英文对照

完毕&#xff01;&#xff01;感谢您的收看 ----------★★历史博文集合★★---------- 我的零基础Python教程&#xff0c;Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字…

C++从入门到精通——类的定义及类的访问限定符和封装

类的定义及类的访问限定符和封装 前言一、类的定义类的两种定义方式成员变量命名规则的建议示例 二、类的访问限定符和封装访问限定符访问限定符说明C为什么要出现访问限定符例题 封装例题 前言 类的定义是面向对象编程中的基本概念&#xff0c;它描述了一类具有相同属性和方法…

MyBatis-Plus的学习笔记

MyBatis-Plus 一、MyBatis-Plus快速入门 1.1 简介 课程版本&#xff1a;3.5.3.1 https://baomidou.com/ MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&…