【若要转载,请标明出处,谢谢~~】
http://raising.iteye.com/admin/blogs/2259209
在实际项目中,很常见的是,会把一个web项目打成war包部署到tomcat或者weblogic服务器上来运行。但相对而言用的较少的是,把某一个java项目(非web项目)打成jar包作为一些
功能的进程,这种是比较巧妙和实用的做法。
比如本人最近接触到一个被打成jar包的java project(注意不是java web project),作为一个服务进程在服务器上运行。觉得很巧妙,故学习了下,记录下实现过程:
对于quartz定时任务, 本人之前的blog都有相关记录。其实久而久之,会认为quartz定时任务一定和Spring相关(包括我也是这样觉得),给人造成一种quartz必须要和Spring关联起来才能
玩下去的固有思维!其实,要保持清醒的头脑——Spring只是作为一个非常优秀的开源管理框架,他并不是quartz定时任务运行的必要条件!!
so,现在就抛开Spring框架。这也和本篇blog探讨的初衷契合——非web项目打成jar包,因为spring常常用于web项目中,而web项目包含很多spring框架依赖的jar包,显得比较臃肿!
我们接下来模拟一种比较实用和常见的情形,一个java project的作用是初始化线程池,运行定时任务和持续监听~~
首先,我们模拟初始化线程池的操作:
public class PoolManager { public static void execute() { System.out.println("模拟初始化线程池操作.."); } }
接下来,模拟定时任务(注:相关jar包必须引入哦):
定时任务包括管理定时任务:
public class QuartzManager { private static Logger log = Logger.getLogger(QuartzManager.class); public static void scheduleJob(Job job,String time){ //获取一个调度器 Scheduler sched; try { sched = StdSchedulerFactory.getDefaultScheduler(); //创建jobDetail实例,绑定Job实例(作业) JobDetail jobDetail = JobBuilder.newJob(job.getClass()).setJobData(new JobDataMap()).build(); //创建触发器(指定在触发时间表达式触发) Trigger trigger = TriggerBuilder.newTrigger() .withSchedule(CronScheduleBuilder.cronSchedule(time)).build(); //调度器将任务类与触发器关联 sched.scheduleJob(jobDetail,trigger); //启动调度 if(!sched.isShutdown()){ sched.start(); } } catch (SchedulerException e) { log.error(e); } } }
(这种代码的方式启动定时任务我之前有篇blog探讨过,详见:http://raising.iteye.com/blog/2205561)
和模拟一个作业类:
public class QuartzJob1 implements Job{ @Override public void execute(JobExecutionContext ctx) throws JobExecutionException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String timeStap = sdf.format(new Date()); System.out.println(timeStap + " 模拟定时任务开始执行"); } }
最后,我们再模拟持续监听哈~
public class AlwaysManager { public static void listener() { while(true) { System.out.println("模拟监听。。。。"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
好了,几种常见的功能的实现都有了,接下来就写一个类负责调度噢:
public class ProcessorMain { public static void main(String[] args) { //第一步:模拟开启初始化线程池 initPool(); //第二步:模拟开启定时任务 startQuartz(); //第三步:模拟开启需要一直执行的程序 startListener(); } //定时任务 public static void startQuartz() { QuartzManager.scheduleJob(new QuartzJob1(), "*/10 * * * * ? *");//每隔20s就定时执行一次 } //线程池 public static void initPool() { PoolManager.execute(); } //监听程序 public static void startListener() { AlwaysManager.listener(); } }
注意哦,在这里,由于持续化监听是一个死循环,你在启动的时候,必须放在启动顺序最后,否则的话,会由于死循环的“阻碍”,其他功能将直接启动不起来……
你可以先运行这个main方法来观察结果……
OK, 到这一步,这些类组成了一个java project。。那么我们就着手把它打成jar包了。
额,打成jar包也是有讲究的。注意不要打成普通的jar包。而是要选择打成runnable jar包,否则你会发现在dos下运行jar包会出现提示找不到相关类的异常,究其原因,是因为
你通过打成普通jar包的方式无法把工程里相关依赖的第三方jar包编译进去!具体做法是:
1)在程序的入口类(本例是ProcessorMain.java)中右键 Run As -> Run Configurations -> Java Application -> ProcessorMain(本例) 指定Project(要被打成jar
包的工程名)和Main class(入口类);
2)在项目上右键 Export -> Runnable JAR file -> 选择刚才第一步的Launch configuration: 入口类 - 工程名(很重要) ->选择导出的位置 -> 指定jar包名称 -> Next .. finish
第二步的目的即是为了较好的将依赖的第三方jar包也给整合进去!
Well done! 开始来见证奇迹的时刻!
打开dos环境(因为我是win7下测试的~),将目录切换到你保存的jar包的路径,然后运行命令:
java -jar processor.jar
运行一会儿,你会发现如下图所示结果:
这说明,将一个普通的java project打成jar包,并实现相关功能的目的成功!
这次的东西让我感觉到,其实Spring只是作为一个优秀的管理框架而已,很多东西(比如本例说到的quartz定时任务的实现不一定非得依赖它才行~);作为jar包,相对war包而言,
少了很多spring的相关jar包,显得比较轻便; 类似本篇blog这种做法打成的jar包可以作为一个web工程的辅助,而不是把所有东西都给web工程来承担,在解耦和性能的角度上,
显得比较分明、科学和专业。
总之,感觉收获很多!!!
相关推荐
JavaProject 工程转为web项目一个
Dynamic Web Project搭建SpringMVC所需要jar包,spring-aop-4.3.3.RELEASE-javadoc.jar等等
项目中,经常把一部分功能独立出来,做一个java project,然后打成jar包供其他项目引用。这时候,如果jar包中需要读取配置文件信息,则很少把该配置打进jar包,因为它不方便修改,更多都是采用jar包读取外部配置文件...
myeclipse在Java Project(java项目)中导入jar环境步骤(图解). 就是不到如jar包,在java工程中运行!很详细的 值得下载!
1、将需要修改的 jar 包 放入 lib 目录下,并加入项目中 ,选中 jar 右击 选择 add a libray这个时候会看到 jar 的 目录 结构 2、选择需要修改的 类 安装 相同的 路径 拷贝到 src 路径下 执行一个 main 方法 进行...
JavaProject.jar
新建一个java project ,将poi.jar包导入,将test.java文件复制到项目里面,在e:盘新建一个Book1.exl文件,里面的内容自己定义,运行CODE,就可以在控制台上看到了。
本篇文章主要介绍了Java Project项目打包成jar,并生成exe文件,非常具有实用价值,有兴趣的可以了解一下。
eclipse查看jar包源码工具:在Eclipse查看开发包jar源码的方法如下: ...3.在打开的窗口中,可选择文件(jar\zip),目录或工作空间中的jar文件,在这里我选择External Folder…,选择如E:/java project/guava即可
涉及到一个JAVA项目的运行。通过某种方式获得一个JAVA的SDK,...这是一个Java Project项目,那么久需要将他打包成为一个可执行文件,这样才能被被广泛使用在服务器上。因为不可能为每一个服务器都安装Eclipse,然后运行
有些项目中存在多个SourceFolder,而我们可能...详情请参考该完整的java项目,或者笔者博文《如何使用ant从多个Source Folder的项目中导出jar包? 》(地址:http://blog.csdn.net/binbinxyz/article/details/7361376)
想要将一个项目导出为jar包,供其它项目使用,在eclipse中可以直接导出该项目为jar包,而 在AS中可以通过修改gradle才处理。 接下来就介绍下具体的步骤: 1、新建一个项目,项目名随意,eg:MakeJarApplication,在...
JAVA 打包(jar\tar\zip)源码 一个完整的java project工程
Java project code
本资源里面包含了在java project工程下如何使用log4j,在java web工程(servlet和struts2)下如何使用log4j,并且对log4j的加载机制,原理进行了详细的介绍和解释,代码部分也进行了详细的注释,值得你看看。
Eclipse Web Project转Dynamic Project教程
如果你在本机上安装了Tomcat,那么这个jar包一般都在tomcat安装目录\lib 文件夹下面有,当你把web项目部署到tomcat,会自动加载这个jar包来识别Serlvet一些对象。 当然你创建的是一个普通JavaProject,那么就需要...
1. 将java项目打成jar包; 2. 设定jar包的Main-class属性; 3. 在python中通过subprocess执行jar包。 修改main函数打jar包 在intellij中打jar包: 1. File–> Project Structure… –> Artifacts –> + –> JAR –>...
java project.rarjava project.rarjava project.rarjava project.rarjava project.rarjava project.rar
javaProject.zip