3springboot:springboot配置文件(配置文件yaml属性文件值注入<@value@configurationproperties@propertysource,@imp(代码片

MrChengs      2022-04-21     731

关键词:

1.配置文件:

springboot默认使用一个全局配置文件
配置文件名是固定的
 

 配置文件有两种(开头均是application,主要是文件的后缀):

->application.properties
->application.yml

 

作用:修改springboot自动配置的默认值

      springboot在底层把一切都自动配好

 

位置:

  配置文件放在src/main/resourcr目录或者 类路径/config 下

 

2.YAML:

YAML(YAML Ain't Markup Language)

YAML A Markup Language:是一个标记语言
YAML isn't Markup Language:不是一个标记语言;

 

标记语言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以数据为中心,比json、xml等更适合做配置文件;

参考:http://yaml.org/

该语法风格:

server:
  port: 8088

 

使用语法:

  k:(空格)v:表示一对键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

 

值的写法:

字面量:普通的值(数字,字符串,布尔)
  k: v:字面直接来写;
  字符串默认不用加上单引号或者双引号;
  " ":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
    name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
  ' ':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
    name: ‘zhangsan \n

1.对象、Map(属性和值)(键值对):

注意空格

Person:
 name:xxxx
 age:12

行内写法:

  Person:  {name:xxx,age=12}

2.数组(List、Set):

-(空格) 值表示数组中的一个元素
gender:
    -(空格) boy
    -(空格) gril

行内写法

gender: [gril,boy]

 

导入配置文件处理器,配置文件进行绑定就会有提示

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

 

3.代码测试

//将配置文件中的每一个属性的值映射到这个组件中
//告诉springboot将本类中的所有属性和配置文件中的相关配置进行绑定
//(prefix = "person")将配置文件中以person下的所有属性进行绑定
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private  String name;
    private  Integer age;
    private boolean boss;//布尔值
    private Date bir;//时间

    private Map<String,Object> map;//Map
    private List<String> lists;//List

    private Dog dog;//对象
}
public class Dog {
    private String name;
    private  Integer age;
}

 

在yml配置文件中

person:
  name: Mr
  age: 14
  boss: true
  bir: 2018/12/21
  map: {m1: v1,m2: v2}
  lists:
     - mc
     - mt
  dog:
     name: dogdog
     age: 10

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot01ApplicationTests {
    @Autowired
    Person person;
    @Test
    public void contextLoads() {
        System.out.println(person);
    }

}
Person{name='Mr', age=14, boss=true, bir=Fri Dec 21 00:00:00 CST 2018, map={m1=v1, m2=v2}, 
lists=[mc, mt], dog=Dog{name='dogdog', age=10}}

 

 使用properties后缀的:

person.name=mr
person.age=22
person.bir=2018/12/11
person.boss=true
person.map.q1=1
person.map.q2=2
person.lists=a,b,c
person.dog.name=cat
person.dog.age=22

 

 

关于乱码的问题:

properties配置文件在idea中默认utf-8可能会乱码

 

 

 4.配置文件值注入@Value

 @Value:1.字面量  2.#{spel}    3.${key}从环境变量配置文件中取值

@Value获取值和@ConfigurationProperties获取值比较

 

松散语法绑定:last_name = last-name = lastName 他们取的值都是相同的

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

 

 数据校验:

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    @Email
    private  String name;
...
}

 

 获取配置文件中的某个值:

@ResponseBody
@Controller
public class Helloword {

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

    @RequestMapping("/hello")
    public  String hello(){
        return "Hello tow!" + name;
    }
}

 

5@PropertySource,@ImportResource

@PropertySource: 加载指定的配置文件
@PropertySource(value = {"classpath:/person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private  String name;
    private  Integer age;
    private boolean boss;
    private Date bir;
...
}

 

@ImportResource

@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

@ImportResource(locations = {"classpath:spring.xml"})
@SpringBootApplication
public class Springboot01Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot01Application.class, args);
    }
}
public class helloword {
    public void hello(){
        System.out.println("hello");
    }
}

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="hello" class="com.cr.springboot01.ImportSoource.helloword"></bean>
</beans>
@Autowired
ApplicationContext app;
@Test
public void testImportSourcr(){
    boolean h = app.containsBean("hello");
    System.out.println(h);
}

 

 

@Bean

全注解方式:

新建一个配置类

//配置类,指明当前类使配置类,代替xml配置文件
@Configuration
public class MyConfig {
    //将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名
    @Bean
    public Helloword hello(){
        System.out.println("注解的方式");
        return new Helloword();
    }
}
@Autowired
ApplicationContext app;
@Test
public void testImportSourcr(){
    boolean h = app.containsBean("hello");
    System.out.println(h);
}

 

3springboot:springboot配置文件(外部配置加载顺序自动配置原理,@conditional)

1.外部配置加载顺序SpringBoot也可以从以下位置加载配置;优先级从高到低高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数所有的配置都可以在命令行上进行指定先打包在进行测试java-jarspring-boot... 查看详情

3springboot核心技术

1.3SpringBoot核心技术1.3.1起步依赖为项目的依赖管理提供帮助。起步依赖其实就是特殊的Maven,利用了传递依赖解析,把常用库聚合在一起,组成几个为特定功能而定制的依赖。1.3.2自动配置针对很多Spring应用程序常见的应用功能... 查看详情

3springboot:springboot配置文件(配置文件yaml属性文件值注入<@value@configurationproperties@propertysource,@imp(代码片

1.配置文件:springboot默认使用一个全局配置文件配置文件名是固定的  配置文件有两种(开头均是application,主要是文件的后缀):->application.properties->application.yml 作用:修改springboot自动配置的默认值   ... 查看详情

spring是什么

...册的一套快速开发整合包。1springbean加载过程2springmvc核心3springboot为什么要用SpringBoot:因为自动配置,即约定优于配置。为什么是自动配置:因为它有个注解为EnableAutoApplication,这个注解被包含在Spring 查看详情

springboot2.x基础教程:快速入门(代码片段)

...技术交流群,共同成长序号内容1面试题专栏2Redis专栏3SpringBoot专栏3SpringBoot专栏更新计划文章目录一、简介二、初始化SpringBoot项目1、 查看详情

springboot的配置文件——springboot

Spring配置文件的类型和作用  SpringBoot是基于约定的,所以很多配置都有默认值,但是如果想要使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(yaml)进行配置。  SpringBoot默认会从Resources目录下... 查看详情

springboot之配置

 回顾:SpringBoot之基础配置文件① 两种全局配置文件(文件名是固定的)  配置文件放在src/main/resources目录或者类路径/config下  application.properties(优先级高)  application.yml/application.yaml  配置文 查看详情

springboot配置404500页面

Springboot配置404页面很简单,如果你访问的url没有找到就会出现springboot提示的页面,很明显Springboot不用配置就可以显示404页面了。在template下创建error文件夹,里面放404.html,再访问没有定义的url就发现神奇的事发生了!自己就会... 查看详情

springboot_web开发

3.19目录1.Springboot开发步骤2.Springboot对静态资源的映射规则3.模板引擎引入ThymeleafThymeleaf使用和语法4.SpringMVC自动配置原理5.修改Springboot的默认配置6.全面接管SpringMvc  1.步骤:1.创建springboot应用,选中需要的模块2.springboot已... 查看详情

学习作业

...IP)新4 2全文检索ElasticSearch,集群,高可用(难)新5 3Springboot(几乎实现0配置yml)+springcloud实现购物车业务接口新5 4百度地图+北京地铁+形成最短路径算法新5&nbs 查看详情

springboot自动配置原理,你真的懂吗?(代码片段)

概述上面博文(SpringBoot简介与快速搭建)我们简单的介绍了什么是SpringBoot,以及如何使用SpringBoot,但是我们对于SpringBoot的基本原理并没有介绍,这篇博文我们重点介绍SpringBoot是如何实现的自动配置。依赖管... 查看详情

微服务springboot2.0:配置文件解析

...我用yml,这是什么鬼——Java面试必修引言上一篇介绍了SpringBoot的轻松入门项目构建,对SpringBoot的特性有了初步了解。但如果要想玩得很熟练的话就请看接下来的文章,这样有助于后续我们快速的构建企业级应用,打怪咱得先熟... 查看详情

springboot自定义kafka消费者配置containerfactory最佳实践

SpringBoot自定义kafka消费者配置ContainerFactory最佳实践本篇博文主要提供一个在SpringBoot中自定义kafka配置的实践,想象这样一个场景:你的系统需要监听多个不同集群的消息,在不同的集群中topic冲突了,所以你需要分别定义kafka消... 查看详情

springboot属性类自动加载配置文件中的值

springboot属性类自动加载配置文件中的值,如Person类加载在yml中配置的name,age等属性值,可以通过如下步骤获取:类上添加@ConfigurationProperties注解,prefix为yml中配置的属性名称,要想属性类生效得加上@Component注解如果想要在yml中... 查看详情

springboot+vue实现博文上传+展示+博文列表(代码片段)

文章目录前言实现效果博文列表文章编辑文章显示博文列表前端后端接口博文上传前端后端登录验证博文上传博文显示前端后端总结前言ok,又到了水文时间了,那么今天带来的是这个WhiteHole的最新的开发进度,也就... 查看详情

springboot+mybatis+pagehelper配置多数据源

 前言:本文为springboot结合mybatis配置多数据源,在项目当中很多情况是使用主从数据源来读写分离,还有就是操作多库,本文介绍如何一个项目同时使用2个数据源。也希望大家带着思考去学习!博主是最近才学的配置写成博... 查看详情

springboot整合jsp

  这几天在集中学习Springboot+Shiro框架,因为之前view层用jsp比较多,所以想在springboot中配置jsp,但是springboot官方不推荐使用jsp,因为jsp相对于一些模板引擎,性能都比较低,官方推荐使用thymeleaf,但是Springboot整合jsp的过程已... 查看详情

springboot3.0.0m32.7.0发布,2.5.x将停止维护(代码片段)

...列SpringBoot的版本更新,其中包括:SpringBoot3.0.0-M3SpringBoot2.7.0SpringBoot2.6.8SpringBoot2.5.14SpringBoot3.0.0-M3此版本包括74个bug修复、文档改进和依赖项升级,其中值得注意的新功能包括:MicrometerObservation、Tracing和OtlpMeterRegis... 查看详情