一、配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

•application.properties

•application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

二、配置文件值注入

1.将配置文件中的参数映射到JavaBean

(1).pom.xml增加
<!--导入配置文件处理器,编写配置文件时就会有提示-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
(2).编写javaBean:

Dog.java

package com.miracle.demo3.bean;

public class Dog {

    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

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

Person.java

package com.miracle.demo3.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":指明配置文件中哪个前缀开头的属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 * 如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value加在JavaBean的字段上;
 * 如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
 */
@Component	//将JavaBean加到容器中
@ConfigurationProperties(prefix = "person")
public class Person {
	
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getBoss() {
        return boss;
    }

    public void setBoss(Boolean boss) {
        this.boss = boss;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    @Override
    public String toString() {
        return "Person{" +
                "lastName='" + lastName + '\'' +
                ", age=" + age +
                ", boss=" + boss +
                ", birth=" + birth +
                ", maps=" + maps +
                ", lists=" + lists +
                ", dog=" + dog +
                '}';
    }
}
(3).编写配置文件

application.properties

# 配置person的值
person.last-name=张三
person.age=18
person.boss=false
person.birth=2017/12/15
person.maps.k1=13
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15

注意配置文件中有中文的时候,会乱码,在idea进行如下设置

springboot poi导入excel参数校验 springboot导入配置文件_java


然后删除之前的application.properties文件,重新创建application.properties文件

(4).测试效果

在src/test/java/com/miracle/demo3/Demo3ApplicationTests中

package com.miracle.demo3;

import com.miracle.demo3.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo3ApplicationTests {
    // 会自动注入person对象
    @Autowired
    Person person;

    @Test
    public void contextLoads() {
        System.out.println(person);
    }
}

2.将配置文件中的参数注入到某个类中

通过@Value注解将配置文件某个参数注入到HelloController.java中

package com.miracle.demo3.controller;

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


@RestController
public class HelloController {
	// 这里通过@Value注解用el表达式,将配置文件中person.last-name的值注入到name字段
	// @Value("miracle")  还可以直接注入值
    @Value("${person.last-name}")
    private String name;

    @RequestMapping("/hello")
    @ResponseBody
    public String hello() {
        return "hello world quick!" + name;
    }
}

三、读取自定义配置文件

1.第一种情况映射到JavaBean

当想要读取src/resources/moduleOne.properties内的配置时

ModuleOne.java

package com.miracle.demo3.bean;

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

// 告诉springboot来加载classpath下的moduleOne.properties配置文件,并绑定到JavaBean
@PropertySource(value = {"classpath:moduleOne.properties"})
@Component
@ConfigurationProperties(prefix = "moduleOne")
public class ModuleOne {
    private String username;
    private String password;

    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 "moduleOne{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

src/main/resources/moduleOne.properties

moduleOne.username=miracle
moduleOne.password=123456

2.第二种情况,导入Spring的配置文件,让配置文件里面的内容生效

例如:有一个beans.xml里面定义了很多bean,想让springboot加载
src/main/resources/beans.xml

<?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="helloService" class="com.miracle.demo3.service.HelloService"></bean>
</beans>

如果想让springBoot加载beans.xml,只需将注解@ImportResource加到(主)配置类上,如下

package com.miracle.demo3;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

@SpringBootApplication      // 指定要加载的配置文件
@ImportResource(locations = {"classpath:beans.xml"})
public class Demo3Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo3Application.class, args);
    }
}

3.第三种情况,加载配置类

(1)创建config包
(2)在config包下,创建配置类

MyAppConfig1

package com.miracle.demo3.config;

import com.miracle.demo3.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Configuration:指明当前类是配置类,相当于之前的xml配置文件
 * 在xml配置文件中用<bean></bean>标签添加类,这里用@Bean注解
 */
@Configuration
public class MyAppConfig1 {
    // 将方法的返回值添加到容器中:在容器中bean的id默认就是方法名
    @Bean
    public HelloService helloService() {
        // 创建bean的同时,new对象前面的方法也会执行
        System.out.println("配置类@Bean给容器中添加bean");
        return new HelloService();
    }
}

四、springBoot多环境切换

profile是springBoot对不同环境提供不同配置功能的支持,通过激活指定参数等方式快速切换环境

1.创建多个profile文件,分别为开发环境,生产环境

默认配置文件:application.properties
开发环境配置文件:application-dev.properties
生产环境配置文件:application-product.properties
当三个文件同时存在时,生效的是默认配置文件

2.激活不同环境的配置文件

在默认配置文件中添加
spring.profiles.active=dev 则表示激活 开发环境配置文件
spring.profiles.active=product 则表示激活 生产环境配置文件

如果在命令行中运行jar包,还可以通过增加命令行参数的方式指定配置

Java -jar jar包的名字 --spring.profiles.active=product

五、配置文件加载位置

1.默认的配置文件加载位置

springBoot启动会扫描以下位置的application.properties文件作为默认配置文件

–file:./config/					–file为项目根目录

–file:./

–classpath:/config/

–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件;互补配置

如果不想用springBoot提供的配置文件路径,可以通过在配置文件(application.properties)中定义下面属性来引入额外的配置文件

spring.config.location=/opt/application.properties

六、springBoot配置文件配置详解

application.properties
# 修改内嵌tomcat服务器端口号
server.port=8080
# 修改项目的访问名
server.context-path=/crud
# springBoot格式化前台页面传入的时间参数
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
# 修改springMVC前端控制器默认拦截的请求路径
server.servlet-path=/

# springMVC jsp视图解析 前缀和后缀配置
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp