一篇关于springboot@value注解使用的文章

590 阅读3分钟

前文:

​ 很早就想开始写技术博客了,用来记录工作中遇到的各种问题,以及解决问题方法的文章。但是人懒惰一直没有开始,然后在工作场景中碰到了一点问题,并解决了问题,于是下定决心,以此问题开始我的第一篇技术博客。

场景:

​ 自己是独立开发项目的人员,开发的是微信公众号,于是要记录各种关于公众号的配置信息(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;
    }
}
最终:

​ 现在不用每次切换环境都需要去改变相关的配置信息,满足了我最开始想要的效果。