SpringBoot学习1:创建SpringBoot工程+自动装配的原理+配置文件(yaml)+ 能够配置什么

简介: SpringBoot学习1:创建SpringBoot工程+自动装配的原理+配置文件(yaml)+ 能够配置什么

创建springBoot工程

image.png

经过这样的步骤我们即可创建一个简单的springBooot项目,我们在它的同级目录下创建controller层,这样我们就实现了一个简单的api接口了

image.png

单击右上角即可运行

项目打包

此时运行maven的install语句即可将项目打包

image.png

之后使用cmd cd到项目编译后的路径下,运行 java -jar xxxxx.jar即可运行

image.png

运行后访问对应地址即可

image.png

自动装配原理

这部分没有理解的很深,大致认为其流程是这样的的,

1)spring事先写好了一些常用的bean,把这些bean放在一个配置文件中

2)spring创建了AutoConfigurationImportSelector类并实现了ImportSelector(spring会把实现了ImportSelector接口类的selectImports的返回值注入到IOC容器中)

3)AutoConfigurationMetadataLoader.loadMetadata 方法从  META-INF/spring-autoconfigure-metadata.properties  文件中加载自动装配的条件元数据,也就是只有满足条件的 Bean 才会被装配

4)autoConfigurationEntry.getConfigurations()方法收集所有符合条件的配置类,进行自动装配

5)Spring使用各种方法去重,去掉不需要的返回集合

6)在@EnableAutoConfiguration 注解内进行import(autoConfigurationEntry)

7)将@EnableAutoConfiguration注解封装在@SpringBootApplication注解内

8)给@SpringBootApplication注解添加@SpringBootConfiguration扫描当前项目下的注解

下面这篇文章写的很好,大家可以看看

https://xie.infoq.cn/article/eee68bfb4f1d3b9d59be1631a2

yaml写法

在springboot项目中Idea默认给我们创建的是application.properties来作为配置文件,而springboot推荐我们使用yaml来做配置,我们可以把application.properties删除掉,创建application.yaml文件

image.png

至于yaml的写法如下图所示

image.png

注意 :后面需添加空格,否则语法错误

如配置启动时的端口号

image.png

传统的对属性进行赋值

创建一个pojo类对其赋值

image.png

在test类中进行测试,发现正常运行

@SpringBootTest
class MyFirstProjectApplicationTests {
    @Autowired
    Dog dog;
    @Test
    void contextLoads() {
        System.out.println(dog);
    }
}

image.png

至此传统方法创建已经完成

使用yaml注入

样例1

在application.yaml中添加

dog:
  name: 王二花
  age: 99

更改dog类中代码为

@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
    String name;
    int age;
    public Dog() {
    }
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
get/set。。。。。。。。。。。。。。。。
}

再运行测试发现成功注入

image.png

虽然可以正常运行,但是Dog类中会爆红,虽然不影响运行,但还是有些碍眼

image.png

此时只要导入如下依赖即可解决

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

样例2

在样例1的基础上创建persion类

/**
 * @author 化粪池堵塞的凶手
 */
@Component
@ConfigurationProperties(prefix = "persion")
public class Persion {
    String name;
    int age;
    boolean happy;
    Date date;
    List list;
    Dog dog;
    get/set/构造/tostring。。。。。。。。
}

更改yaml

persion:
  name: 葛帅批
  age: 19
  happy: true
  date: 2001/09/13
  list:
    - code
    - music
    - girl
  dog:
    name: 王大花
    age: 99

更改测试程序

@SpringBootTest
class MyFirstProjectApplicationTests {
    @Autowired
    Persion persion;
    @Test
    void contextLoads() {
        System.out.println(persion);
    }
}

运行结果:

image.png

JSR303校验

首先导入starter

spring-boot-starter-validation

这里的核心注解是@Validated//数据校验

我们修改上一个案例里的persion类:

package com.example.myfirstproject.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
/**
 * @author 化粪池堵塞的凶手
 */
@Component
@ConfigurationProperties(prefix = "persion")
@Validated//数据校验
public class Persion {
    @Email(message = "这不符合邮箱的规则") //依赖于@Validated
    String name;
    int age;
    boolean happy;
    Date date;
    List list;
    Dog dog;
    public Persion(String name, int age, boolean happy, Date date, List list, Dog dog) {
        this.name = name;
        this.age = age;
        this.happy = happy;
        this.date = date;
        this.list = list;
        this.dog = dog;
    }
}

此时再运行上面的测试会发生错误提示

向上翻可以看到:

image.png

将yaml改为如下

persion:
  name: 2898534520@qq.com
  age: 19
  happy: true
  date: 2001/09/13
  list:
    - code
    - music
    - girl
  dog:
    name: 王大花
    age: 99

此时便可以正常运行

在实际开发中的使用流程请参考:

https://cloud.tencent.com/developer/article/1735392

配置文件的位置

配置文件可以存在的位置,优先级如图所示,当同时存在时,优先级高的生效,而优先级低的相同配置无效

1为最高 4为最低

image.png

多环境配置的切换

创建多个配置文件,都使用application-xxx.yaml格式

在里面配置不同端口号

image.png

dev

server:
  port: 8082

test

server:
  port: 8081

这时在application.yaml中配置

spring:
  profiles:
    active: test

此时启动便会加载test中的配置

image.png

配置文件可以配置什么?

配置原理

上面自动装配原理的解析我们可以通过下面这样找到其自动装配的列表

image.png

最后指向了 META-INF/spring.factories这个文件在这个位置

image.png

里面写了自动装配的包

image.png

我们继续查看,发现他们都有这两个注解

其中要特别注意的是红色框中的注解

EnableConfigurationProperties会将后面配置有ConfigurationProperties注解的类通过配置文件赋值以实现之前案例的效果

https://developer.aliyun.com/article/671047

image.png

我们继续查看EnableConfigurationProperties里的参数指向哪里

image.png

发现他们指向的类都包含ConfigurationProperties注解

springboot就是通过此来进行配置的

我们可以在xml中尝试下

image.png

image.png

发现其中的配置都可以在这里找到

特殊配置

debug: true

配置了此类之后在启动项目时便会输出日志,来告诉我们那些类自动配置了,哪些没有自动配置

image.png

生效的 Positive matches:

image.png

未生效的 Negative matches:

image.png

排除的Exclusions:

image.png

无条件的 Unconditional classes:

image.png

           


相关文章
|
1月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
1月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
271 3
|
8月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2121 1
|
8月前
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
323 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
5月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
815 2
|
7月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
191 20
|
8月前
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
351 0
|
消息中间件 Java 数据库
解密Spring Boot:深入理解条件装配与条件注解
Spring Boot中的条件装配与条件注解提供了强大的工具,使得应用程序可以根据不同的条件动态装配Bean,从而实现灵活的配置和管理。通过合理使用这些条件注解,开发者可以根据实际需求动态调整应用的行为,提升代码的可维护性和可扩展性。希望本文能够帮助你深入理解Spring Boot中的条件装配与条件注解,在实际开发中更好地应用这些功能。
274 2
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
285 9
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
1579 2
下一篇
oss云网关配置