quartz 任务错过处理, java读取resource下文件,JSONObject、String、Map互相转换,Array、List、Set互转实例

quartz 任务错过处理 [来源1] [来源2]

采用StatefulJob,使jobDetails顺序执行,只有前一次job运行完成后,才会运行本次job;
而多个jobDetails可以并行,互不影响,因为它们是多个线程各自运行;

// 设置错失触发后的调度策略
withMisfireHandlingInstructionDoNothing
说人话: 啥也不干 下次按照原频率继续
——不触发立即执行
——等待下次Cron触发频率到达时刻开始按照Cron频率依次执行

withMisfireHandlingInstructionIgnoreMisfires
说人话: 错过的全部同时执行 下次按照原频率继续
——以错过的第一个频率时间立刻开始执行
——重做错过的所有频率周期后
——当下一次触发频率发生时间大于当前时间后,再按照正常的Cron频率依次执行

withMisfireHandlingInstructionFireAndProceed
说人话:立即执行 下次按照原频率继续
——以当前时间为触发频率立刻触发一次执行
——然后按照Cron频率依次执行

  triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionDoNothing());

java读取resource下文件

  public void testReadFile() throws IOException {
    Resource resource = new ClassPathResource("resource.properties");
    InputStream is = resource.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String data = null;
    while((data = br.readLine()) != null) {
        System.out.println(data);
    }
    br.close();
    isr.close();
    is.close();
}

JSONObject,String,Map互相转换

  String json = JSON.toJSONString(map);//map转String
  JSONObject jsonObject = JSON.parseObject(json);//String转json
  //json转map
  Map<String, String> jsonMap = JSONObject.toJavaObject(jsonObject, Map.class);
  //String转map
  Map<String, String> jsonMap1 = JSONObject.parseObject(json, Map.class);

Array、List、Set互转实例 [来源]

Array、List

  // Array转List (对s的修改,直接影响list)
  String[] s = new String[]{"A", "B", "C", "D","E"};
  List<String> list = Arrays.asList(s);

  // List转Array (对list中关于元素的修改,不会影响dest)
  String[] dest = list.toArray(new String[0]);//new String[0]是指定返回数组的类型
  System.out.println("dest: " + Arrays.toString(dest));

List、Set

  // 被转换的List(Set)的修改不会对被转化后的Set(List)造成影响
  // List转Set
  Set<String> set = new HashSet<>(list);
  System.out.println("set: " + set);
  // Set转List
  List<String> list_1 = new ArrayList<>(set);
  System.out.println("list_1: " + list_1);

Array、Set

  // array转set
  s = new String[]{"A", "B", "C", "D","E"};
  set = new HashSet<>(Arrays.asList(s));
  System.out.println("set: " + set);
  // set转array
  dest = set.toArray(new String[0]);
  System.out.println("dest: " + Arrays.toString(dest));

延伸

  上述列出的互相转换离不开Arrays.asList()和Collection.toArray()两个重要的方法;

  Arrays.asList()
  @SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
  这里出现的ArrayList<>并不是我们通常使用的java.util.ArrayList,因为java.util.ArrayList没有数组作为参数的构造函数。查看对应的源码发现,其实Arrays类的静态内部类。  
  可以看到,这个由Arrays类实现的另一个Arrays$ArrayList,对于java.util.ArrayList类来讲,是比较简单粗糙的类。

  没有扩容机制;

  无法在指定位置add(int index, E element),调用该方法会抛异常;

  这些不同让这个ArrayList看起来实际上就是一个List-View(视图类型的List)的数组。

  Collection.toArray()
  List、Set的具体实现类都对Collection.toArray()方法进行了不同程度的重写,可查看源码
posted @ 2021-02-09 10:46  CalronLoveRonnie  阅读(143)  评论(0编辑  收藏  举报
AmazingCounters.com