用java做了一个简单的定时任务工程,不知道如何让它在服务器上运行起来?应该怎么做???

用java做了一个简单的定时任务工程,不知道如何让它在服务器上运行起来?应该怎么做???,第1张

这个是我在网上找的不知道是不是你要的:

java定时任务Timer 关于定时任务,似乎跟时间操作的联系并不是很大,但是前面既然提到了定时任务,索性在这里一起解决了。设置定时任务很简单,用Timer类就搞定了。一、延时执行首先,我们定义一个类,给它取个名字叫TimeTask,我们的定时任务,就在这个类的main函数里执行。代码如下:

package test;

import javautilTimer;

public class TimeTaskTest {

public static void main(String[] args){ Timer timer = new Timer();

timerschedule(new Task(), 60 1000);

}

}

解释一下上面的代码。上面的代码实现了这样一个功能,当TimeTask程序启动以后,过一分钟后执行某项任务。很简单吧:先new一个Timer对象,然后调用它的schedule方法,这个方法有四个重载的方法,这里我们用其中一个,

public void schedule(TimerTask task,long delay)

首先,第一个参数第一个参数就是我们要执行的任务。这是一个TimerTask对象,确切点说是一个实现TimerTask的类的对象,因为TimerTask是个抽象类。上面的代码里 面,Task就是我们自己定义的实现了TimerTask的类,因为是在同一个包里面,所以没有显性的import进来。Task类的代码如下

package test;

import javautilTimerTask;

public class Task extends TimerTask { public void run()

{

Systemoutprintln("定时任务执行");

}

}

我们的Task必须实现TimerTask的方法run,要执行的任务就在这个run方法里面,这里,我们只让它往控制台打一行字。第二个参数第二个参数是一个long型的值。这是延迟的时间,就是从程序开始以后,再过多少时间来执行定时任务。这个long型的值是毫秒数,所以前面我们的程序里面,过一分钟后执行用的参数值就是 60 1000。二、循环执行设置定时任务的时候,往往我们需要重复的执行这样任务,每隔一段时间执行一次,而上面的方法是只执行一次的,这样就用到了schedule方法的是另一个重载函数public void schedule(TimerTask task,long delay,long period)

前两个参数就不用说什么了,最后一个参数就是间隔的时间,又是个long型的毫秒数(看来java里涉及到时间的,跟这个long是脱不了干系了),比如我们希望上面的任务从第一次执行后,每个一分钟执行一次,第三个参数值赋60 1000就ok了。三、指定执行时间既然号称是定时任务,我们肯定希望由我们来指定任务指定的时间,显然上面的方法就不中用了,因为我们不知道程序什么时间开始运行,就没办法确定需要延时多少。没关系,schedule四个重载的方法还没用完呢。用下面这个就OK了:

public void schedule(TimerTask task,Date time)

比如,我们希望定时任务2006年7月2日0时0分执行,只要给第二个参数传一个时间设置为2006年7月2日0时0分的Date对象就可以了。有一种情况是,可能我们的程序启动的时候,已经是2006年7月3日了,这样的话,程序一启动,定时任务就开始执行了。schedule最后一个重载的方法是public void schedule(TimerTask task,Date firstTime,long period)

没必要说什么了吧:)四、j2ee中的定时任务在实际的项目中,往往定时任务需要对web工程中的资源进行操作,这样一来,用上面的单个程序的方式可能就有点力不从心了,因为很多web工程的资源它操作不到。解决的办法是,使用Servlet,把执行定时任务的那些代码放到Servlet的init()函数里就可以了,这个easy,就没有必要再写示例代码了吧

java远程调用,具体实现?

1、使用java代码通过ssh登陆linux并执行命令,正常情况下sshd服务都会有,知道用户密码就可以使用这种方式了。

2、要在远程linux服务器上执行命令,可以在linux服务器上启动一个服务做执行脚本的代理,不断接受来自你这个项目发来的脚本信息,然后执行,再把结果返回给你项目中去。

第一种:以消息队列的方式发送这些脚本信息,linux代理不断接受,并返回结果。项目同时要不断接受结果。

第二种:项目中产生的脚本,直接记录到数据库,linux上的代理访问这个数据库,获取脚本信息,并将执行结果写入数据库。项目中轮询执行结果。上面我说的消息队列可以采用activemq,或者rabbitmq这些。命令执行,java中直接RuntimegetRuntime()exec(command);就行了。

linux远程工具?

1、Xshell

介绍:xshell是一个非常强大的安全终端模拟软件,它支持SSH1,SSH2,以及Windows平台的TELNET协议。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。(也是我目前使用的远程连接工具)

2、secureCRT

介绍:

SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输

filter 拦截器是能这么做的,但是打字太费劲了;

和你说个简单的场景,web项目启动后,会跳转一个indexjsp吧,你用ajax 在jsp中调用一下;如果在indexjsp就要使用此方法返回的数据,让项目跳转到index0jsp ajax跳转到indexjsp 就可以了;

说个思路,此方法也就取个巧

public class Listener {

public static Object lock = new Object();

public void run() {

while (true) {

synchronized (Listenerlock) {

if (hasData()) {

//do check data

}

nodifyForLock();

}

threadSleep();

}

}

public static boolean hasData() {

// return has data

}

public static void threadSleep() {

//sleep 5 second

}

private void nodifyForLock() {

Listenerlocknotify();

}

}

public class Quartz {

public void run() {

synchronized (Listenerlock) {

if (ListenerhasData()) {

waitForLock();

}

//do quartz

}

}

private void waitForLock() {

try {

Listenerlockwait();

} catch (InterruptedException e) {

eprintStackTrace();

}

}

}

使用同步锁机制,确保监听器和定时器不会同时运行。

使用Wait Nodify机制,确保有数据时定时器会等待,直到数据处理完成。

无论采用Thread还是别的什么,在Java里,只要程序跑到了main的return,就会结束。daemon线程一样会被主线程结束掉。

参考Core java II

在main里这样写:

while(true) {

Socket s = socketaccept();

//这个地方new 一个线程出来对这个s对象指向的socket实例进行操作

}

通过系统的kill命令结束进程退出。

也可以在main开始的时候起一个监视Systemin的线程,当用户输入exit时候退出。

    一 Java程序的启动过程        对于普通用户来说 Java最让人不习惯的是程序的启动过程 即使对于富有经验的开发者 为了用默认的装载器启动Java程序 不得不编写大量批命令 脚本文件 不得不在命令行环境下进行大量的复制/粘贴操作 也很容易出现误操作         用惯了Windows方便快捷的GUI 人们早就习惯了通过双击运行程序的方式 对于Java程序 要实现这个本机启动功能就必须编写定制的启动器 用定制启动器启动Java程序不仅方便了最终用户 而且使软件作品看起来更专业 本文就以Windows平台为例 介绍如何构造Java定制启动器         Java程序可以由任何本机运行的程序调用执行 所谓Java启动器 就是一个专门用来启动Java程序的本机执行程序 最常见的启动器是Sun在Java Runtime Environment的/bin目录中提供的启动器 就Windows平台而言 它们是java exe和javaw exe 前者运行时打开两个窗口 一个是接收System out/err和启动器输出的控制台窗口 另一个是Java程序本身的窗口 javaw运行时不打开控制台窗口 在J SE/EE平台中 虚拟机以动态库的形式实现 也放在/bin目录下 动态库的名字在Windows中是java dll 在Unix中是java so 所谓 装入虚拟机 就是指装入这个动态库         提供给VM的参数可以通过两种方式指定 或者是在启动器的命令行参数中指定 或者通过定义相应的环境变量指定 只有一个参数例外 要启动的类的名称只能在启动器的命令行参数中指定 虽然指定方式的多样姓为人们各取所需带来了方便 但不可否认地 它也正是许多混乱的根源 使用定制启动器能够完全避免这方面的问题         当VM结束启动类的main()方法的运行 启动器调用destroy()方法释放各种资源并退出 应当注意的是 VM一旦开始运行 我们就不能再卸载它 对于Java启动器来说 能否关闭VM无关紧要 因为启动器会随着Java程序的退出而退出 然而 对于嵌入了VM的本机应用 例如浏览器 这意味着有一块内存被永久姓地占用 不能再收回         二 Windows平台的启动器        搞清楚了Java程序的启动过程 我们就可以开始编写启动器的代码 下面这个启动器用C++写成 适合于所有Windows平台         首先 就象大多数Windows程序一样 启动器需要一个WinMain()入口 与Windows这一特定平台相关的问题 除了必要的类型转换(例如对CreateJavaVM()的转换)之外 另外一个要注意的地方就是装入VM的DLL文件 装入DLL文件最可靠的办法是显式地调用LoadLibrary() 装入JVM之后 就可以利用内核调用GetProcAddress()获得CreateJavaVM()的函数指针 然后调用该指针启动VM 在启动类的标识符中使用的分隔符是斜杠 而不是句点 即我们用 javabunny/JavaBunny 表示启动类 而不是用 javabunny JavaBunny 的形式 这是因为 FindClass()是一个虚拟机调用 而虚拟机内部用斜杠作为分隔符 随便说明一下 这个例子把启动类的名字(和其他一些配置选项)直接写进了代码之中(称为 硬编码 ) 对于提供给最终用户使用的产品 这种做法有其优点 但对于开发环境来说 这些值最好拿出来放在某个配置文件中         Java程序启动后执行的第一个方法称为启动方法 通常是main() 本例通过JNI调用GetStaticMethodID()获得启动方法的ID GetStaticMethodID()要求指定方法的名字( main )和方法的类型描述符( ([Ljava/lang/String;)V ) 这个类型描述符表示方法的参数是一个字符串的数组 返回值类型是void 有关类型描述符的更详细的说明 请参见JVM相关资料 注意 从这里可以看出 在使用定制启动器时 Java程序的启动方法不必一定是static void的main方法 可以用任何方法作为Java程序中第一个执行的方法 甚至包括实例方法或构造函数         示例程序中最后一个需要注意的地方是jvm >DestroyJavaVM()调用 从表面看起来 这个语句似乎是程序执行后进行清理工作的方法 可有可无 其实不然 如果Java程序是多线程的 在调用这个方法时程序仍旧在运行 例如 对于一个运行着的Swing程序 如果它的main方法结束 DestroyJavaVM()的执行将被阻塞 直至所有非守护线程都执行完毕 所以这行代码是必不可少的 如果省略这行代码 则当主线程执行完毕 即使其他线程(例如Swing GUI的事件循环)仍旧在运行 整个程序也会立即退出         三 配置和使用        如前所述 这个启动器以硬编码的方式指定了启动类的名字 但是没有一个路径是硬编码的 这是定制启动器的优点之一 由于所有的路径都是相对的 用户可以把整个Java应用从一个文件夹拖到另一个驱动器(或另一台机器)的文件夹 程序的运行不会出现任何问题 本文的启动器假定JRE总是在应用软件所在目录的一个子目录下 也就是说 JRE应当随同应用软件一起发布 这样做的好处是使得应用软件完全不依赖于用户的环境 确保了JRE与应用程序的兼容姓 即使用户系统中原来已经有JRE 增加一个额外的JRE也只不过稍微占用了一点磁盘空间 但却能有效地保证应用软件的稳定姓         在某些场合 你可能需要将一些配置参数移出程序 例如放入一个配置文件 特别是在需要频繁改动启动方式的开发阶段 建议移出程序之外的配置选项包括 启动类 类的路径 某些VM参数 例如 verbose lishixinzhi/Article/program/Java/hx/201311/26520

照教材上输入代码就能正常工作,服务器端在把自己服务器端代码绑定到 RMI repository 之后应该 sleep 或 wait 阻塞。

你只需要知道为什么你的客户端退出之后服务器端也退出的原因不就知道怎么解决它了

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 用java做了一个简单的定时任务工程,不知道如何让它在服务器上运行起来?应该怎么做???

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情