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的相关文件用于mvnw
src我们工作中主要使用的文件夹,存放我们开发的代码
.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文件中必须要用到的依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

<!--	父项目,每一个未自定义父项目的SpringBoot项目都会默认将此项目设置为父项目-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

<!--	自己项目的坐标,坐标是Maven项目里的概念,使用GAV三个标签来确定唯一的一个项目-->
	<groupId>com.springBoot</groupId>
	<artifactId>helloworld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>helloworld</name>
	<description>Demo project for Spring Boot</description>

<!--	这个小伙伴们应该都能明白,表示我们使用的java的版本-->
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		
<!--		SpringBootWeb开发的启动器(必须引入,否则项目都无法启动)-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

<!--		用于简易创建对象使用的依赖,不用太纠结,后续使用就明白了,比较简单-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

<!--		本地测试使用的依赖-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
<!--			用来打jar包的插件-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
<!--						由于lombok只在代码编译时产生作用,当代码编译完成后lombok就没有用了-->
<!--						所以官方的解决方式是添加此标签,表示去除掉lombok-->
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

依赖我们介绍完了,现在就要开始介绍要核心的内容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 2022/3/19 15:14
 */
@RestController
public 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只识别三种类型的配置文件,分别为:ymlyamlproperties三种类型(后加载的会替代先加载的,也就是如果同时配置了yml文件与properties文件则会使用properties类型的文件) 。

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

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

2.项目文件夹 —> application

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

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

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

答案是使用yaml或ymlproperties文件的功能比较少,仅支持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}

# 数组写法1
array:
  - element1
  - element2
  - element3

# 同一个文件中不可以有两个同级相同的key,但是---表示下面的内容是另一个文件里面的,所以不会有冲突
---
# 数组写法2
array: [element1, element2, element3]

# SpringBoot2.4为了支持K8S做出的修改,也是官方最新推荐的方式
spring:
  config:
    activate:
      on-profile: prod

server:
  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类中的属性名可以随意规定
@Component
public 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

  • 3
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值