在写Spring应用的时候,经常会用到Spring支持的application.yml 或 application.properties 来对Spring的一些属性进行设置。
实际上,Spring的这些配置项是与Spring内部的一些bean一一对应的。在配置文件修改这些属性时,就是在修改Spring运行时对应的一些bean的各种属性。
application.yml 和 application.properties 的区别:
本质上他们的作用相同,仅仅是格式不同而已。.yml使用yaml格式,用冒号和缩进表示属性、参数以及层级关系;.properties格式用.来作为层级的区分。
基于这种配置项与bean的一一对应关系,我们可以通过Spring提供的注解来使得我们的bean与自定义的配置项挂钩。
为了使得一个模块专注于自己的事而不必兼顾配置项的读取,最好将一个模块需要用到的配置项抽取出来,集合到一个专用于储存配置的类中,比如下面的类AppConfig
。
package cc.mcyou.jmstest;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "mcyou.config")
@Data
public class AppConfig {
boolean config1 = true; //默认值
int config2 = 1;
}
注解说明:
-
使用Spring提供的注解
@ConfigurationProperties
即可告诉Spring应该将这个类纳入配置项管理。属性prefix
表示在配置项里这个类的属性将在哪个层级下表示。 -
为了使其他类能够使用配置类读取配置项,用
@Component
将其注册为bean。在需要的类处使用@autowired
引入即可。 -
由于Spring管理配置时都会使用set get等标准bean方法,所以这里必须提供get set方法,否则配置项不生效。这里用lombok的
@Data
。
接下来在对应的.yml或.properties文件里进行配置即可。
mcyou:
config:
config1: false
config2: 2
除了在这里配置,自定义配置同样可以通过部署环境的环境变量进行调整。