springboot将yml文件中的值注入到静态属性
硅谷探秘者
2020-07-18发表
0
0
2937
yml配置文件:
sys:
qq_back: http://www.123.club/indexes
qq_appid: 1018
qq_appkey: 025bf1d0
配置类
public class SystemStaticConstant {
private static String qq_back;
private static String qq_appid;
private static String qq_appkey;
public static String getQq_back() {
return qq_back;
}
public static String getQq_appid() {
return qq_appid;
}
public static String getQq_appkey() {
return qq_appkey;
}
}
自动注入适配器
项目启动中执行,完成注入。
import java.io.File;
import java.lang.reflect.Field;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.context.properties.bind.Bindable;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertyName;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.stereotype.Component;
import com.baidu.aip.util.PhotoCheckUpService;
@Component
@Order(value=1)
public class SystemAttributeConfig implements CommandLineRunner {
@Autowired
private ConfigurableEnvironment environment;
private static Map<String, String> attributeMap = new ConcurrentHashMap<>();
/**
* 指定需要自动注入的范围
*/
private static final ConfigurationPropertyName attributes = ConfigurationPropertyName.of("sys");
private static final Bindable<Map<String, String>> STRING_STRING_MAP = Bindable.mapOf(String.class, String.class);
@Override
public void run(String... var1) throws Exception {
/**
* 在SystemStaticConstant类中配置常量
*/
Binder binder = Binder.get(environment);
attributeMap = binder.bind(attributes, STRING_STRING_MAP).orElseGet(Collections::emptyMap);
System.out.println(attributeMap);
Class<SystemStaticConstant> c = SystemStaticConstant.class;
Field[] fs = c.getDeclaredFields();
for(Field f : fs) {
try {
f.setAccessible(true);
if(attributeMap.containsKey(f.getName())) {
if(f.getType()==String.class) {
f.set(c,attributeMap.get(f.getName()));
}else if(f.getType()==Integer.class||f.getType()==int.class) {
f.set(c,new Integer(attributeMap.get(f.getName())));
}else if(f.getType()==Long.class||f.getType()==long.class) {
f.set(c,new Long(attributeMap.get(f.getName())));
}else if(f.getType()==Double.class||f.getType()==double.class) {
f.set(c,new Double(attributeMap.get(f.getName())));
}else if(f.getType()==Short.class||f.getType()==short.class) {
f.set(c,new Short(attributeMap.get(f.getName())));
}else if(f.getType()==Float.class||f.getType()==float.class) {
f.set(c,new Float(attributeMap.get(f.getName())));
}else if(f.getType()==Boolean.class||f.getType()==boolean.class) {
f.set(c,new Boolean(attributeMap.get(f.getName())));
}
}
} catch (Exception e) {
throw new Exception(e.getMessage()+"----配置文件类型转换异常--->"+f.getName());
}
}
}
}