Spring Boot快速入门

news2024/11/20 14:20:45

目录

1、Spring Boot概述

1.1、什么是Spring Boot

1.2、Spring Boot的特点

2、Spring Boot快速入门

2.1、起步依赖

2.2、创建启动类

2.3、测试启动类

2.4、自定义banner

2.5、自动配置原理

2.6、启动类注解 

3、Spring Boot整合SpringMVC

3.1、Controller类

3.2、注意事项

3.3、热部署

3.4、application.properties配置文件

3.5、application.yml配置文件

3.6、多环境配置文件

3.7、Spring Boot访问jsp

4、快速构建Spring Initializr

4.1、方式一:官方模版

4.2、方式二:阿里云模版


 

1、Spring Boot概述

1.1、什么是Spring Boot

Spring 诞生时是 Java 企业版(Java Enterprise Edition,JEE,也称 J2EE)的轻量级代替品。无需开发重量级的 Enterprise JavaBean(EJB),Spring 为企业级 Java 开发提供了一种 相对简单的方法,通过依赖注入和面向切面编程,用简单的 Java 对象(Plain Old Java Object, POJO)实现了 EJB 的功能。

虽然 Spring 的组件代码是轻量级的,但它的配置却是重量级的。一开始,Spring 用 XML 配置,而且是很多 XML 配置。Spring 2.5 引入了基于注解的组件扫描,这消除了大量针对 应用程序自身组件的显式 XML 配置。Spring 3.0 引入了基于 Java 的配置,这是一种类型安 全的可重构配置方式,可以代替 XML。所有这些配置都代表了开发时的损耗。因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻 辑的时间。和所有框架一样,Spring 实用,但与此同时它要求的回报也不少。 除此之外,项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之 而来的不兼容问题毫无疑问会是生产力杀手。

Spring Boot 是 Spring 社区较新的一个项目。该项目的目的是帮助开发者更容易的创建  Spring 的应用程序和服务,让更多人的人更快的对 Spring 进行入门体验,为 Spring 生态系统提供了一种固定的、约定优于配置风格的框架。

1.2、Spring Boot的特点

1、为基于 Spring 的开发提供更快的入门体验。

2、开箱即用,没有代码生成,也无需 XML 配置。同时也可以修改默认值来满足特定的需求。

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

4、Spring Boot 并不是不对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

2、Spring Boot快速入门

2.1、起步依赖

创建 Maven 工程 springboot_demo 打包方式是jar即可

<packaging>jar</packaging>

在 pom.xml 中添加如下依赖

 <!--继承springboot父类依赖-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-parent</artifactId>
   <version>2.3.7.RELEASE</version>
</parent>
<dependencies>
  <!--springboot-web启动包-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
</dependencies>

可以点击右侧边栏中的Maven,可以看到springboot-web的启动jar包中有很多其他jar包。因为这些 jar 包被我们刚才引入的 spring-boot-starter-web 所引用了,所以我们引用 spring-boot-starter-web 后会自动把依赖传 递过来。 其中就是因为这个jar包帮我们来集成了很多配置

2.2、创建启动类

在src/main下java包中cn.itssl下创建一个SpringbootApplication启动类,这个类名可以随便起,我是为了区分@SpringBootApplication注解才起为SpringbootApplication。

@SpringBootApplication
public class SpringbootApplication {
    public static void main(String[] args) {
        //调用框架中的SpringApplication的run方法
        SpringApplication.run(SpringbootApplication.class);
    }
}

2.3、测试启动类

点击启动类的绿色箭头启动

可以看到一个spring的logo和一些日志信息, 当看到有耗时多少毫秒启动完成就代表成功运行了,可以看出springboot的入门是非常简单的,完全不需要过于繁琐的配置文件等一系列操作。

2.4、自定义banner

下面给大家介绍一个好玩的东西,就是可以随便修改启动时的spring的logo

这个网站里有各种各样的ASCII艺术图,可以拷贝或者下载

网址如下:

Ascii艺术字实现个性化Spring Boot启动banner图案,轻松修改更换banner.txt文件内容,收集了丰富的banner艺术字和图,并且支持中文banner下载,让你的banner好玩儿更有意思。-bootschool.net收集了各种有意思的Banner,如卡通、美女、永不宕机佛祖Banner等https://www.bootschool.net/ascii-art;bsid=785BFCC6B78E54E836DEECF9114151A4 在resources包下创建一个文件为banner.txt,注意:这个文件名是固定的,必须为banner.txt。

把上面的复制到banner.txt保存,重新运行启动类 

2.5、自动配置原理

Spring Boot的核心依赖是spring-boot-dependencies

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-dependencies</artifactId>
  <version>2.3.7.RELEASE</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

我们可以点开它,看看依赖的底层实现,发现全是各种依赖和版本以及插件,这里面把程序员可能用到的依赖全部整合到了这里。

2.6、启动类注解 

@SpringBootConfiguration
    |-- @Configuration    spring的配置类
        |-- @Component    spring扫描bean的组件
        
@EnableAutoConfiguration  根据依赖来自动配置
    |-- @AutoConfigurationPackage 自动配置包
    |-- @Import(AutoConfigurationImportSelector.class)  导入选择器,收集和注册特定场景相关的bean定义
    
@ComponentScan 告诉 Spring 哪个 packages 的用注解标识的类 会被 spring 自动扫描并 且装入 bean 容器。
               其实做的事情就是告诉Spring从哪里找到bean

3、Spring Boot整合SpringMVC

3.1、Controller类

我们现在开始使用 spring MVC 框架,实现 json 数据的输出。如果按照我们原来的做法,需 要在 web.xml 中添加一个 DispatcherServlet 的配置,再添加一个 spring 的配置文件,配置文件中需要添加如下配置

但是我们用 Spring Boot,这一切都省了。我们直接写 Controller 类

@RestController
public class BootWeb {

    @RequestMapping("hello")
    public String test(){
        return "hello world";
    }
}

运行启动类,直接访问路径 

3.2、注意事项

包的结构:主程序所在的包及其下面的所有子包里面的组件都会默认扫描进来

要求启动类必须大于等于当前包及其子包,如下即可

3.3、热部署

我们在开发中反复修改类、页面等资源,每次修改后都是需要重新启动才生效,这样每次启动都很麻烦,浪费了大量的时间,能不能在我修改代码后不重启就能生效呢?可以,在 pom.xml 中添加如下配置就可以实现这样的功能,我们称之为热部署。

<!--热部署-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <optional>true</optional>
</dependency>

使用组合键 ctrl + shift + alt +/ 搜索 Registry

3.4、application.properties配置文件

在 src/main/resources 下创建 application.propertie

#配置springboot端口
server.port=8080

#配置项目的访问路径
server.servlet.context-path=/

3.5、application.yml配置文件

yaml是一种直观的能够被计算机识别的数据序列化格式, 容易被人类阅读,yaml类似于xml,但语法更简洁;它是一种冒号,空格,换行的数据格式,对大小写第三,不允许tab只允许空格,字符串无需添加引号。YAML 的配置文件后缀为 .yml

语法:

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进不允许使用tab,只允许空格

  • 缩进的空格数不重要,只要相同层级的元素左对齐即可

  • '#'表示注释

#配置端口和项目访问路径
server:
  port: 8082
  servlet:
    context-path: /

注意事项:如果两个application.properties和application.yml同时存在,优先加载application.properties,properties的配置文件优先级要高于yml。实际开发两种方式均可,根据自己习惯。

3.6、多环境配置文件

今后我们在开发过程中有很多种开发环境那么可能就有很多个环境的配置文件。那么如何进行配置呢?

创建多个yml文件,分别给dev、online、test分配8081、8082、8083端口号,避免重复

server:
  port: 8080
  servlet:
    context-path: /
spring:
  application:
    name: springbootdemo

  #在主配置application.yml文件中把其他的配置文件进行激活
 
  devtools:
    restart:
      additional-paths: src/main/java
  #激活开发环境 , 相当于引入application-dev.yml环境
  profiles:
    active:  dev

可以发现,启动时端口号就被该为了8081端口,只要active激活那个配置文件,就以那个环境的端口号启动。如果激活环境与当前环境相同,走激活环境。

3.7、Spring Boot访问jsp

添加依赖

因为SpringBoot不支持jsp,必须手动去添加

<!-- servlet,jsp -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <scope>provided</scope>
</dependency>
<!--tomcat支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

jsp页面只能在src/main/webapp下访问,在WEB-INF下创建一个views包,新建一个hello.jsp页面 

在yml配置文件中配置视图解析器,添加前缀后缀

#views
spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

Controller类进行测试 

@Controller
public class JspController {
	
	@RequestMapping("/index")
	public String index(HttpServletResponse response, HttpServletRequest request ){
		
		request.setAttribute("msg", "这是springboot集成jsp");
		
		// return "index";//访问的是视图解析器的jsp
		// return "forward:/hello.jsp";//访问的是外部的jsp
     	return "redirect:/hello.jsp";
		
	}
}

如果编译不了或者找不到jsp的,解决方案如下,在pom.xml中添加bulid

<!--编译webapp下的jsp文件-->
<build>
       <resource>
           <directory>src/main/webapp</directory>
           <targetPath>META-INF/resources</targetPath>
           <includes>
               <include>**/*.*</include>
           </includes>
       </resource>
   </resources>
</build>

4、快速构建Spring Initializr

4.1、方式一:官方模版

选择第一个官方默认模版,下一步,可能会比较慢,如果实在加载不出来就使用方式二阿里云的模版,因为阿里云是国内的,相对来说会快很多。

finish就创建完毕了

4.2、方式二:阿里云模版

把下面的地址填写到框里

https://start.aliyun.com

以下步骤和官方的一致,我这里不再演示。

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

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

相关文章

效率为王,居家办公必备的5款小工具

疫情反反复复&#xff0c;好多小伙伴依然处在居家办公的境地中&#xff0c;所以像小编一样早早的干完活躺床上是非常有必要的。 1.极速复制粘贴工具——TeraCopy TeraCopy是一款老牌免费的 Windows 文件复制/移动辅助加速工具软件&#xff0c;复制文件时若是遇上数据有问题也…

《FFmpeg Basics》中文版-03-比特率/帧率/文件大小

正文 比特率和帧速率是视频的基本特征&#xff0c;它们的正确设置对整体视频质量非常重要。 如果我们知道所有包含的媒体流的比特率和持续时间&#xff0c;我们可以计算输出文件的最终大小。 由于在使用FFmpeg工具时对帧速率和比特率的理解很重要&#xff0c;因此包含每个术语…

文件存储解决方案-云存储阿里 OSS

文件存储解决方案-云存储阿里 OSS 1.文件存储&#xff08;上传&#xff09;解决方案讨论 1.图解 文件存储解决方案-云存储阿里 OSS 解读上图 普通上传并不是分布式&#xff0c;也不是集群&#xff0c;可用性不高普通上传的分布式情况&#xff0c;使用了集群&#xff0c;但是…

数据结构每日亿题(七)

文章目录一题目二.思路2.1链表2.2数组三.代码一题目 原题传送门&#xff1a;力扣 题目&#xff1a; 题目的意思是让你写一个数据结构&#xff0c;这个结构的特点和队列一样先进先出&#xff0c;然后完成&#xff1a;判断是否为空&#xff0c;判断是否为满&#xff0c;添加一个…

实验29:循迹传感器实验

今天讲一个基本实验 循迹实验 循迹传感器的原理是: CTRT5000传感器的红外发射管不断发射红外光。由于黑色吸收光线,当红外发射管照射黑色表面时,反射光较少,接收管接收的红外线较少。这表明黑色吸收光线的强度大,那么比较器输出高电平,指示灯熄灭。同样,当它在白色表面…

MCE虚拟筛选化合物库

Discovery Diversity Sets 新颖的化合物库&#xff01; 药物筛选是发现药物先导物的重要途径&#xff0c;好的化合物库则是药物筛选的必备武器。MCE 拥有丰富的数据库资源&#xff0c;助力您的药物筛选研究&#xff01;药物筛选研究与化合物新颖性密切相关。Discovery Divers…

单目标应用:求解旅行商问题(TSP)的猎豹优化算法(The Cheetah Optimizer,CO)提供MATLAB代码

一、猎豹优化算法 猎豹优化算法&#xff08;The Cheetah Optimizer&#xff0c;CO&#xff09;由MohammadAminAkbari等人于2022年提出&#xff0c;该算法性能高效&#xff0c;思路新颖。 参考文献&#xff1a; Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…

Linux实战案例——使用LNMP+WordPress搭建个人博客网站

一、案例目标 了解 LNMP 环境的组成。 了解 LNMP 环境的部署与安装。 了解 WordPress 应用的部署与使用二、环境介绍 1.LNMP LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux&#xff0c;N指Nginx&#xff0c;M一般指MySQL&#xff0c;也…

技术分享 | TiUP工具 - TiDB集群滚动升级核心流程解析

作者&#xff1a;贲绍华 爱可生研发中心工程师&#xff0c;负责项目的需求与维护工作。其他身份&#xff1a;柯基铲屎官。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 引言&#xff1a…

运维工程师怎么找兼职?什么样的兼职合适?

运维老哥们应该都知道&#xff0c;这个岗位其实是个很宽泛的定义&#xff0c;不同公司对运维的要求也不一样。有些公司所谓运维就是桌面helpdesk ,有些公司就是网管。基本上从修电脑到会写点脚本做自动化&#xff0c;各个层次的都有。现状就是&#xff0c;有少数公司或者大厂的…

基于Django的图书交易系统

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;图书交易系统也不例外&#xff0c;但目前国内的有些公司仍然都使用人工管理&#xff0c;图书销量越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化…

第五课 算术运算

一、加法与减法 经过上次课的学习&#xff0c;我们已经学会了该如何在控制台中输出我们想要的内容了&#xff0c;但是计算机计算机&#xff0c;最早其实是用来进行计算的&#xff0c;Python能做这事吗&#xff0c;我们来试试。 看到这结果&#xff0c;估计很多同学就该说了&…

【每周研报复现】基于阻力支撑相对强度(RSRS)的市场择时

原创文章第106篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 今天要复现的研报是&#xff1a;”光大证券_金融工程深度&#xff1a;基于阻力支撑相对强度&#xff08;RSRS&#xff09;的市场择时——技术择时系列报告之一“。 研报核心…

写个注解帮你净化使用分布式锁的重复操作

RedissonAop实现分布式锁 前言 简介 Aop的意义 AOP 旨在从业务逻辑中分离出来通用逻辑&#xff0c;切面实现了跨越多种类型和对象的关注点&#xff08;例如事务管理、日志记录、权限控制&#xff09;的模块化。 例子 就以这段代码为例子&#xff0c;这段代码总是回去获取锁之…

【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别

关于height值设置和显示不同的原因 height: 100px; CSS中把高度设置为100px&#xff0c;但是实际测量发现高度为125px 这个是因为&#xff1a;笔记本默认显示大小为125%&#xff0c;所以100的125%就是125. 还有一点&#xff0c;在你写网页时&#xff0c;要注意网页的缩放一定…

050_阵列天线方向图乘积原理

天线增益概念。原创不易&#xff0c;恐有错误&#xff0c;恳请读者指正。碎片三分钟逛电巢App&#xff0c;收获一丢丢。 天线定向性(directivity) 假设理想的无定向性天线&#xff0c;在远场区的3D球面空间各方向的辐射功率都相等&#xff0c;则定义球面等辐射功率的方向图的定…

Linux内存泄露案例分析和内存管理分享

作者&#xff1a;李遵举 一、问题 近期我们运维同事接到线上LB&#xff08;负载均衡&#xff09;服务内存报警&#xff0c;运维同事反馈说LB集群有部分机器的内存使用率超过80%&#xff0c;有的甚至超过90%&#xff0c;而且内存使用率还再不停的增长。接到内存报警的消息&…

代码随想录day56|583. 两个字符串的删除操作|72. 编辑距离|编辑距离总结篇|Golang

代码随想录day56 考试周了解一下 目录 代码随想录day56 583. 两个字符串的删除操作 72. 编辑距离 动态规划之编辑距离总结篇 583. 两个字符串的删除操作 思路 动态规划一 本题和动态规划&#xff1a;115.不同的子序列相比&#xff0c;其实就是两个字符串都可以删除了&am…

2023职教高考报名开启,报考人数继续增加

进入11月起&#xff0c;各地区2023年职教高考报名已经陆续开始&#xff0c;报考考生主要以中职学校学生为主。根据南京日报的报道&#xff0c;11月1日就启动的江苏省职教高考报名&#xff0c;吸引了不少家长和学生的关注&#xff0c;有些专业的报名人数已经比2022年翻了不止一倍…

Flutter Hooks — 快速了解

Flutter Hooks — 快速了解 前言 Hooks,直译过来就是"钩子"&#xff0c;是前端 React 框架加入的特性&#xff0c;用来分离状态逻辑和视图逻辑。现在这个特性并不只局限在于 React 框架中&#xff0c;其它前端框架也在借鉴。 我们都知道在 FLutter 开发中的一大痛点就…