方式1:@Value
如果仅仅只有一两个配置信息,并且仅仅在很少的地方需要使用,那你可以直接使用@Value
注入,比如:
@Value("${spring.cloud.alicloud.oss.endpoint}")
private String endpoint;
想要抽取一个模板的话,那就是@Value("${配置信息路径}")
,我来给大家看一下我项目中的配置信息路径:
对于使用方法,就直接拿着该属性名称用就好,比如上面的就直接用endpoint
就能获得配置文件中的值
方式2:配置类(推荐)
如果配置信息很多,或者配置信息需要在不同的地方使用,那配置类是一个不错的选择,我来给大家举一个例子吧:
@ConfigurationProperties(prefix = "weibo")
@Data
@Component
public class WeiboInfoComponent {
private String clientId;
private String clientSecret;
private String redirectUri;
}
其中@Data
是lombok的注解,如果你没有用lombok,那你可以创建这几个属性的get以及set方法就可以了,然后@ConfigurationProperties(prefix = "weibo")
注解中的prefix
属性是前缀,等会我把配置文件中的内容贴出来,你就能看懂了,如果你没有前缀,那就可以直接使用@ConfigurationProperties
,里面不用加参数就行,然后@Component
是把当前配置类交给spring管理,这样我们就可以直接注入该配置类,然后在任何地方都可以使用了,我让大家看一下我的application.yml配置文件中是怎么写的,如下:
至于前缀,大家如果还没有明白的话,我再来给大家举一个例子:
然后大家还需要注意的一点是配置类中的属性名称和配置文件中名称的关系,其中配置类中使用小驼峰命名法,而配置文件中的名称使用-分隔多个单词,例如:
现在我们来说如何使用,当你需要使用属性值的时候,直接将配置类注入,然后使用getXXX()方法将数据取出来就可以了,我来用上面一直在说的WeiboInfoComponent
给大家举一个例子,如下:
方法3:使用@Value注解结合静态变量
直接上例子吧:
@Component
public class ConstantPropertiesUtils implements InitializingBean {
// 读取配置文件内容
@Value("${aliyun.sms.file.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.sms.file.accessKeySecret}")
private String accessKeySecret ;
@Value("${aliyun.sms.file.signName}")
private String signName ;
@Value("${aliyun.sms.file.templateCode}")
private String templateCode ;
// 定义公开静态变量
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String SIGN_NAME;
public static String TEMPLATE_CODE;
// 当spring加载之后就会执行本方法
@Override
public void afterPropertiesSet() throws Exception {
// 给上述静态常量赋值
ACCESS_KEY_ID = accessKeyId;
ACCESS_KEY_SECRET = accessKeySecret;
SIGN_NAME = signName;
TEMPLATE_CODE = templateCode;
}
}
当项目启动之后,spring扫描到我们这个类,之后会先给下面的几个私有属性赋值,然后就会就会执行InitializingBean接口中的afterPropertiesSet方法,所以我们可以在这个方法中将私有属性的值赋给对应的静态变量,之后我们可以直接使用类名.静态变量名
来使用配置文件中的值,至于@Value
注解我在方法1
中已经说过了,现在来让大家看一下application.properties配置文件中是怎么写的:
对于使用的话,相比于方法2稍微简单一点,也就是可以直接使用类名.静态变量名
来使用配置文件中的值就可以了,如下: