当前位置: 首页 > 编程日记 > 正文

java动态加载配置文件

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

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

把用户配置的时间存到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;           }

}

转载于:https://www.cnblogs.com/jiangu66/p/3199016.html

相关文章:

商品秒杀,防并发解决思路

我们在做电商项目的时候,经常会遇到抢购秒杀的问题&#xff0c;综合来说主要是两个问题 一&#xff0c;高并发情况下对数据库产生的压力 二&#xff0c;如何避免超卖(库存< 0)的情况。 针对这两个问题来谈下解决思路 一,缓解数据库压力 用 缓存就可以解决 例如redis,memecac…

【组队学习】【31期】动手学数据分析

动手学数据分析 航路开辟者&#xff1a;陈安东、金娟娟、杨佳达、老表、李玲、张文涛、高立业领航员&#xff1a;陈玉立航海士&#xff1a;陈安东、武帅、肖涵哲、叶前坤、沈豪 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/hands-on-data-analysis内容…

php不报错怎么回事,解决PHP 7等web编程语言不报错一例

PHP的开发者必须尽快转到PHP 7平台&#xff0c;因为原来在PHP 5下开发的程序&#xff0c;有很多在PHP 7下都会报错。PHP 5的程序改为PHP 7的写法&#xff0c;工作量是很大的&#xff0c;所以开发者只能一步到位转到PHP 7平台。PHP 7增强了数据类型&#xff1b;数组与变量名不能…

在存储过程中如何实现将ID列表字符串传入IN()

我们在平常编写sql语句时&#xff0c;经常碰到要把id列表字符串&#xff08;比如&#xff1a;001&#xff0c;002&#xff0c;003&#xff0c;....)当做参数传递给存储过程&#xff0c; 那么在存储过程中要用in作为条件进行记录的过滤&#xff0c;那么采用in(idList)&#xff0…

【组队学习】【31期】数据可视化(Matplotlib)

数据可视化&#xff08;Matplotlib&#xff09; 航路开辟者&#xff1a;杨剑砺、杨煜、耿远昊、李运佳、居凤霞领航员&#xff1a;贾献华航海士&#xff1a;杨剑砺、郭棉昇、张文恺、肖桐 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/fantastic-matplo…

java学习路线图(2018年最新版)

最近有些网友问我如何自学 Java 后端&#xff0c;还有些是想从别的方向想转过来&#xff0c;但都不太了解 Java 后端究竟需要学什么&#xff0c;究竟要从哪里学起&#xff0c;哪些是主流的 Java 后端技术等等&#xff0c;导致想学&#xff0c;但又很迷茫&#xff0c;不知从何下…

php instr函数,oracle的instr函数用法

这几天在做一个项目的时候&#xff0c;做到关于用户组权限分配的问题&#xff0c;用到了Oracle的instr函数&#xff0c;现在好好学习下这个函数吧。 在Oracle/PLSQL中&#xff0c; instr 函数返回要截取的字符串在源字符串中的位置。 语法如下&#xff1a;instr( string1, stri…

浏览器内核Trident/Gecko/WebKit/Presto

“浏览器内核”主要指渲染引擎(Rendering Engine)&#xff0c;负责解析网页语法(如HTML、JavaScript)并渲染、展示网页。因此&#xff0c;所谓的浏览器内核通常也就是指浏览器所采用的渲染引擎&#xff0c; 渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏…

Intellij IDEA 将工程转换成maven工程 详解

1> 右键工程&#xff0c;点击 Add Framework Support2> 选中 Maven&#xff0c;再点击 OK3> 工程根目录自动生成 pom.xml 文件&#xff0c;这样 工程就支持 Maven版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 http://blog.csdn.net/che…

【组队学习】【31期】水很深的深度学习

水很深的深度学习 航路开辟者&#xff1a;刘洋领航员&#xff1a;陈宇航海士&#xff1a;刘洋、陈陟原、左凯文、初晓宇、刘羽中 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/unusual-deep-learning内容属性&#xff1a;公测课程内容说明&#xff1a;本…

php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)

“这篇文章属于基本内容。看到它的学生检查他们的代码是否有同样的问题“序言小q又带着问题来了&#xff0c;今天的问题估计是大多数同志都会犯的问题。问题是使用ThinkPHP时查询返回的结果是否为空。你自信吗&#xff1f;你不知道的是空的&#xff01;如果你是这样认为的&…

ZooKeeper客户端地址列表的随机原理

原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nileader.blog.51cto.com/1381108/932948查看PDF版本 转载请用注明&#xff1a;ni掌柜nileadergmail.com 在之前一个文章《ZooKeeper Jav…

Intellij IDEA使用教程(超详细)

转自 http://www.phperz.com/article/15/0923/159067.html转载于:https://www.cnblogs.com/lijingran/p/8585430.html

【组队学习】【31期】青少年编程(Scratch 四级)

青少年编程&#xff08;Scratch 四级&#xff09; 航路开辟者&#xff1a;王思齐、马燕鹏领航员&#xff1a;马燕鹏航海士&#xff1a;王思齐、马燕鹏 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/team-learning-program/tree/master/Scratch内容属性&…

java中mypoiexception,java - 如何使用Poi获取Java中单元格的数据验证源? - 堆栈内存溢出...

此问题包含多个不同的问题。首先&#xff0c;我们需要获取工作表的数据验证&#xff0c;然后为每个数据验证获取数据验证所适用的Excel单元格范围。 如果该单元格位于该单元格范围之一中&#xff0c;并且数据验证是列表约束&#xff0c;则进行进一步处理。 否则返回默认值。如果…

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt

[20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt--//简单探究12c TABLE ACCESS BY INDEX ROWID BATCHED特性.--//当使用12c时,执行计划出现TABLE ACCESS BY INDEX ROWID BATCHED,做一些探究.--//本文主要探究如何使用提示或者隐含参数控制这种特性.1.环境:SCOTTtest01…

Angularjs集成第三方js插件之Uploadify

有时候需要用一些第三方插件&#xff0c;比如datepicker&#xff0c;slider&#xff0c;或者tree等。以前的做法是直接通过jquery取得某个元素&#xff0c;然后调用某个方法即可。但在angularjs中&#xff0c;不能直接这么写&#xff0c;必须写在directive中。 开源项目Angular…

备考12月份电子学会青少年编程能力等级测试(图形化)的公益训练营即将开营

一、考试安排 考试方式 考试形式&#xff1a;在线居家考试&#xff08;全国&#xff09;报名时间&#xff1a;9月26日08:00 ~ 11月23日16:00退费截止时间&#xff1a;11月23日16:00准考证下载时间&#xff1a;11月30日 ~ 考前1天 考前集中测试时间 12月9日&#xff08;周四…

mysql left join超时,MySQL 行锁超时排查方法优化

一、大纲#### 20191219 10:10:10,234 | com.alibaba.druid.filter.logging.Log4jFilter.statementLogError(Log4jFilter.java:152) | ERROR | {conn-10593, pstmt-38675}executeerror.updatexxxsetxxx ? , xxx ?whereRowGuid ?com.mysql.jdbc.exceptions.jdbc4.MySQLTra…

【优秀作业】蚁群优化算法

蚁群优化算法 一&#xff0e;概述 生物学家发现&#xff0c;自然界中的蚁群觅食是一种群体性行为&#xff0c;并非单只蚂蚁自行寻找食物源。蚂蚁在寻找食物源时&#xff0c;会在其经过的路径上释放一种信息素&#xff0c;并能够感知其它蚂蚁释放的信息素。信息素浓度的大小表…

RPC-原理及RPC实例分析

还有就是&#xff1a;RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞&#xff1b; (2)NIO:Non-Blocking IO&#xff0c; 同步非阻塞; 参考&#xff1a;IO多路复用,同步&#xff0c;异步&#xff0c;阻塞和非阻塞 区别 在学校期间大家都写过不少程序&#xff0c;比如写个…

hdu 4608 I-number

http://acm.hdu.edu.cn/showproblem.php?pid4608 直接暴力 代码&#xff1a; #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<cmath> #include<set> #include<map> #include<stack> #inc…

php tab标签,JavaScript代码分享:tab标签的切换

本文实例讲述了js实现点击切换TAB标签。分享给大家供大家参考。具体如下&#xff1a;这里演示的选项卡效果代码&#xff0c;无jq,纯JS来实现&#xff0c;灰色风格&#xff0c;没有怎么美化&#xff0c;或许看上去比较普通&#xff0c;不过兼容性和操作起来挺舒服的&#xff0c;…

二进制,十进制,十六进制

生活中其实很多地方的计数方法都多少有点不同进制的影子。 比如我们最常用的10进制&#xff0c;其实起源于人有10个指头。如果我们的祖先始终没有摆脱手脚不分的境况&#xff0c;我想我们现在一定是在使用20进制。 至于二进制……没有袜子称为0只袜子&#xff0c;有一只袜子称为…

D3.js系列——初步使用、选择元素与绑定数据

D3 的全称是&#xff08;Data-Driven Documents&#xff09;&#xff0c;顾名思义可以知道是一个被数据驱动的文档。听名字有点抽象&#xff0c;说简单一点&#xff0c;其实就是一个 JavaScript 的函数库&#xff0c;使用它主要是用来做数据可视化的。 D3 提供了各种简单易用的…

秦州:西瓜书 + 南瓜书 吃瓜系列 12. 聚类

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 航路开辟者&#xff1a;谢文睿、秦州开源内容&#xff1a;https://githu…

php 5/0,PHP 5.5.0 released.该怎么解决

当前位置:我的异常网 PHP PHP 5.5.0 released.该怎么解决PHP 5.5.0 released.该怎么解决www.myexceptions.net 网友分享于&#xff1a;2013-08-02 浏览&#xff1a;12次PHP 5.5.0 released.The PHP development team is proud to announce the immediate availability of PH…

Windows下SVN权限配置过程详解

本节讲解一下Windows下SVN权限配置说明&#xff0c;针对的是一个目录下多库的情况&#xff0c;下面是具体的介绍&#xff0c;希望通过本文的学习&#xff0c;你能够对SVN权限配置问题有更加深刻的认识。 1、本文档适用于对Subvesion的自带服务svnserve进行权限配置&#xff0c;…

胡小明:大数据应用方向思考

一、警惕大数据过热 1.1 过热产生盲目性 国内大数据的宣传早已过热&#xff0c;很多区县级政府也在考虑成立大数据局&#xff0c;政府对大数据热几乎没有抵抗力&#xff0c;企业没有紧跟就对了&#xff0c;在大数据高潮中反省政府的大数据行为、冷静一下头脑是有益的&#xff0…

Datawhale组队学习周报(第040周)

本周报总结了从 11月15日至11月21日&#xff0c;Datawhale组队学习的运行情况&#xff0c;我们一直秉承“与学习者一起成长的理念”&#xff0c;希望这个活动能够让更多的学习者受益。 第 31 期组队学习已经与大家见面了&#xff0c;这次组队学习一共 11 门开源课程&#xff0…