一.原因
编写一个服务类的工具类,想做成一个灵活的配置,各种唯一code想从配置文件中读取,便有了这个坑。
二.使用@value获取值为null,
这是因为这个工具类没有交给spring boot 来管理,导致每次都是new 一个新的,所以每次取出来的值都是nu l l
三.解决方案
方法1:
@Component
public class MyUtil {
private static String str;
@Value("${zjg.name}")
public void setStr(String str){
MyUtil.str = str;
}
//使用
public static void dd(){
System.out.println(str);
}
}
方法2:
public class MyUtil {
private final static ResourceBundle resourceBundle = ResourceBundle.getBundle("application");
private final static String str = resourceBundle.getString("zjg.name");
//使用
public static void dd(){
System.out.println(str);
}
}
注: private final static ResourceBundle resourceBundle = ResourceBundle.getBundle(“application”); application是propertis的前缀,并且是严格匹配的,例如:上述例子,配置参数就必须放在application.properties中,不能放在application-dev.properties中。
方法3:
public class MyUtil {
private static Environment env = null;
public static void setEnvironment(Environment env) {
MyUtil.env = env;
}
public static String getProperty(String key) {
return env.getProperty(key);
}
//使用
public static void dd(){
System.out.println(getProperty("zjg.name"));
}
}
配置类:
@Configuration注解,在这个类中将Environment注入PropertiesUtil中
@Configuration
public class PropertiesConfig {
@Resource
private Environment env;
@PostConstruct
public void setProperties() {
MyUtil.setEnvironment(env);
}
}
方法4:
ublic class ResourceUtil {
static Properties properties = null;
static{
properties=new Properties();
InputStream in= ResourceUtil.class.getClassLoader().getResourceAsStream("application.properties");
try {
properties.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getValue(String key){
return properties.getProperty(key);
}
public static Properties getProperties(){
return properties;
}
//使用
public static void dd(){
System.out.println(ResourceUtil.getValue("zjg.name"));
}
}