028-86261949

当前位置:首页 > 技术交流 > SpringBoot的配置文件

SpringBoot的配置文件

2019/05/16 09:36 分类: 技术交流 浏览:0

一.SpringBoot配置文件认识

  • SpringBoot中我们可以修改它的一个默认配置,这个直接在配置文件中完成即可。
  • 配置文件有两种,一种是properties文件,一种是yml文件,大家任选一种使用即可
  • 名称名必需是application.properties或者application.yml


application.properties修改端口:

server.port=8888

application.yml修改端口:

server:  port: 8881

 

二.yaml文件的认识与使用

 

咱们写代码时肯定是要写配置文件,过去我们经常会使用properties,xml或者json来做配置,但是yaml是感觉写配置文件更加适合。

YAML 语言( /ˈjæməl/)的设计目标,就是方便人类读写。它专门用来写配置文件的语言,非常简洁和强大

 

2.1 YAML的编写规则

  • 大小写敏感
  • 使用缩进表示层级关系
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
    • 缩进时不允许使用Tab键,==只允许使用空格=
  • 冒号后面必需有空格

2.2 YAML的写法

YAML中可以写普通值(字符串,Boolean,Date等),对象与集合

2.2.1 普通值

  • 字符串不需要加引号
  • 如果加双引号(""),里面的内容会进行编译,比如说加一个 /n 就会换行
  • 如果加单引号(''),里面的内容会正常显示,比如说加一个 /n 会显示出来
username: zhangage: 34sex: true

2.2.2 对象

  • key-value键值对
employee:  username: zhang  age: 34  sex: true
  • 行内写法
employee: {username: zhang,age: 34,sex: true}

2.2.3 集合数组

  • 用 - 表示数组中一个元素
hobbys:
  - java  - php  - h5
  • 行内写法
hobbys: {java,php,h5}

2.3 yaml注入值(@ConfigurationProperties方式)

  1. 准备相应的domain
  • Employee
/**
 * @Component:SpringBoot发现这个注解才会读取这个类,并且配置一个bean出来
 * @ConfigurationPropertiesSpringBoot发现这个注解,则会和配置中的数据与当前这个组件(bean)的值进行相应的绑定
 *   prefix:配置文件中的前缀名,相应的前缀对应配置中的前缀,数据再进行一一对应
 */@Component@ConfigurationProperties(prefix="emp")public class Employee {
 
    private String username;
    private String email;
    private Integer age;
    private Boolean sex;
    private Date bornDate;
    private List hobbys = new ArrayList();
    private Department department;
 
   //提供gettersettertoString
}
  • Department
public class Department {
    private Long id;
    private String name;
    //提供gettersettertoString
}
  1. 完成相应的yml配置
emp:
  username: 张三
  age: 12
  sex: true
  born-date: 1999/01/01
  email: zhangshan@itsource.cn
  department: {id: 1, name: "IT"}
  hobbys: [java,php,python]
  1. 功能测试看到效果
@RunWith(SpringRunner.class)@SpringBootTest
public class SpringbootHelloConfigApplicationTests {
 
          @Autowired
          private Employee employee;
 
          @Test
          public void contextLoads() {
                    System.out.println(employee);
          }
 
}
  1. 引入依赖加入
  • 映射写配置时没有提示,我们可以加一个依赖
  • 加上后,运行/测试一下 就可以有提示了
<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-configuration-processor</artifactId>
          <optional>true</optional></dependency>

 

三.propertie的写法

 

3.1 解决idea中写properties的中文问题


3.2 application.properties

emp.username=小王
emp.age=32
emp.born-date=1999/01/01
emp.department.id=1
emp.department.name=俱乐部
emp.email=zhao@itsource.cn
emp.sex=true
emp.hobbys=java,h5,ui

 

四.Value方法注入值

 

4.1 value注入的三个方式

  • 方式一:直接注入
  • 方式二: 获取配置文件中的值
  • 方式三: 写相应的计算表达式
@Component//@ConfigurationProperties(prefix="emp")public class Employee {
 
    @Value("${emp.username}")
    private String username;
    private String email;
    @Value("#{3*7}")
    private Integer age;
    @Value("false")
    private Boolean sex;
    ...省略
}

4.2 value与直接注入的区别

 

@ConfigurationProperties

@Value

简单案例

效果

批量注入

单个注入

 

松散绑定

×

user_name/user-name == userName

SpEL支持

×

#{3*7}

复杂类型封装

×

${emp.hobbys}

数据校验(JSR303)

×

 

五.加载指定的配置文件

 

5.1 加载局部配置文件(@PropertySource)

  1. 新建一个文件 
  2. 在文件中添加内容
emp.username=小王
emp.age=32
emp.born-date=1999/01/01
emp.department.id=1
emp.department.name=俱乐部
emp.email=zhao@itsource.cn
emp.sex=true
emp.hobbys=java,h5,ui
  1. 读取相应的文件配置
@Component@ConfigurationProperties(prefix="emp")@PropertySource({"classpath:employee.properties"})
public class Employee {
 
    private String username;
    private String email;
}    

5.2 加载XML文件(@ImportResource)

SpringBoot虽然提倡零配置,但是真实开发依然会遇到需要用到xml的情况,所以SpringBoot也提供了相应的方案让我们可以直接读取xml

@ImportResource(locations = {"classpath:application.xml"})@SpringBootApplication
public class Springboot02ConfigApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(Springboot02ConfigApplication.class, args);
    }
 
}

5.3 自定义配置类向容器注入组件

  1. 准备配置类
    • @Configuration:代表这是一个配置类
    • @Bean:当前方法的返回值是一个bean
/**
 * @Configuration:表示当前类是一个配置类(相当于一个配置文件)
 */@Configurationpublic class BeanConfig {
 
    /**
     * 把返回的值变成一个Bean,方法名就是beanid
     * @return
     */
    @Bean
    public Employee employeeService(){
        return  new Employee();
    }
}
  1. 功能测试
@RunWith(SpringRunner.class)@SpringBootTestpublic class Springboot02ConfigApplicationTests {
    @Autowired
    private ApplicationContext applicationContext;
    @Test
    public void contextLoads() {
        //根据名称获取对应的数据
        Employee employee = (Employee)applicationContext.getBean("employeeService");
        System.out.println(employee);
    }
}

 

#标签:SpringBoot,配置