SpringBoot 配置文件编写及使用方式 (拒绝硬编码)

我们经常在项目开放中需要进行很多配置, 那么这些配置基本上都是动态的, 如果我直接写在代码中, 修改起来很麻烦, 如果该配置在多处进行引用啦, 你估计会杀了写代码的人。

那么我们在使用SpringBoot的时候, 也是需要进行配置文件编写的。在spirngBoot里面, 可以有两种方式声明配置

1、直接编写配置文件 然后从配置文件里面获取
2、编写配置文件 然后编写bean, 通过注解注入到bean里面 获取的时候从bean里面获取

配置文件编写可以有多种, 例如我们常见的有: xmlpropertiesjsonyaml.....

我们这里就使用常见的properties文件来写

编写配置文件,从配置文件里面获取

  • 创建配置文件
设置配置文件
  • 使用配置项
controller使用配置
  • 注解说明
@PropertySource({"classpath:config/web.properties"})  //指定配置文件

@Value("${site.name}") // 获取配置项 value
  • 效果
基本配置效果

编写配置文件, 从bean里面获取

  • 编写bean, WebSetting.java
package com.example.demo.domain;

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

@Component
@PropertySource(value = "classpath:config/web.properties", encoding = "utf-8")
@ConfigurationProperties(prefix = "site") // 这个可以指定前缀  只要成员属性能对上就行  也可以不指定 使用@Value来获取
public class WebSetting {

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

    @Value("${site.desc}")
    private String siteDesc;

    @Value("${site.domain}")
    private String siteDomain;

    // 对上了可以不用@Value
    private String test;

    public String getTest() {
        return test;
    }

    public void setTest(String test) {
        this.test = test;
    }

    public String getSiteName() {
        return siteName;
    }

    public void setSiteName(String siteName) {
        this.siteName = siteName;
    }

    public String getSiteDesc() {
        return siteDesc;
    }

    public void setSiteDesc(String siteDesc) {
        this.siteDesc = siteDesc;
    }

    public String getSiteDomain() {
        return siteDomain;
    }

    public void setSiteDomain(String siteDomain) {
        this.siteDomain = siteDomain;
    }
}

  • config/web.properties
site.name=憧憬
site.domain=aoppp.com
site.desc=这是一个技术分享的博客!
site.test=test
  • 获取配置 效果
bean获取配置

需要注意点

1、配置文件注入失败,出现Could not resolve placeholder
   解决:根据springboot启动流程,会有自动扫描包没有扫描到相关注解,
   默认Spring框架实现会从声明@ComponentScan所在的类的package进行扫描,来自动注入,因此启动类最好放在根路径下面,或者指定扫描包范围,spring-boot扫描启动类对应的目录和子目录

2、注入bean的方式,属性名称和配置文件里面的key一一对应,就用加@Value 这个注解,如果不一样,就要加@value("${XXX}")

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

您的支持是对我最大的鼓励!

发表于: 作者:憧憬。
关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Github 新浪微博 SegmentFault 掘金专栏