前文:
很早就想开始写技术博客了,用来记录工作中遇到的各种问题,以及解决问题方法的文章。但是人懒惰一直没有开始,然后在工作场景中碰到了一点问题,并解决了问题,于是下定决心,以此问题开始我的第一篇技术博客。
场景:
自己是独立开发项目的人员,开发的是微信公众号,于是要记录各种关于公众号的配置信息(appID、appsecret、token、templateCode)等信息。由于测试环境和生产环境信息不同,所以每次打包的时候都要更换配置信息,过程繁琐且可能忘记导致项目出问题,于是在此情况下,自己想办法解决了此问题,用到的就是springboot的@value注解,并且记录下@value注解的不同用法。
最开始:
场景:
开发公众号时会用到各种配置信息,配置信息在确认后,基本就不会再去改变了。
解决办法:
为了方便在不同地方引用这些配置环境变量,创建一个常量类。
/**
* 微信公众号通用常量
*/
public interface WechatConstant {
/**
* 域名
* 开发:test1
* 生产:product1
*/
public static final String URL_STRING = "test1";
/**
* 公众号APPID
* 开发:
* 生产:
*/
public static final String WECHAT_APPID = "";
/**
* 公众号APPSECRET
* 开发:
* 生产:
*/
public static final String WECHAT_APPSECRET = "";
/** 公众号TOKEN
* 开发:
* 生产:
*/
public static final String WECHAT_TOKEN = "";
/**
* 预约成功通知模板ID
* 开发:
* 生产:
*/
public static final String RESERVATION_TEMPLET_CODE = "";
/**
* 预约取消成功通知模板ID
* 开发:
* 生产:
*/
public static final String RESERVATION_CANCEL_TEMPLET_CODE = "";
}
产生的问题:
每次切换环境都要来修改一次里面的常量信息,整个过程繁琐,且容易忘记。
改进后:
场景:
为了解决用常量来记录配置信息带来的麻烦,于是想到了将这些配置信息放入配置信息中,这样每次打包都不用来更改常量类了。这个使用就要用到了springboot的@value注解。
使用方法:
1.在springboot配置文件中添加微信公众号相关的配置信息。
#微信公众号配置信息
wechat:
url: test1
appID:
appsecret:
token:
EncodingAESKey:
#模板配置
template:
#预约通知模板
reservation:
success: KXtPvfMn5tK5cT4-BbeK2O42pb2JTjY48FNHm8uSAF0
cancel: 1ySKU2h2jbsUNZcYmB9ilomtfB_FWEpgqFsUUGlBJ4M
2.创建相对应的类,@Component注解必须要有,Lombok的@Data注解可以免去手动创建get、set方法。
/**
* @description:微信开发信息
*/
@Data
@Component
public class WechatAccountConfig {
@Value("${wechat.appID}")
private String appId;
@Value("${wechat.appsecret}")
private String appSecret;
@Value("${wechat.token}")
private String token;
@Value("${wechat.EncodingAESKey}")
private String EncodingAESKey;
}
3.在需要使用的地方注入使用即可。
@Autowired
private WechatAccountConfig wechatAccountConfig;
产生的问题:
在我每个使用的方法我都需要注入,这是个很麻烦的事,我想改进成像引用静态常量一样,于是有了最终的方法。
最终版:
在使用@value注解方法上,将配置信息类的属性变为静态属性,这个时候要对get、set方法进行改造,没办法使用@Data注解简化我们的类了,以下就是改造方法,将属性值改成静态属性,get方法全部变为静态方法,@value注解使用在set方法上:
@Component
public class WechatConfigConstant {
/**
* 域名地址
*/
public static String url;
public static String appId;
public static String appSecret;
public static String token;
public static String EncodingAESKey;
public static String getUrl() {
return url;
}
@Value("${wechat.url}")
public void setUrl(String url) {
WechatConfigConstant.url = url;
}
public static String getAppId() {
return appId;
}
@Value("${wechat.appID}")
public void setAppId(String appId) {
WechatConfigConstant.appId = appId;
}
public static String getAppSecret() {
return appSecret;
}
@Value("${wechat.appsecret}")
public void setAppSecret(String appSecret) {
WechatConfigConstant.appSecret = appSecret;
}
public static String getToken() {
return token;
}
@Value("${wechat.token}")
public void setToken(String token) {
WechatConfigConstant.token = token;
}
public static String getEncodingAESKey() {
return EncodingAESKey;
}
@Value("${wechat.EncodingAESKey}")
public void setEncodingAESKey(String encodingAESKey) {
EncodingAESKey = encodingAESKey;
}
}
最终:
现在不用每次切换环境都需要去改变相关的配置信息,满足了我最开始想要的效果。