知方号

知方号

SpringBoot学习笔记(一)<快速解析名字所包含意义是什么>

SpringBoot学习笔记(一)

上周Redis的学习终于告一段落,这周就要开始学习SpringBoot部分的内容了,这部分的内容我觉得很重要,毕竟SpringBoot是现在十分主流的开发框架,学就完事了。希望还有不懂的小伙伴也能够尽快掌握SpringBoot的使用。

SpringBoot介绍:SpringBoot是基于Spring进行开发,SpringBoot本身不提供Spring框架的核心特性与扩展功能,他只是用于快速,敏捷地开发一个Spring框架下的应用程序。是用来简化Spring框架中的配置的。

SpringBoot的核心思想是约定大于配置,意思是说我们可以不需要进行很复杂的配置,但前提是我们必须要按照SpringBoot官方约定的开发方式来开发,这会让我们减少很多以前需要自定义的配置。

简单了解一下SpringBoot之后我们来创建一个SpringBoot项目,来看看他到底如何在项目中来体现他的核心思想。

SpringBoot项目创建教程

我们先创建一个SpringBoot项目,由于我之前发布过文章,这里就不多赘述了,如果您用的是企业版IDEA则无需安装插件,但步骤都是一样的,实在搞不懂也可以在Spring官网进行项目创建。

SpringBoot框架浅析

对于初学者的小伙伴们来说,创建了一个SpringBoot项目后,最想知道的就是应该就是如何使用SpringBoot框架了。我先简单说一下SpringBoot项目框架都有哪些内容吧。

当我们打开项目后,发现项目结构是如下所示:

 接下来我们一个一个的来解释一下各个文件的作用

文件夹/文件名作用.idea存放项目的配置信息,包括历史记录,版本控制信息等.mvn存放maven-wrapper的相关文件用于mvnwsrc我们工作中主要使用的文件夹,存放我们开发的代码.gitgnoregit的配置文件,可以配置提交git的时候哪些类型的文件不需要提交项目名.imlintellij idea的工程配置文件,里面是当前project的一些配置信息HELP.md项目的帮助文档,相当于记事本mvnw主要是用于当用户使用maven的命令时,发现本地的maven版本与.mvn文件夹下的maven-wrapper.properties文件中的maven版本不一致,就会下载maven-wrapper.properties文件中的maven版本,然后来执行maven命令,用于Linux环境mvnw.cmd同上,用于Windows环境pom.xmlmaven依赖的配置

没有学习过Maven的同学到这里可能就需要先去学习一下Maven的使用了。

Maven在工作中的使用

这篇文章是我比较早学习的Maven笔记,有需要的小伙伴可以学习一下。

介绍完项目结构之后我们再来介绍一下SpringBoot项目的pom.xml文件中必须要用到的依赖。

4.0.0org.springframework.bootspring-boot-starter-parent2.6.4 com.springBoothelloworld0.0.1-SNAPSHOThelloworldDemo project for Spring Boot1.8org.springframework.bootspring-boot-starter-weborg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-maven-pluginorg.projectlomboklombok

依赖我们介绍完了,现在就要开始介绍要核心的内容src文件夹了,哈哈

 src文件夹下面又有两个文件夹,其中main文件夹是用来进行日常应用程序开发的。test文件夹是用来让我们进行单元测试使用的。

我们可以发现main与test两个文件夹下的文件结构类似,只是main文件夹路径下还有一个resources文件夹,resources文件夹是我们用来编写项目配置的目录,无论主程序启动还是测试程序启动,都共用一套配置文件。

接下来我们再分析一下main文件夹。

 main文件夹中的两个文件夹其中一个是用来存放java文件的java文件夹,另一个是用来存放配置文件的resources文件夹。

在java文件夹下还有一个com.springBoot.helloworld的包,这个包下有一个HelloworldApplication的java类。

这个java类就是SpringBoot框架中的启动类,在后续我们想要在本地启动SpringBoot项目并运行的话,我们就要执行这个类,执行方法如下:

1.ctrl+shift+F10方式启动

2.鼠标右键点击HelloworldApplication类,找到如下按钮,点击启动

了解大概的SpringBoot运行的方式后,我们就可以自己先调用一个接口玩一玩了。

在工作中我们项目的文件目录格式大概是这样的,Java类必须要与Application启动类(我这里是HeoolworldApplication)同级,否则不会被SpringBoot扫描到,这就展现了约定大于配置,我们不需要配置项目指定扫描哪些包,我们只需要按照约定办事就好了。

从上到下依次为控制器文件夹(Controller),持久层接口文件夹(mapper),实体类文件夹(pojo),业务类文件夹(service),我们只需要在控制器创建一个java文件,此时就可以使用SpringBoot在本地进行接口调用了。

package com.springBoot.helloworld.controller.test1;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;/** * @author Me * @date 2023/3/19 15:14 */@RestControllerpublic class springBootController { @GetMapping("/hello") public String test() { return "hello world"; }}

ctrl+shift+F10启动项目

像我这样启动项目之后,我们访问http://localhost:8080/hello,就会返回我们的字符串hello world。

此时我们第一个接口就调用成功了。

SpringBoot修改端口号及启动时图片

我们启动SpringBoot项目默认使用的端口是8080,接触过Tomcat的小伙伴们应该知道,8080端口是Tomcat的默认端口,那么我们应该如何修改这个端口号呢?其实很简单

我们打开main —> resources —> application.properties文件,添加server.port = 任意端口号后重新启动项目就可以了。

我们在创建自己的项目的时候启动会看到Spring的图标,如下图所示

这也是可以修改的,同样是约定大于配置,我们只需要在resource目录下添加一个banner.txt文件,启动时的SpringLogo就会被替换成我们txt文件中的内容。(只能在resource目录下直接添加文件才会生效)。

 

只要使用banner这个SpringBoot官方约定的文件名称,就会生效。效果图也放上了嘻嘻

 最后给大家推荐一个我认为还不错的自动生成banner的网站吧,可以自定义转换文字,也可以使用其他人上传的内容。

banner在线生成

SpringBoot父项目依赖

上面我们说pom.xml文件的时候提到了每个未自定义父项目的SpringBoot项目都会默认定义一个父项目,那么这个父项目是干嘛的呢?

我们发现一般的项目都是有groupId、artifactId、version三个标签的,但是我们使用的web启动器却只有两个标签。

其实是因为我们使用的web依赖是继承自父类starter-parent依赖里面的,由starter-parent依赖来指定版本,这样做的好处就是不需要自己再自定义了,也不会因为不确定该选择什么版本而发愁了。

我们点进starter-parent依赖查看源码,我们发现starter-parent项目又依赖了另一个项目。

此时我们再来看看这个项目的源码,我们就会发现

这个文件中放置了很多我们可能会用到的依赖,SpringBoot都为我们选择好了版本,我们在使用的过程中只需要引入即可。

SpringBoot启动时加载的自动配置类的位置(导入对应依赖后,该文件中的配置才会生效)

有兴趣跟基础的小伙伴们我建议多看看这个包下的源码,很有帮助哦

 SpringBoot配置文件

上面我已经截图了,说明SpringBoot只识别三种类型的配置文件,分别为:yml,yaml,properties三种类型(后加载的会替代先加载的,也就是如果同时配置了yml文件与properties文件,则会使用properties类型的文件) 。

SpringBoot配置文件的位置生效的优先级排序为

1.项目文件夹 —> config文件夹 —> application

2.项目文件夹 —> application

3.项目文件夹 —> src文件夹 —> main文件夹 —> resource文件夹 —> config文件夹 —> application

4.项目文件夹 —> src文件夹 —> main文件夹 —> resource文件夹 —> application

 那么这三种类型的配置文件我们应该如何选择呢?

答案是使用yaml或yml,properties文件的功能比较少,仅支持KV键值对的配置,并且多配置的情况下看起来没有yaml文件这么清新舒服,并且properties文件中写中文有时会出现乱码。在properties文件中如果您想查询Spring的配置,可能会查找到很多个,但在yaml中我们只会写一个,例如:

 yaml文件格式看起来更加简洁舒服,但是在yaml文件与yml文件中我们应该如何选择呢?其实yaml文件与yml文件是一样的,但是说起来yaml更加正规一点,yml只是yaml文件格式的一种后缀文件类型,就例如我们的Excel,可能是.xls结尾也可能是.xlsx结尾,但是没有本质的区别。但是相对于yaml格式来说,别看yml只是节省了一个字符,受欢迎程度可是yaml文件没办法比的。

 在工作中,我们公司的项目使用的配置文件就是以yml为后缀的,所以小伙伴们不用纠结这两个文件后缀啦,我已经帮你们纠结完了,哈哈。

最后在写一些yml文件的语法吧(仅供了解,一般使用的不多,因为毕竟是配置文件嘛)

# 表示使用哪个配置文件进行加载# 如果不在同一个文件中写入,而是真正通过多个文件写入的话,我们可以创建application-xxx.yml文件格式# 此时我们只要在active后面放入我们指定加载的文件的后缀xxx即可spring: profiles: active: dev# 设置为true则启动时加载的所有配置信息都会打印在控制台debug: true # 同一个文件中不可以有两个同级相同的key,但是---表示下面的内容是另一个文件里面的,所以不会有冲突---# 配置文件中也可以使用随机数random: ${random.int}/${random.uuid}server: port: 8088# SpringBoot2.4版本前的指定文件名的方法spring: profile: dev# 对象类型1#spring:# datasource:# driver-class-name: com.mysql.cj.jdbc.Driver# username: test# password: 123456# url: 127.0.0.1:3306# 对象类型2# datasource: {driver-class-name: com.mysql.cj.jdbc.Driver, username: test, password: 123456, url: 127.0.0.1:3306}# 数组写法1array: - element1 - element2 - element3# 同一个文件中不可以有两个同级相同的key,但是---表示下面的内容是另一个文件里面的,所以不会有冲突---# 数组写法2array: [element1, element2, element3]# SpringBoot2.4为了支持K8S做出的修改,也是官方最新推荐的方式spring: config: activate: on-profile: prodserver: port: 8099

在SpringBoot的开发中我们难免要用Java代码去手动编写一些配置类,但是我们配置的内容希望能够在配置文件中体现出来,此时我们就需要Java代码与yml文件互通,那么如何互通呢?我这里针对于上述配置文件进行几个注解的解释。

// 此注解放在类上,等于说此类就等于prefix后面的key(此类需要注册Bean)// 会根据名称对应将类的属性set进配置文件下spring.datasource下面的属性的值// ConfigurationProperties注解支持松散绑定,也就是说,配置文件中的key-name可以与Java类中的keyName进行映射绑定@Component@ConfigurationProperties(prefix = "spring.datasource")public class SpringDatasource{ private String driverClassName; private String username; private String password; private String url;}// 我们可以自定义加载指定的配置文件// 例如我们创建了一个test.yml文件,我们想加载里面的name值给我的Java对象@Component@PropertySource(value = "classpath:test.yml")public class SpringDatasource{ @Value("${name}") private String driver-class-name; private String username; private String password; private String url;}// 或者使用value注解的方式放入值// 由于Value绑定是直接一对一的属性绑定,所以Java类中的属性名可以随意规定@Componentpublic class SpringDatasource{ @Value("${spring.datasource.driver-class-name}") private String connectName; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.url}") private String url;}

SpringBoot静态资源的位置生效优先级排序为

1.项目文件夹 —> src文件夹 —> main文件夹 —> resource文件夹 —> resource文件夹 —> js

2.项目文件夹 —> src文件夹 —> main文件夹 —> resource文件夹 —> static文件夹 —> js

3.项目文件夹 —> src文件夹 —> main文件夹 —> resource文件夹 —> public文件夹 —> js

如果我们在配置文件中配置了如下内容,则使用自定义路径,上述路径失效,自定义的方式尽量不要使用,SpringBoot给我们的这几个文件夹就够用了。

spring: mvc: static-path-patten:

SpringBoot可以进行数据校验,这个我单独发布了一篇文章,因为可能需要后期继续更新,有想要了解的小伙伴可以戳进去看一看。

SpringBoot学习专题——数据校验

另外基本的部分还有一些Thymeleaf模板引擎的内容,但是现在一般都使用前后端分离架构,所以这部分我就没有仔细的进行学习,直接简单的了解了一下,有兴趣同学就需要自己研究啦,如果自己做练习在单机SpringBoot项目中使用还是不错的。

下一篇请戳↓

SpringBoot学习笔记(二)——集成持久层框架JDBC、Mybatis

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。