SpringBoot 快速入门

SpringBoot 快速入门

  1. 创建空工程

  2. 在空工程下创建一个 maven工程

  3. 将该maven工程变成springboot 工程,只需要在pom文件中指定parent为 springboot的基础包

    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    ​
        <groupId>com.ztone</groupId>
        <artifactId>springboot-base-quick-01</artifactId>
        <version>1.0-SNAPSHOT</version>
    ​
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.0.5</version>
        </parent>
    ​
    </project>

    现在该工程就变成了 springboot 工程

  4. 导入 web 对应的启动器 依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    不用指定 版本号,因为在 parent中已经指定了这些启动器的版本号

  5. 创建项目的启动类

    在启动类上加注解 @SpringBootApplication

    在main 方法中调用 SpringApplication的 run方法,该方法会自动创建ioc容器以及启动tomcat服务器

    该方法的两个参数:该启动类的class、main方法的参数

    package com.ztone;
    ​
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    ​
    @SpringBootApplication
    public class Main {
        public static void main(String[] args) {
            SpringApplication.run(Main.class,args);
        }
    }
  6. 正常创建Controller

 

 

问题:

1.为什么spring-boot-starter-web不用写版本号?

在父工程spring-boot-starter-parent 的 父工程 spring-boot-dependencies 中创建了许多能够用到的版本号

image-20240820111310888

 

2.启动器 Starter 是什么?

在上面导入了 web 启动器的 依赖,之前是导入 spring-webmvc、servlet、jackon等等。现在只需要导入一个启动器,web开发所需要的依赖都导入了。

所以 Starter是一组预定义的依赖项集合,旨在简化Spring程序的配置和构建过程

springboot提供了启动器,第三方也提供了一些启动器

 

3.@SpringBootApplication注解的作用

在这个注解上,还有三个注解

image-20240820112710769

  • @SpringBootConfiguration 注解,标注该类是一个配置类,因为在这个注解上有 @Configuration

  • @EnableAutoConfiguration,会自动加载配置文件

  • ComponentScan ,扫描包注解。扫描启动类所在的包下的所有注解

 

Springboot 统一配置管理

在Springboot 工程下,进行统一配置管理,设置各种参数都集中到一个固定位置和命名的配置文件,即 application.properties 或 application.yaml

存放位置应该在 springboot 工程的 src/main/resource目录下

在文件中可以使用 springboot 固定的key 如指定端口号和项目根路径等

也可以自定义key 在 java代码中 用 @Value 注解去读取

 

YAML 配置文件

由于所有配置都要在 一个配置文件中编写,所以需要保证key 不能重复,就需要有多层结构

通过application.properties 进行配置,每一层是通过 . 来连接

server.port=80
server.servlet.context-path=/ssm

这样写每一次相同结构的key都要全部写出来,有些繁琐

而yaml 格式是层次分明,相同的key作为头部。

server:
  port: 80
  servlet:
    context-path: /ssm

除此之外,还可以表示 集合,用 - 来表示集合

hobby:
  - 学习
  - 吃饭
  - 敲代码

 

批量读取配置文件内容

读取 yaml 配置文件中的数据,有两种方式:

第一种是 在属性上用 @Value 注解,给属性赋值

这种方式出现的问题是只能读取单个值,不能批量读集合,而且必须将 key写全

@Data
@Component
public class Student {
    @Value("${student.zhangsan.username}")
    private String username;
    @Value("${student.zhangsan.age}")
    private int age;
    private List<String> hobby;
}

 

第二种方式是在实体类上加 @ConfigurationProperties(prefix="xxx")

其中prefix 是 指定通用的前缀 比如:student.zhangsan

他要求 属性名要和 最后一个 key相等

@Data
@Component
@ConfigurationProperties(prefix = "student.zhangsan")
public class Student {
    
    private String username;
    
    private int age;
    
    private List<String> hobby;
}

这种方式可以批量读取集合

 

多环境配置

在SpringBoot中可以配置不同的运行环境(开发、测试、生产),这些配置环境加载不同的配置文件。

yaml配置文件要求是 必须以 application开头,所以可以把不同环境的配置文件命名为 application-dev.yaml 或 application-test.yaml

最终在 application.yaml 总的配置文件中,引入这些分配置文件,使其生效

用的配置名是 spring.profiles.active= dev

spring:
  profiles:
    active: dev

如果引入的配置文件中的 key 与 总配置文件中的key重复了,最终的值是引入的文件里的值

除了在配置文件中使其生效,还可以通过命令行的方式 -- spring.profiles.active= dev 指定环境配置

 

posted @ 2024-08-20 16:25  GrowthRoad  阅读(2)  评论(0编辑  收藏  举报