3.springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)

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:(空格)张三
 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.代码测试

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = "person";配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件在容器中,才能获得容器提供的@ConfigurationProperties功能;
 * @ConfigurationProperties(prefix = "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后缀的:

application.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;
    }
}

[email protected],@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);
}

原文地址:https://www.cnblogs.com/lyh233/p/12231513.html

时间: 2024-10-16 04:14:18

3.springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)的相关文章

Spring中Bean的作用域、Spring的自动注入、在spring配置文件中引入属性文件

1. Bean的作用域 Bean的作用域默认为单例模式. 2. 自动注入 3. 在spring配置文件中引入属性文件 Bean的作用域默认为单例模式. 原文地址:https://www.cnblogs.com/mcl2238973568/p/11478426.html

依据不同的操作系统读取配置文件/java读取属性文件代码

package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @date 2014年4月3日 * @note begin modify by null */ public enum EOSPlatForm { Any("any"), Linux("Linux"), Mac_OS("Mac OS"), Mac_OS_X(&q

尚硅谷springboot学习9-配置文件值注入

首先让我想到的是spring的依赖注入,这里我们可以将yaml或者properties配置文件中的值注入到java bean中 配置文件 person: lastName: hello age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaoliu dog: name: 小狗 age: 12 javaBean: package com.atguigu.springboot.bean; impo

在spring配置文件中引入属性文件

原文地址:https://www.cnblogs.com/sh-0131/p/11478597.html

14-springboot-自定义properties文件值注入javaBean中

被这个问题困扰了好几天.... 在spring中, 从资源文件向bean中注入值非常简单, 只需要properties文件被spring加载, 然后在被spring管理的类写响应的属性, 然后 @Value("${SERVER_URL") 的方式就可以取到值了 在springboot中, 同样的方式也可以取到值, 但未免感觉有点low, 所以苦苦寻觅好几天, 在这儿以创建一个ESClient的方式进行说明: 1, 在App.java中加入注解 @EnableConfigurationP

springboot入门_获取属性文件中的值

在上一篇文章中,记录了用springboot实现输出一个hello world到前台的程序,本文记录学习springboot读取属性文件中配置信息. 框架属性文件(application.properties) 创建一个springboot项目,并引入相关依赖,POM文件如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.or

SpingBoot之配置文件的值注入问题

我们在这里研究的是以yml配置文件值注入的问题: Person: lastName: 张三 age: 23 boss: false birth: 2018-10-11 maps: {k1: v1,k2: v2} lists: - pig - dog dog: name: 半半 age: 1 定义了一个Person的实体类: package com.example.demo.entity; import org.springframework.boot.context.properties.Con

spring4学习:使用外部属性文件

在配置文件里配置Bean时,有时需要在Bean的配置里混入系统部署的细节信息(例如:文件路径,数据源配置信息等)而这些部署细节实际上需要和Bean配置相分离: spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean配置的内容外移到属性文件中,可以在Bean配置文件里使用形式为${var}的变量,PropertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性来替换属性变量: S

java spring中对properties属性文件加密及其解密

原创整理不易,转载请注明出处:java spring中对properties属性文件加密及其解密 代码下载地址:http://www.zuidaima.com/share/1781588957400064.htm 加密类: package com.zuidaima.commons.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import