苏州专业网站seo推广培训机构最新消息
一.原因
编写一个服务类的工具类,想做成一个灵活的配置,各种唯一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 {@Resourceprivate Environment env;@PostConstructpublic 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"));}
}