springBoot知识整理

目录

一、Spring Boot开发入门

1、Spring Boot简介

2、Spring Boot特点

二、Spring Boot核心配置

 1、默认配置文件

2,注入配置文件属性值

1、Environment

2、@Value 注解

3、@ConfigurationProperties 注解

4、@PropertySources 注解

 5、YamlPropertiesFactoryBean 加载 YAML 文件

6、JAVA 原生读取 


一、Spring Boot开发入门

1、Spring Boot简介

spring是由Pivotal团队在2013年开始研发,2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,初衷是简化使用Spring开发应用程序的过程,避免繁琐的配置工作,开发人员使用Spring Boot可以只专注于实现应用程序的功能和业务。

2、Spring Boot特点

Spring Boot所具备的特点如下:

(1)、约定优于配置

Spring Boot使用“约定优于配置”的理念,针对企业级应用程序的开发,提供了很多已经集成好的方案,“开箱即用”的原则使得开发人员能做到零配置或极简配置。

(2)、创建独立运行的 Spring 应用程序
佳用 Spring Boor 可以创建独立运行的 Spring 应用程序,并且基于 Spring 应用Maven 或Gradle 插件,可以创建可执行的JAR 包和WAR 包,使用java -jar 命令或者在目的主程序中执行main 方法可以运行 Spring Boot应用程序


(3)、内嵌 Servlet 容器
    Spring Boot 可以选择内Tomcat 或 Jetty 等 Servlet 容器,无须以 WAR 包形式部暑应
程序

(4)、提供 starter 简化Maven 配置
Spring Boot提供了一系列自动配置的starter项目对象模型( Project Object Model,POM以简化Maven 配置,高度封装,实现开箱即用。


(5)、自动配置 Spring
    Spring Boot可以尽可能地根据在类路径中的JAR 包为JAR 包里的类自动配置 Spring中的Bean,极大地简化项目的配置。而对于少部分没有提供支持的开发场景,Spring Boot可以自定义自动配置功能。

(6)、准生产的应用监控

Spring Boot提供了一个准生产环境下的监控和管理功能模块,可以使用 HTTP、SSH Telnet 等协议来进行操作,对运行的项目进行管理、跟踪和监控

(7)、无代码生成和XML 配置
  Spring Boot 不是借助代码生成来实现的,而是通过条件注解来实现的,这是 Spring4.x
提供的新特性,Spring Boot 不需要任何 XML配置即可实现 Spring 的所有配置。

二、Spring Boot核心配置

 1、默认配置文件

Spring boot的自动配置,免除了大部分的手动配置,但是对于一些特定的情况,还是需要我们进行自定义配置,对默认的配置进行修改,以适应实际的生产情况。

在spring boot中,配置文件有两种不同的格式,分别为application,properties和application.yml(或application.yaml),放配置文件的常见目录为scr/main/resources。

  (1)applicationproperties 配置文件
        我们在使用 Spring Initializer 创建一个 Spring Boot 项目时,会在 resources 目录下默认
创建一个application.properties 配置文件,可以在该文件中进行项目的相关属性配置,包括
系统属性、缓存、邮件、数据、事务、服务等各方面配置。Spring Boot 的配置属性、默认
值、描述等信息,可以在 Spring 的官网文档中查看。
        applicationproperties 是一种常用的配置文件,文件扩展名为“.properties”,属于文本
文件,文件内容的基本语法格式是“key=value”的格式,用“#”作为注释的开始。
如要配置 Web 服务访问的端口和上下文路径,则基本的配置代码如下。

server.port=8081
server.servlet.context-path=/mytest

(2)application.yml配置文件
        在 Spring Boot 中,还可以使用 YAML 格式的配置文件,这是官方推荐使用的配置格
式,可以通过官网了解其详细介绍。
先来认识一下VAML。VAML 是一个类似 XMLJSON 的标记性语言,强调以数据为
中心,并不是以标识语言为重点,本质上是一种通用的数据串行化格式
        YAML的基本语法规则如下。

  1.         1,大小写敏感,即区分大小写
    1.         2,一个空格。
      1.         3,key: value 表示键值对关系,冒号后面、value 之前必须有
        1.         4,使用空格缩进表示层级关系,左对齐的数据位于同一层级
          1.         5,不允许使用 Tab 键缩进
            1.         6,使用“#”进行单行注释

如要配置 Web服务访问的端口和上下文路径YAML格式配置文件的配置代码如图2-1
所示。

在使用空格缩进表示层级关系时,空格数目并不重要,只要是左对齐的第一列数据,就表示位于同一个层级。

        YAML 中支持的数据结构主要有纯量、对象、数组 3种纯量(scalar)是指基本的、不可再分的值,包括很多”浮点数、字符事、布尔值、目期时间、NULL 等。字符串有3种表示形式不用警,使用单引号或使用双引号业一股不用引号直接写出字符审。若不用引号减使用单引号,则转义字符(如“”)将被当成普酒宁符串处理:若使用双引号,则会将“”这类转义字符处理成换行。在YAML 格式的文件中使用不同形式表示字符串,在其值注人 Bean 中后,再获取输出结果。字符的不同
表示形式及输出结果如图2-2 所示。

对象是键值对的集合,又称为映射(mapping)/哈希(hash),表示形式有两种:缩进写法或行内写法。若给一个用户对象设置用户名和年龄值,,使用缩进写法的代码如下:

user:
 name:张三
 age:20

若引用行内写法,则代码如下:

 user:(name:张三,age:20)

数组是一组按次序排列的值,又称为序列(sequence)。若给一个用户对象设置朋友关系,该用户有两个朋友,使用缩进写法代码如下:

user:

 name:张三

 age:20

 friends:

 _李四

 _王五

这里用连接符加一个空格表示数组或列表的一个项,连接符后的空格不能少。

若用行内写法,则代码如下:

user:

 name:张三

 age:20

 friends:[李四,王五]

在YAML格式的配置文件中,每个结构又可以嵌套组成复杂的结构,如对象中可以继续使用对象,数组的元素又是一个在、数组。若用户有两个朋友,这两个朋友用对象描述,则friends所对应的是一个用户对象列表,使用缩进写法的代码如下:

friends:

 _

  name:李四

  age:20

 _

  name:王五

  age:20

2,注入配置文件属性值

从配置文件中获取属性应该是 SpringBoot 开发中最为常用的功能之一,先简单回顾一下这六种的使用方式:

说明
Environment对象Environment是 springboot 核心的环境配接
它提供了简单的方法来访问应用程序属性,包括系统属性、操作系统环境变量
命令行参数、和应用程序配置文件中定义的属性等等,使用 Environment
方式来获取配置属性值非常简单,只要注入 Environment 类调用其方法 getProperty (属性
key) 即可
@Value@Value 注解是 Spring 框架提供的用于注入配置属性值的注解,它可用于类的成员变量
方法参数和构造函数参数上,在应用程序启动时,使用 @Value 注解的 Bean 会被实例化.
所有使用了 @Value 注解的 Bean 会被加入到 PropertySourcesPlaceholderConfigurer
的后置处理器集合中。当后置处理器开始执行时,它会读取 Bean 中所有 @Value
注解所标注的值,并通过反射将解析后的属性值赋值给标有 @Value 注解的成员变量方法参数和构造函数参数。重要! ! ! 注意 在用 @Value
        注解时需要确保注入的属性值已经加载到 spring 容器中,否则会导致注入失败:
1,建议引用变量的时候给定一个默认值,避免启动报“缺失配置”的错误:
2,通过依赖注入的方式获取对象中属性值,切记不要使用 new的方式来创建对象获取其属性。
@ConfigurationPropertiesspringBoot 提供的一种更加便捷来处理配置文件中的属性值的方式
可以通过自动绑定和类型转换等机制,将指定前缀的属性集合自动绑定到一个 Bean 对象上
@PropertySources@PropertySources 注解的实现原理相对简单,应用程序启动时扫描所有被该注解标注的类
获取到注解中指定自定义配置文件的路径,将指定路径下的配置文件内容加载到 Environment中,这样可以通过 @Value 注解或 Environment.getProperty 0
方法来获取其中定义的属性值了。默认只限读取 properties 文件内容,想加载 yaml
文件内容,可以自定义 factory 适配器,指定 factory 具体的便用
YamlPropertiesFactoryBean对象只限读取 yaml文件,通过 @Value 注解或 Environment.getProperty 0方法来配台着获取其中定义的属性值。
JAVA原生通过java.util.Properties 去加载配置文件中的属性

1、Environment

注入 Environment 类调用其方法 getProperty(属性 key)即可

@Slf4j
@SpringBootTest
public class EnvironmentTest {

    @Resource
    private Environment env;

    @Test
    public void var1Test() {
        String var1 = env.getProperty("env.var1");
        log.info("Environment获取的配置内容:{}", var1);
    }
}

 

2、@Value 注解

只要在变量上加注解 @Value("${env.var1}")就可以了,@Value 注解会自动将配置文件中的 env.var1 属性值注入到 var1 字段中。

@Slf4j
@SpringBootTest
public class EnvVariablesTest {

    @Value("${env.var1}")
    private String var1;
    
    @Test
    public void var1Test(){
        log.info("配置文件属性: {}",var1);
    }
}
3、@ConfigurationProperties 注解

在 application.yml 配置文件中添加配置项:

env:
  var1: 变量值1
  var2: 变量值2

 创建一个 MyConf 类用于承载所有前缀为 env 的配置属性。

@Data
@Configuration
@ConfigurationProperties(prefix = "env")
public class MyConf {

    private String var1;
    
    private String var2;
}

在需要使用 var1、var2 属性值的地方,将 MyConf 对象注入到依赖对象中即可。

@Slf4j
@SpringBootTest
public class ConfTest {

    @Resource
    private MyConf myConf;

    @Test
    public void myConfTest() {
        log.info("@ConfigurationProperties注解获取的配置内容:{}", JSON.toJSONString(myConf));
    }
}

 

4、@PropertySources 注解

在 src/main/resources/ 目录下创建自定义配置文件 important.properties,增加两个属性。

env.var1=变量值1
env.var2=变量值2

在需要使用自定义配置文件的类上添加 @PropertySources 注解,注解 value 属性中指定自定义配置文件的路径,可以指定多个路径,用逗号隔开。

 

@Data
@Configuration
@PropertySources({
        @PropertySource(value = "classpath:important.properties", encoding = "utf-8"),
        @PropertySource(value = "classpath:important.properties",encoding = "utf-8")
})
public class PropertySourcesConf {

    @Value("${env.var1}")
    private String var1;

    @Value("${env.var2}")
    private String var2;
}
 5、YamlPropertiesFactoryBean 加载 YAML 文件

@Configuration
public class MyYamlConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer yamlConfigurer() {
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new ClassPathResource("test.yml"));
        configurer.setProperties(Objects.requireNonNull(yaml.getObject()));
        return configurer;
    }
}

可以通过 @Value 注解或 Environment.getProperty() 方法来获取其中定义的属性值。

@Slf4j
@SpringBootTest
public class YamlTest {

    @Value("${env.var3}")
    private String var3;

    @Test
    public void  myYamlTest() {
        log.info("Yaml获取配置内容:{}", var3);
    }
}
6、JAVA 原生读取 
@Slf4j
@SpringBootTest
public class CustomTest {

    @Test
    public void customTest() {
        Properties props = new Properties();
        try {
            InputStreamReader inputStreamReader = new InputStreamReader(
                    this.getClass().getClassLoader().getResourceAsStream("test.properties"),
                    StandardCharsets.UTF_8);
            props.load(inputStreamReader);
        } catch (IOException e1) {
            System.out.println(e1);
        }
        log.info("Properties Name:" + props.getProperty("env.appName"));
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值