java的web开发之旅——SpringBoot篇

1. 概述

1.1 为什么选择SpringBoot

传统Spring 缺点

  1. 配置繁琐
    虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。
  2. 依赖繁琐
    项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。

SpringBoot 优势

  1. 自动配置
    Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定Spring配置应该用哪个,不该用哪个。该过程是SpringBoot自动完成的。
  2. 起步依赖
    起步依赖本质上是一个Maven项目对象模型,定义了对其他库的传递依赖。简单的说,起步依赖就是将具备同种功能的坐标打包到一起,并提供一些默认的功能,避免了版本的不兼容。
  3. 辅助功能
    提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。Spring Boot 并不是对 Spring 功能上的增强,而是提供了一种快速使用 Spring 的方式。

简单的说

在这里插入图片描述

2. 如何快速搭建一个SpringBoot项目

第一步:

点击这个链接:SpringBoot快速搭建
或者搜索Spring官网,点击Project下的SpringBoot,然后移动到页面最下方,点击快速构建的Spring Initializr即可
在这里插入图片描述
在这里插入图片描述

第二步:

想导入更多依赖可以点开add dependencies,做好这些后点击下方的generate下载。
在这里插入图片描述
在这里插入图片描述

第三步:

将下载后的zip解压后放到任意目录,然后由idea打开即可。
在这里插入图片描述

3. SpringBoot配置

SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置。以下是application.properties和application.yml(application.yaml)写法。
在这里插入图片描述
在这里插入图片描述
ps:一定要注意,在写yml(yaml)过程中键:(空格)值,键值对间,冒号后一定要加上空格!

在同一级目录下优先级为:properties > yml > yam

YML(YMAL)配置

YML(YAML)全称是 Ain’t Markup Language 。YAML是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅
读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP
等。YML文件是以数据为核心的,比传统的xml方式更加简洁。
YAML文件的扩展名可以使用.yml或者.yaml

在这里插入图片描述

YAML数据格式

server:
  port: 8083
#server: {port: 8083}

#  数组
address:
  - dalian
  - beijing
#address: [dalian,beijing]

#   纯量
str1: 'hello \n world'    #会忽略转义字符
str2: "hello \n world"    #会识别转义字符

#   对象
person:
  name: 王1
  age: 20
  address:
    - dalian
    - shanghai
#person: {name: 王1,age: 20}

name: ${person.name}  #参数引用

在这里插入图片描述

读取配置

读取配置内容有三种方法,接下一一赘述

1. @Value

@Value("${配置中的名字}”)
private 类型 自定义名字;//用来接收配置文件中的值

2. Environment

@Autowired //自动装配
private Environment env;
env.getProperty(“配置中的名字”);//用这种方式来获取

3.@ConfigurationProperties (用对象接收)

package dut.zimo.Model;

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

/**
 * @author : Dut.zimo
 * @createTime : 2021/12/19 8:34
 */
@Component      //表示他是个bean
@ConfigurationProperties(prefix = "person")
public class person {
    private String name;
    private int age;
    private String [] 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;
    }

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

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

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

代码演示

package dut.zimo.Controller;

import dut.zimo.Model.person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    //方法1:
    @Value("${name}")
    private String username;
    @Value("${person.age}")
    private int personage;
    @Value("${address[0]}")
    private String address;
    @Value("${str1}")
    private String msg1;
    @Value("${str2}")
    private String msg2;
    //方法2:
    @Autowired
    private Environment env;
    //方法3:
    @Autowired
    private person p1;

    public HelloController() {
    }

    @RequestMapping("/hellovalue" )
    public void hellovalue(){
        System.out.println("----------------方法1:--------------------");
        System.out.println("username: "+username);
        System.out.println("personage: "+personage);
        System.out.println("address: "+address);
        System.out.println("msg1: "+msg1);
        System.out.println("msg2: "+msg2);
        System.out.println("----------------方法2:--------------------");
        System.out.println(env.getProperty("name"));
        System.out.println(env.getProperty("person.age"));
        System.out.println(env.getProperty("address[1]"));
        System.out.println("----------------方法3:--------------------");
        System.out.println(p1);
        for (String add : p1.getAddress()){
            System.out.println(add);
        }
    }

    @RequestMapping("/hello" )
    public String hello(){
        return "hello SpringBoot";
    }
}

4. SpringBoot多环境配置

profile配置方式

1. 多profile文件方式

在这里插入图片描述

application-dev.properties:开发模式

server.port=8081

application-test.properties:测试模式

server.port=8082

application-pro.properties:生产模式

server.port=8083

最后由application.properties来调用哪个模式

spring.profiles.active=test

运行结果:
在这里插入图片描述

2. yml多文档方式
# 激活配置
spring:
  profiles:
    active: "pro"
    
---
# -----第一部分
spring:
  config:
    activate:
      on-profile: "dev"
env: dev

server:
  port: 8081

---
# -----第二部分
spring:
  config:
    activate:
      on-profile: "test"
env: test

server:
  port: 8082

---
# -----第三部分
spring:
  config:
    activate:
      on-profile: "pro"
env: pro

server:
  port: 8083

运行结果
在这里插入图片描述

profile激活方式

⚫ 配置文件: 在配置文件中配置:spring.profiles.active=dev
在这里插入图片描述

⚫ 命令行参数:java –jar xxx.jar --spring.profiles.active=dev
先打jar包
在这里插入图片描述
在这里插入图片描述

5. 配置加载顺序

在这里插入图片描述
加载顺序为上文的排列顺序,高优先级配置的属性会生效,相同的信息优先级高的覆盖优先级低的,没有的信息,则由优先级低的补充。
在这里插入图片描述

外部配置补充加载

在用命令行模式运行jar包时候,优先读取外部配置,然后才运行代码中的配置!注意内部配置中的第一第二优先级并不会被打入jar包,故jar包中没有这两个配置信息!外部配置读取时,优先读取与jar包同级的config文件下的application.properties文件,其次读取同级下的application.properties文件。
在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值