springboot对resource目录下配置文件读取和修改

1. 将配置文件中的key作为对象的属性进行读取

     test.properties进行读取

springboot对resource目录下配置文件读取和修改_第1张图片

   创建一个类对应配置文件中的key

@Component
@Data
@PropertySource("test.properties")
@ConfigurationProperties(prefix="obj")
public class ObjectProperties {
    private String name;
    private int age;
}

@Data注解添加可以不用在写get/set方法

在controller中使用配置文件中的配置信息

@Autowired
private ObjectProperties objectProperties;    
@ResponseBody
@RequestMapping(value = "/test",method = RequestMethod.POST)
public String test() throws Exception {
    return "name : " + objectProperties.getName() + " age : " + objectProperties.getAge();
}

springboot对resource目录下配置文件读取和修改_第2张图片

 

2. 通过流的方式对test.properties进行修改,读取

    读取:

/**
 * @Title: getProfileByClassLoader
 * @Description: 采用ClassLoader(类加载器)方式进行读取配置信息
 * @return Map 以Map键值对方式返回配置文件内容
 * @param fileName 配置文件名称
 * 优点:可以在非Web应用中读取配置资源信息,可以读取任意的资源文件信息
 * 缺点:只能加载类classes下面的资源文件
 */
public static Map getProfileByClassLoader(String fileName) {
    // 通过ClassLoader获取到文件输入流对象
    InputStream in = Profile.class.getClassLoader().getResourceAsStream(fileName);
    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    Properties props = new Properties();
    Map profileMap = new HashMap();
    try {
        props.load(reader);
        for (Object key : props.keySet()) {
            profileMap.put(key.toString(), props.getProperty(key.toString()));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return profileMap;
}

   修改:

/**
 * 传递键值对的Map,更新properties文件
 * @param fileName 文件名(放在resource源包目录下),需要后缀
 * @param keyValueMap 键值对Map
 */
public static void updateProperties(String fileName, Map keyValueMap) throws Exception {
    //获取文件路径
    String filePath = Profile.class.getClassLoader().getResource(fileName).toURI().getPath();
    System.out.println("propertiesPath:" + filePath);
    Properties props = new Properties();
    BufferedReader br = null;
    BufferedWriter bw = null;
    try {
        // 从输入流中读取属性列表(键和元素对)
        br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
        props.load(br);
        br.close();
        // 写入属性文件
        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath)));
        // 清空旧的文件
        // props.clear();
        for (String key : keyValueMap.keySet()) {
            props.setProperty(key, keyValueMap.get(key));
        }
        props.store(bw, "改变数据");
        bw.close();
    } catch (IOException e) {
        e.printStackTrace();
        System.err.println("Visit " + filePath + " for updating " + "" + " value error");
    } finally {
        try {
            br.close();
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3 定时任务的定时表达式从配置文件中读取

    3.1  在类前面添加   @PropertySource("classpath:test.properties")

    3.2 在定时执行方法签添加   @Scheduled(cron = "${cron.expression}")  使用@Scheduled注解的方法  参数应该设置为空                  @Scheduled(cron = "${cron.expression}")

            public String ScheduledMethod(){}
    3.3 在test.properties中添加

cron.expression=* */2 * * * ?

 

 

 

你可能感兴趣的:(springboot,配置文件)