栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot学习笔记1——基础篇

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot学习笔记1——基础篇

1、快速上手SpringBoot 1.1、parent
  • 开发SpringBoot程序要继承spring-boot-starter-parent,所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的;
  • spring-boot-starter-parent中定义了若干依赖管理,各版本间存在着诸多坐标版本不同;
  • 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突;
  • 继承parent的形式也可以采用引入依赖的形式实现效果。
1.2、starter

SpringBoot中常见项目名称,定义了当前项目使用的所有坐标依赖,以达到减少依赖配置的目的。

  • 开发SpringBoot程序需要导入坐标时通常导入对应的starter;
  • 每个不同的starter根据功能不同,通常包含多个依赖坐标;
  • 使用starter可以实现快速配置的效果,达到简化配置的目的。

实际开发:

  • 使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本的V;
  • 如发生坐标错误,再指定Version(要小心版本冲突)。
1.3、引导类
package com.clp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot0101QuickstartApplication {

    public static void main(String[] args) {
        //生成可配置的容器对象
        ConfigurableApplicationContext ctx = SpringApplication.run(Springboot0101QuickstartApplication.class, args);
    }
}

SpringBoot的引导类是Boot工程的执行入口,运行main()方法就可以启动项目;

SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean。

1.4、内嵌tomcat

内嵌Tomcat服务器是SpringBoot辅助功能之一;内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理;变更内嵌服务器思想是去除现有服务器,添加全新的服务器。

SpringBoot内嵌有三款服务器:

  • tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件。
  • jetty:更轻量级,负载性能远不及tomcat。
  • undertow:undertow,负载性能勉强跑赢tomcat。
2、基础配置 2.1、属性配置 2.1.1、修改配置

SpringBoot提供了多种属性配置方式:

  • application.properties;
    在./resource/application.properties中:
    用(什么技术就开什么配置)
    
    # 服务器的端口配置
    server.port=80
    
    # 修改banner(运行日志图标)
    #spring.main.banner-mode=off # 关闭运行日志图标
    #spring.banner.image.location=logo.png
    
    # 设置日志相关(设置启动日志)
    logging.level.root=debug
    logging.level.com.clp=warn
  • application.yml(常用);
    application.yml:
    
    server:
      port: 80
  • application.yaml;
    application.yaml:
    
    server:
      port:80

不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。加载优先级:application.properties -> application.yml -> application.yaml

2.2、YMAL

yaml:YAML(YAML,Ain't Markup Language):一种数据序列化格式。优点:① 容易阅读;② 容易与脚本语言交互;③ 以数据为核心,重数据轻格式。

2.2.1、yaml语法规则

(核心规则:数据前面要加空格与冒号隔开):

  • 大小写敏感;
  • 属性层级关系使用多行描述,每行结尾使用冒号结束;
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用tab键);
  • 属性值前面添加空格(属性名与属性值之间用冒号+空格作为分隔);
  • # 表示注释。
    # 设置端口
    server:
      port: 80
    
    user:
      name: zhangsan
      age: 18
      
    users1:
      - name: zhangsan
        age: 18
      - name: lisi
        age: 17
      -
        name: wangwu
        age: 20
    
    users2: [{name: zhangsan, age: 17}, {name: lisi, age: 18}]
    
    a:
      d:
        name: zhangsan
        hobbies:
          - game
          - music
          - sleep 
        hobbies2: [game, music, sleep]
2.2.2、数据读取

使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名...}

package com.clp.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {
    
    //读取yml数据中的单一数据
    @Value("${country}")
    private String country;

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

    
    @Value("${users[0].age}")
    private int age;

    @GetMapping
    public String getById() {
        System.out.println("springboot is running..");
        System.out.println("country: " + country);
        System.out.println("user.name: " + name);
        System.out.println("users[0].age: " + age);
        return "springboot is running...";
    }

}

封装全部数据到Environment对象:

package com.clp.controller;

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired //使用自动装配将application.yml中所有的数据封装到一个对象Environment中
    private Environment env;

    @GetMapping
    public String getById() {
        System.out.println("springboot is running..");
        System.out.println(env.getProperty("server.port"));
        return "springboot is running...";
    }
}

封装部分数据:(注意:封装类需要定义为Spring管理的bean,否则无法进行属性注入)

package com.clp;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Component
@ConfigurationProperties(prefix = "datasource") //指定加载的数据
public class MyDataSource {
    private String driver;
    private String url;
    private String username;
    private String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "MyDataSource{" +
                "driver='" + driver + ''' +
                ", url='" + url + ''' +
                ", username='" + username + ''' +
                ", password='" + password + ''' +
                '}';
    }
}


package com.clp.controller;

import com.clp.MyDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private MyDataSource myDataSource;

    @GetMapping
    public String getById() {
        System.out.println("springboot is running..");
        System.out.println("myDataSource: " +myDataSource);
        return "springboot is running...";
    }
}

2.2.3、yml文件中的变量引用
application.yml:

baseDir: C:windows
# 使用${属性名}的方式引用数据
tempDir1: ${baseDir}temp # t不解析为制表符
# 使用双引号包裹的字符串,其中的转义字符可以生效
tempDir2: "${baseDir}temp" # t解析为制表符
3、整合第三方技术

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842563.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号