技术标签: java 定时调用存储过程
1、首先需要用到的一些开发工具:
JDK(我用的1.7)
MyEclipse 2014
JavaService
JavaService可在官网下载,下载地址:http://javaservice.objectweb.org,下载之前官方需要确认你的一些个人信息,提交后可以进入资源下载页面,我这里下载的是2.0.10版本。解压后有很多文件,我们只需要用到其中的JavaService.exe。
2、接着编写一个Java工程
代码:
001、调用Kettle
package com.kettle;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.util.EnvUtil;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
/**
* kettle version 5.4.0.1-130
* ClassName: KettleUtil
* @Description: TODO
* @Author: Pru
* @Email : [email protected]
* @date 2017年12月12日 上午10:24:11
*/
public class KettleUtil {
/**
*
* @Description: TODO
* @param @param transFileName
* @param @throws Exception
* @return void
* @throws
* @Author: Pru
* @Email : [email protected]
* @date 2017年12月12日
*/
public static void callNativeTrans(String transFileName) throws Exception{
callNativeTransWithParams(null, transFileName);
}
/**
* 调用trans文件 带参数的
* @Description: TODO
* @param @param params
* @param @param transFileName
* @param @throws Exception
* @return void
* @throws
* @Author: Pru
* @Email : [email protected]
* @date 2017年12月12日
*/
private static void callNativeTransWithParams(String[] params,String transFileName) throws Exception {
// 初始化
KettleEnvironment.init();
EnvUtil.environmentInit();
TransMeta transMeta = new TransMeta(transFileName);
//转换
Trans trans = new Trans(transMeta);
//执行
trans.execute(params);
//等待结束
trans.waitUntilFinished();
//抛出异常
if(trans.getErrors() > 0){
throw new Exception("There are errors during transformation exception!(传输过程中发生异常)");
}
}
/**
* 调用job文件
* @Description: TODO
* @param @param jobName
* @param @throws Exception
* @return void
* @throws
* @Author: Pru
* @Email : [email protected]
* @date 2017年12月12日
*/
public static void callNativeJob(String jobName) throws Exception{
// 初始化
KettleEnvironment.init();
JobMeta jobMeta = new JobMeta(jobName,null);
Job job = new Job(null, jobMeta);
//向Job 脚本传递参数,脚本中获取参数值:${参数名}
//job.setVariable(paraname, paravalue);
job.start();
job.waitUntilFinished();
if (job.getErrors() > 0) {
throw new Exception("There are errors during job exception!(执行job发生异常)");
}
}
}
002、服务代码
package com.erpservice;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import com.kettle.KettleUtil;
public class Service implements Runnable {
private static Logger LOGGER = LogManager.getLogger(ERPService.class.getName());
private boolean runFlag = true;
/**
* 设定服务线程运行标志值
*
* @param runFlag
*/
public synchronized void setRunFlag(boolean runFlag) {
this.runFlag = runFlag;
}
/**
* 取得服务线程运行标志值
*
* @param void
*/
@SuppressWarnings("unused")
private synchronized boolean getRunFlag() {
return runFlag;
}
@Override
public void run() {
System.out.println(getLocalTime()+"服务线程开始运行");
LOGGER.info(getLocalTime()+"-----------kettle定时任务运行开始-----------");
String transFileName = "C:/Softwares/data-integration/samples/test/test_ccgc.kjb";
try {
KettleUtil.callNativeJob(transFileName);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
LOGGER.info(getLocalTime()+"-----------kettle定时任务运行结束-----------");
System.out.println("服务线程结束运行");
}
public String getLocalTime(){
String time ="[";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
time += df.format(new Date()).toString();
time+="]";
return time;
}
}
package com.erpservice;
public class ERPService {
private static Thread thread = null;
private static Service service = null;
/**
* 退出服务方法(该方法必须有参数 String [] args)
*
* @param args
*/
public static void StopService(String[] args) {
System.out.println(service.getLocalTime()+"停止服务");
service.setRunFlag(false);
}
/**
* 启动服务方法(该方法必须有参数 String [] args)
*
* @param args
* @throws Exception
*/
public static void StartService(String[] args) throws Exception {
// 产生服务线程
service = new Service();
thread = new Thread(service);
System.out.println("\r\n"+service.getLocalTime()+"-----------启动服务-----------");
try {
// 将服务线程设定为用户线程,以避免StartService方法结束后线程退出
thread.setDaemon(false);
if (!thread.isDaemon()) {
System.out.println(service.getLocalTime()+"成功设定线程为用户线程!");
}
// 启动服务线程
thread.start();
} catch (SecurityException se) {
System.out.println(service.getLocalTime()+"线程类型设定失败!");
}
}
public static void main(String[] args) throws Exception {
//new Service().run();
ERPService.StartService(null);
}
}
3、编写完工程代码后,将工程打包为jar包。
因为有依赖包我自己建了一个MANIFEST.MF文件
Manifest-Version: 1.0
Class-Path: lib/commons-logging-1.1.1.jar lib/commons-vfs-20100924-pentaho.jar lib/kettle-core-5.4.0.1-130.jar lib/kettle-dbdialog-5.4.0.1-130.jar lib/kettle-engine-5.4.0.1-130.jar lib/log4j-1.2.17.jar lib/metastore-5.4.0.1-130.jar lib/ojdbc6.jar
Main-Class: com.erpservice.ERPService
右键项目-Export,选择打包为JAR包
然后NEXT --> NEXT -->选中自己建的MANIFEST.MF文件
4、JAR包打包完毕,接下来开始做注册服务的工作。
将之前下载的JavaService解压得到JavaService.exe后,将它和jar包,统一放到文件夹D:\ERPService内(注意,不要有中文路径,否则服务启动会失败)。
其中err.log和out.log是运行服务后JavaService生成的日志文件。
以管理员身份运行cmd,CD到JavaService.exe和jar包所在的目录
然后执行命令:JavaService.exe -install ERPService "%JAVA_HOME%/jre/bin/server/jvm.dll" -Xmx256m -Djava.class.path="%JAVA_HOME%/lib/tools.jar;%CD%/erpservice.jar" -start com.erpservice.ERPService -method StartService -stop com.erpservice.ERPService -method StopService -out "%CD%/out.log" -err "%CD%/err.log" -current "%CD%" -auto
启动服务命令:net start ERPService
停止服务命令:net stop ECService
卸载服务命令:JavaService -uninstall ERPService
关于“ASP.NET TextBox输入触发事件"的实现,解决方法五花八门,但最简单的就是以下这种方法onkeyup='__doPostBack("ctl00$cph$TxtConpanyName","")'ASPX CODE //为了防止刷新,给控件套上UpdatePanel,可要可不要 <asp:TextBox ID="TxtConpanyNam
本文描述在linux下,怎么分别通过直接下载二进制文件,以及自行源码编译这两种方式安装ffmpeg。安装时遇到的某些问题和错误会扩展开来说明,授之以渔。方式一,直接下载二进制文件ffmpeg现在提供了静态编译版本的二进制可执行文件,可以直接下载下来使用。包含的文件有ffmpeg和ffprobe,不包含libav*等ffmpeg的库。这种安装方式比较实用于直接使用ffmpeg命令行工具的场景。访问https://johnvansickle.com/ffmpeg/这个网页,...
SEO权重是各大搜索引擎给予网站赋予的评估或评价等级,代表着网站在某领域中的权威性、健康度及成长潜力,网站的权重越高一方面代表其越具权威性,另一方面也代表着搜索引擎对其友好度越强,会在排名、流量和信任度评价给予较好的扶持。权重是一个相对性的概念,即根据某既定指标的整体评价中相对的重要程度。如果用容易理解的方法来说,比如指数是量级统计数据,那么权重便是性质评估数据,互联网平台普遍存在指数和权重相关体系化的数据管理。一、 SEO权重与网站的关系1. 百度权重是第三方推出,收录与其没直接联系.
参考链接:链接1链接2本人使用 Tensorflow + kreas 训练得到的 NLP 迁移学习模型,然后采用 Flask web 框架搭建预测模型的独立服务。单独使用该模型时一切正常,后面引入框架后报如题(AttributeError: '_thread._local' object has no attribute 'value')所示错误,网上查阅各种解决办法都没有解决,最后找到了如...
错误近来想装Pr2018和AE2018,从网上下载了安装包,运行set-up到百分之30多时总会提示安装错误127没办法,后来想用ACC下载,结果一直在加载,转圈圈,主体一片空白可能损坏了,Adobe CC Cleanr Tool卸载重装也不管用,可能需要翻墙简直无法可说解决方案搜索了好久也没有一个具体可行的2018版解决方案所以只能换2015版,15版的set...
1.Servlet简介Servlet :运行在服务器端的小程序,servlet 就是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则2.第一个Servlet程序步骤:1.创建javaEE 项目2.定义一个类,实现servlet接口public class ServletDemo1 implements Servlet { }3.实现接口中的抽象方...
在 电脑系统 中,有些程序的使用权限较高,很多时候都需要选择以管理员身份运行程序,一般情况下,我们可以在右键菜单中选择“以管理员身份运行程序”。但是,有的用户发现右击文件后,没有“以管理员身份运行”的选项怎么办呢?技巧分享:在 Windows 7 中,若要以管理员身份运行程序,通常会使用以下方法:使用快捷键“Ctrl”+“Shift”+ 鼠标左键打开程序,程序也会以管理员身份运行。如果要调出“以管...
没有最好的工具,只有最适合的. 最近的项目需要对java 对象和json之间的序列化和反序列化,更准确的说是java bean对象和json之间的转换,使用哪个工具进行转换,让我犹豫了不少时间。 json工具有很多 http://json.org 中列出不少,我接触过的有JSON-java,json-lib,google-gson,还有阿里巴巴的fastjson。JSON-java我最早用过的是
竞争激烈的智能手机领域,能活下来的基本都有两把刷子,比如华为、苹果、小米、OV等这几个品牌,基本已经成了国内消费者入手的必选品牌,尤其是中美贸易摩擦的不断升级,使得华为将市场向国内转移,这也让华为一度成为全球季度销量冠军,这对全球年度销量冠军三星无形中带来了巨大的威胁,因为“销冠”是最好的“广告”!众所周知,虽然三星在国内手机市场份额占比仅个位数,但却在东南亚等地区非常受欢迎,市占比远远超过苹果、...
三菱FX系列PLC串口通讯协议整理记录原因项目要求工具与资料通讯格式如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入记录原因因项目需求,要写上位机与PLC进行...
简介为什么选择zabbix:轻量(一台一般配置的机器支持监控上百台以上机器)、简单(WEB-GUI配置)、高效(支持多种方式采集数据)、企业级、开源、分布式Zabbix官方文档: https://www.zabbix.com/documentation/2.4/参考 http://www.ttlsa.com/zabbix/follow-ttlsa-to-study-zab...
1Error tokenizing data. C error: Buffer overflow caught - possible malformed input file.在使用pandas读取CSV文件的时候,报了上述错误,这是缓冲区溢出错误,造成这种错误的原因是CSV文件中每行使用了 \r ,也就是回车符。解决方案就是给 read_csv 添加参数 lineterminator=”\n” , 指定用“\n” 作为换行符。2“pandas.parser.CParserError: Error