在做第三方接口调用时,经常需要根据不同的环境指定初始化的参数。以下做一个简单的记录。
一、使用static初始化
使用static初始化,仅会初始化一次,但无法从配置文件中获取参数。并且如果写了多个初始化工具类,会互相覆盖。
/**
* 对接工具类
*/
@Component
@Slf4j
public class ApiUtils {
private static ApiUtils apiUtils;
// 生产环境配置
private static String ak = "123456";
private static String sk = "654321";
@Autowired
private RedisCache redisCache;
// 需要参数初始化的实例
private static ApiClient apiClient;
@PostConstruct
public void init() {
System.out.println("ApiUtils初始化>>>>>>>>>>>>>>>>");
apiUtils = this;
apiUtils.redisCache = this.redisCache;
}
// 静态初始化,仅初始化一次
static {
apiClient = ApiClient.getInstance();
apiClient.setAccessKey(ak);
apiClient.setSecretKey(sk);
apiClient.init();
System.out.println("ApiClient初始化>>>>>>>>>>>>>>>>");
}
}
二、根据配置文件获取参数初始化
@Component
@Slf4j
public class ApiUtils {
private static ApiUtils apiUtils ;
@Autowired
private Environment environment;
// 根据配置环境初始化的配置
private static String ak;
private static String sk;
@Autowired
private RedisCache redisCache;
// 需要参数初始化的实例
private static ApiClient apiClient;
@PostConstruct
public void init() {
System.out.println("ApiUtils 初始化开始>>>>>>>>>>>>>>>>");
apiUtils = this;
apiUtils .redisCache = this.redisCache;
apiClient= ApiClient .getInstance();
// 通过读取配置文件中指定的参数
ak= environment.getProperty("set.ak");
sk= environment.getProperty("set.sk");
//应用App Key
apiClient.setAccessKey(ak);
//应用App Secret
apiClient.setSecretKey(sk);
apiClient.init();
System.out.println("ApiClient 初始化结束>>>>>>>>>>>>>>>>");
}
}
yml配置文件设置
set:
ak: 123456
sk: 654321