(1)spring boot记录

93 阅读3分钟

个人学习记录

spring boot是什么

Spring Boot 是一个用于简化 Spring 应用程序开发的开源框架。它基于 Spring 框架,提供了一种快速、便捷的方式来构建独立的、生产级别的 Spring 应用程序。Spring Boot 通过自动配置和约定优于配置的原则,帮助开发人员轻松地搭建和部署应用,同时减少了大量样板式的配置。

Spring Boot 提供了许多功能和特性,包括:

  1. 自动配置:Spring Boot 根据项目中的依赖和配置自动配置应用程序。
  2. 起步依赖:提供预定义的依赖关系,简化项目的依赖管理。
  3. 嵌入式容器:内置 Tomcat、Jetty 或 Undertow 等容器,无需外部容器即可运行应用程序。
  4. Actuator:监控和管理应用程序的端点,方便查看应用程序的健康状态。
  5. 外部化配置:支持在不同环境中使用不同的配置文件,方便部署和管理。

总的来说,Spring Boot 的目标是简化 Spring 应用程序的开发流程,使开发人员能够更专注于业务逻辑的实现而非繁琐的配置。这使得 Spring Boot 成为开发人员首选的框架之一,用于构建各种类型的 Java 应用程序,包括 Web 应用、微服务、批处理应用等。

2024年03月13日19:50:30今日总结

  1. 创建springboot工程
  2. 起步依赖的分析
  3. 启动程序,并访问接口
  4. springboot 支持yml与properties两种配置文件
  5. 在代码中读取yml配置的字段

创建springboot工程

file -> new -> project -> 左侧选择maven,右侧jdk版本选择1.8 -> next -> 输入名称

起步依赖的分析

创建好工程后,在pom.xml中,就要添加相关依赖了。
首先要添加的是

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.1</version>
</parent>

  <dependencies>
<!--        web 开发的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate.validator</groupId>
                    <artifactId>hibernate-validator</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

贴一下最后的pom文件

<?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>org.example</groupId>
    <artifactId>lirui_study</artifactId>
    <version>1.0-SNAPSHOT</version>

<!--    spring boot 工程需要继承的父工程-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
    </parent>

    <dependencies>
<!--        web 开发的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.hibernate.validator</groupId>
                    <artifactId>hibernate-validator</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

官方的最新文档在这docs.spring.io/spring-boot… image.png 官方最新的3.x版本,需要jdk17.所以我们选择2.x的。
在这中间有2个插曲,一个是springboot的版本,导致运行失败,是2.0.4.RELEASE这个版本。后面改成了2.4.1.
还有一个,修改项目所依赖的jdk版本。在idea的setting -> build,exection -> compiler -> java compiler -> module里面,后面有对应的jdk版本.

启动程序,并访问接口

创建一个类,添加 @ResetController注解,方法添加@RequestMapping,这个注解中添加访问的path

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String hello(){
        return "hello spring boot $";
    }
}

创建一个Application类,并添加main方法,添加注解

@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}

此时main方法左侧有运行按钮,点击即可运行。jdk版本8 与springboot版本按照上面的配置,可以运行
在google浏览器输入:

localhost:8080/hello

而8080端口号,可以通过run窗口输出的日志来确定。tomcat那一行

springboot 支持yml与properties两种配置文件

目前只学习了yml文件。贴一下yml文件内容

server:
  port: 8091

name: zhangsan
person:
  name: hahaha
  age: 123
  address:
    - beijing
    - shanghai


person2: {name: zhangsan,age: 123}
#使用 $符号链接变量
person3:
  name: ${name}

#数组
address:
  - beijing
  - shanghai

#数组行内写法。就是在一行里写出来的意思
address2: [beijing,shanghai]

msg1: 'hello \n world' #不会识别转义字符,并且\n也会输出出来
msg2: "hello \n world"  #会识别转义字符

在代码中读取yml配置的字段

@RestController
public class HelloController {

    @Value("${person.name}")
    private String name;

    @Value("${address[0]}")
    private String address1;

    @Value("${msg1}")
    private String msg1;

    @Autowired
    private Environment environment;

    @Autowired
    private Person person;

    @RequestMapping("/hello")
    public String hello(){
        System.out.println(msg1);
        System.out.println(name);
        System.out.println(address1);
        System.out.println("22222222222222222222222222");

        System.out.println(environment.getProperty("person.name"));
        System.out.println("22222222222222222222222222");
        System.out.println(person);
        String[] address = person.getAddress();
        for (String s : address) {
            System.out.println(s);
        }
        return "hello spring boot $";
    }
}
  1. 通过value注解,可以读取到单独的变量。规则就是大括号里的变量是yml中的,而代码里的变量都随意。
  2. 而通过Environment(springframework包下的)方式,添加Autowired注解,在代码里通过environment.getProperty("person.name")来读取
  3. 创建Person类,类中的变量与yml中的一一对应。
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String name;
    private int age;
    private String[] address;

    public String[] getAddress() {
        return address;
    }

    public void setAddress(String[] address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
}

需要添加注解,而且第二个注解要注明是yml里的那个实体类。这个实体类的变量与person类要一一对应。比如yml定义的

person:
  name: hahaha
  age: 123

它没有数组,而person类有,你去读person类的数组,就会空指针