Spring Boot使用@Value注解给静态变量赋值,并且拼接静态变量

需求:

已有运行好的项目,系统文件根目录是写死的,现想最简洁的修改,减少对其他以根目录拼接的路径的影响。

 

原配置文件路径处理类:

package com.xdja.pki.ra.core.constant;
/**
 * 配置文件常量
 *
 * @author 
 */
public class PathConstants {
    /**
     * 系统配置根目录
     */
    public static String GLOBAL_CONF_ROOT = "/home/xdja/conf/ra/";
    /**
     * 系统全局配置文件
     */
    public static String GLOBAL_CONF_FILE_PATH = GLOBAL_CONF_ROOT + "config.json";
    /**
     * 批量注册模板文件
     */
    public static String BATCH_REGISTER_FILE_PATH = GLOBAL_CONF_ROOT + "RATemplate/";
    /**
     * 批量注册错误信息文件
     */
    public static String BATCH_REGISTER_ERROR_FILE_PATH = GLOBAL_CONF_ROOT + "RATemplate/error/";
    /**
     * CA证书文件路径
     */
    public static String CA_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "caCert.cer";
    /**
     * 所有CA证书文件夹路径
     */
    public static String CA_SERVICE_CERTS_FILE_PATH = GLOBAL_CONF_ROOT + "caCerts";
    /**
     * RA证书文件路径
     */
    public static String RA_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "raServiceCert.cer";
    /**
     * CA证书信任证书链文件路径
     */
    public static String CA_TRUST_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "trustCert.p7b";
}

现将根目录写到配置文件config.properties中:

1. 通常通过@Value注解可以直接得到配置文件的值,比如

    @Value("${ra.tomcat.path}")
    private String tomcatPath;

实践得知上述方法给静态变量赋值只能拿到null

2. 通过非静态set方法将配置文件赋值给静态变量

@Component
public class PathConstants {

    /**
     * 系统配置根目录
     */
    public static String GLOBAL_CONF_ROOT;

    @Value("${conf.path}")
    public void setConfPath(String confPath) {
        GLOBAL_CONF_ROOT = confPath;
    }

}

注意要有注解@Component

3. 原其他路径都为静态变量,在加载时,优先运行,运行结束后才运行非静态set方法,无法拿到预期值,比如:

@Component
public class PathConstants {

    /**
     * 系统配置根目录
     */
    public static String GLOBAL_CONF_ROOT;

    @Value("${conf.path}")
    public void setConfPath(String confPath) {
        GLOBAL_CONF_ROOT = confPath;
    }

    public static String GLOBAL_CONF_FILE_PATH = GLOBAL_CONF_ROOT + "config.json";

}

通过类调用 PathConstants.GLOBAL_CONF_FILE_PATH,运行结果:

4. 开辟新道路,通过在set方法里拼接赋值,达到预期效果。

优化后整体代码:

package com.xdja.pki.ra.core.constant;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 配置文件常量
 *
 * @author 
 */
@Component
public class PathConstants {
    
    /**
     * 系统配置根目录
     */
    public static String GLOBAL_CONF_ROOT;

    @Value("${conf.path}")
    public void setConfPath(String confPath) {
        GLOBAL_CONF_ROOT = confPath;
        GLOBAL_CONF_FILE_PATH = GLOBAL_CONF_ROOT + "config.json";
        BATCH_REGISTER_FILE_PATH = GLOBAL_CONF_ROOT + "RATemplate/";
        BATCH_REGISTER_ERROR_FILE_PATH = GLOBAL_CONF_ROOT + "RATemplate/error/";
        CA_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "caCert.cer";
        CA_SERVICE_CERTS_FILE_PATH = GLOBAL_CONF_ROOT + "caCerts";
        RA_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "raServiceCert.cer";
        CA_TRUST_SERVICE_CERT_FILE_PATH = GLOBAL_CONF_ROOT + "trustCert.p7b";
    }
    /**
     * 系统全局配置文件
     */
    public static String GLOBAL_CONF_FILE_PATH;
    /**
     * 批量注册模板文件
     */
    public static String BATCH_REGISTER_FILE_PATH;
    /**
     * 批量注册错误信息文件
     */
    public static String BATCH_REGISTER_ERROR_FILE_PATH;
    /**
     * CA证书文件路径
     */
    public static String CA_SERVICE_CERT_FILE_PATH;
    /**
     * 所有CA证书文件夹路径
     */
    public static String CA_SERVICE_CERTS_FILE_PATH;
    /**
     * RA证书文件路径
     */
    public static String RA_SERVICE_CERT_FILE_PATH;
    /**
     * CA证书信任证书链文件路径
     */
    public static String CA_TRUST_SERVICE_CERT_FILE_PATH;
}

OK!本来我师傅都放弃这个需求了,就这么弄好啦!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值