最近项目中需要做定时任务,即定时数据库的备份。定时时间用户可以在界面中配置,要求配置修改好立即生效。

想不到什么好办法。下面是一种实现思路

把用户配置的时间存到properties配置文件中,定时任务每隔一分钟执行一次,每次执行前都会去读取配置文件,如果配置的时间与当前时间一致,则执行任务,否则什么也不做。

之前做的时候,加载配置文件的方法如下

ClassLoader classLoader = this.getClass().getClassLoader();
Properties prop = new Properties();
prop.load(classLoader.getResourceAsStream("/dbbak.properties"));
发现修改了.properties后,即使重新执行,读入的仍为修改前的参数。
此问题的原因在于ClassLoader.getResourceAsStream读入后,会将.properties保存在缓存中,重新执行时会从缓存中读取,而不是再次读取.properties文件。
解决办法就是用如下方法
String fileStr = Thread.currentThread().getContextClassLoader()
.getResource("").toString();
String file = fileStr.substring(5, fileStr.length())
+ "Config.properties";
InputStream in = new FileInputStream(new File(file));
Properties prop = new Properties();
prop.load(in);


下面是测试中完整代码

package org.lkm.db.time;

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Properties; import java.util.Timer; import java.util.TimerTask;

public class Dbbak {

public static void showTimer() throws Exception {         TimerTask task = new TimerTask() {             @Override             public void run() {              try {      if(Dbbak.isRun()){       System.out.println("任务开始执行了");      }else{       //System.out.println("时间未到");      }     } catch (Exception e) {      e.printStackTrace();     }                               }         };                 String fileStr = Thread.currentThread().getContextClassLoader()   .getResource("").toURI().getPath();   String file = fileStr+ "dbbak.properties";   InputStream in = new FileInputStream(new File(file));   Properties prop = new Properties();   prop.load(in);   String time = prop.get("time").toString();

//设置执行时间         Calendar calendar = Calendar.getInstance();         int year = calendar.get(Calendar.YEAR);         int month = calendar.get(Calendar.MONTH);         int day = calendar.get(Calendar.DAY_OF_MONTH);//每天         //定制每天的....执行,         String t[] = time.split(":");         calendar.set(year, month, day, Integer.parseInt(t[0]), Integer.parseInt(t[1]), 00);               Date date = calendar.getTime();         Timer timer = new Timer();                 int period = 60 * 1000;         //每天的date时刻执行task,每隔2秒重复执行         timer.schedule(task, date, period);     }

public static void main(String[] args) throws Exception {       new Dbbak().showTimer();     }             public static boolean isRun() throws Exception{      String fileStr = Thread.currentThread().getContextClassLoader()   .getResource("").toURI().getPath();      System.out.println(fileStr);   String file = fileStr     + "dbbak.properties";   InputStream in = new FileInputStream(new File(file));   Properties prop = new Properties();   prop.load(in);   String time = prop.get("time").toString();   System.out.println(time);                        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm-ss");      String str = sdf.format(new Date());      if(str.split("-")[0].equals(time)){       return true;      }      return false;           }

}

java动态加载配置文件的更多相关文章

  1. java动态加载配置文件(申明:来源于网络)

    java动态加载配置文件 地址:http://blog.csdn.net/longvs/article/details/9361449

  2. log4j和log4j2怎么动态加载配置文件

    应用场景与问题 当项目在运行时,我们如果需要修改log4j 1.X或者log4j2的配置文件,一般来说我们是不能直接将项目停止运行再来修改文件重新部署的.于是就有这样一个问题:如何在不停止当前项目的运 ...

  3. NGINX的启停命令、以及动态加载配置文件的命令

    -- 启动(不推荐):在nginx目录下有一个sbin目录,sbin目录下有一个nginx可执行程序../nginx -- 启动(指定配置文件,推荐)/usr/local/nginx/sbin/ngi ...

  4. java动态加载jar文件

    public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, Invo ...

  5. java动态加载类和静态加载类笔记

    JAVA中的静态加载类是编译时刻加载类  动态加载类指的是运行时刻加载类 二者有什么区别呢 举一个例子  现在我创建了一个类  实现的功能假设为通过传入的参数调用具体的类和方法 class offic ...

  6. Java动态加载类在功能模块开发中的作用

    Java中我们一般会使用new关键字实例化对象然后调用该对象所属类提供的方法来实现相应的功能,比如我们现在有个主类叫Web类这个类中能实现各种方法,比如用户注册.发送邮件等功能,代码如下: /* * ...

  7. JAVA动态加载JAR包的实现

    如何动态的加载这些驱动!不可能把所有的数据库驱动都集成到JAR包中吧?!于是动态加载驱动的JAR包就产生了!其实这些在做系统基础代码时,经常用到,只是一般我们没有机会去搞而已. 动态加载JAR包,使用 ...

  8. Java动态加载jar及class文件

    经常碰到需要动态加载jar及class文件的场景.Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,但JDK仍提供了一整套方法来动态加载jar文件和class文件. 一.动态加载ja ...

  9. java动态加载jar包,并运行其中的类和方法

    动态加载jar包,在实际开发中经常会需要用到,尤其涉及平台和业务的关系的时候,业务逻辑部分可以独立出去交给业务方管理,业务方只需要提供jar包,就能在平台上运行. 下面通过一个实例来直观演示: 第一: ...

随机推荐

  1. 12个有趣的c面试题目

    1.gets()函数 问:请找出以下代码里的问题: #include<stdio.h>  int main(void)  {      char buff[10];      memset ...

  2. 关于session_start()这个问题

    关于session_start()这个问题,其实网上很多解决的方法,论坛也好多人回答这类的问题, 现在的状况是依然有警告提示Warning: session_start() [function.ses ...

  3. IOS被遗忘的知识

    IOS ARC项目使用非ARC文件 1.自己的旧项目没有使用ARC,可是引入的第三方库却是使用了ARC的. 对于第一个情况,给採用了ARC的源文件,加入-fobjc-arc选项 2.自己的新项目使用了 ...

  4. WimMaker 2.0 (2013.10) WIM制作工具

    WimMaker 2.0 (2013.10) WIM制作工具 可用于制作PE启动内核的Wim文件 说明: 因本软件使用.NET2.0制作,故主要用于制作WIM映像不用于备份还原系统(虽可用,但不专业, ...

  5. Office 365 – Exchange Online examples

    原文 Office 365 – Exchange Online examples 2012 is upon us and here’s wishing you all a very happy and ...

  6. 数据库备份还原工具EMS SQL Angel for SQL Server发布1.3版本

    EMS公司,是专门从事企业数据库以及内置于多层次客户服务器结构自动化开发.其EMS SQL Angel for SQL Server工具,便是SQL Servers数据库数据备份还原工具,并且还能使用 ...

  7. VMware vCloud与Zend Server实现PHP应用程序自动化交付

    在巴塞罗那2013年VMworld大会上,开发商VMware公司和zend公司在云管理市场上大放异彩.两家公司的产品VMware vCloud和Zend Server组合,实现了PHP程序自动化交付. ...

  8. Failed to issue method call: Unit mysql.service failed to load: No such file or directory解决的方式

    Failed to issue method call: Unit mysql.service failed to load: No such file or directory解决的方式 作者:ch ...

  9. C# WinForm程序退出的方法(转)

    转自:http://www.cnblogs.com/yugen/archive/2010/08/10/1796864.html 1.this.Close();   只是关闭当前窗口,若不是主窗体的话, ...

  10. [转载]Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...