【若要转载,请标明出处,谢谢~~】
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工程来承担,在解耦和性能的角度上,
显得比较分明、科学和专业。
总之,感觉收获很多!!!
相关推荐
### Springboot 打Jar包,Maven完美解决本地Jar包自动打入Springboot Jar包中 #### 背景介绍 随着微服务架构的流行,Spring Boot 成为了开发微服务应用时首选的技术栈之一。它简化了传统的Java Web应用程序的开发...
SpringBoot项目通常默认打包为可独立运行的jar文件,但有时我们需要将其打包成war文件,以便部署到外部的Tomcat服务器。以下是如何将SpringBoot项目从jar格式转换为war格式的详细步骤: 1. **修改pom.xml文件打包...
本文将详细介绍Spring Boot项目打包成jar或war包的过程以及如何运行这些包。 首先,Spring Boot项目默认构建方式是jar包,如果需要将其打包成war包以便部署到传统的Servlet容器中,如Tomcat,需要进行一些额外的...
Spring Boot默认生成的是可执行的JAR包,但有时我们需要将其部署到传统的Web服务器如Tomcat上,这时就需要将Spring Boot项目打包为WAR包。Spring Boot支持通过修改`pom.xml`文件的打包类型(packaging)为`war`来...
Ant是Apache软件基金会开发的一款Java构建工具,它以XML为基础,用于自动化构建Java项目,如生成JAR、WAR等类型的打包文件。在本场景中,我们将深入探讨Ant如何用于创建WAR包,以及与之相关的svn版本控制和文档说明...
将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,分别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目与项目之间的...
本教程将详细介绍如何在本地开发环境中创建一个MapReduce项目,将其打包成JAR文件,并上传到已经配置好的Hadoop集群上运行。 首先,你需要在本地环境中安装Java开发工具(JDK)和Maven,因为MapReduce程序是用Java...
本文将详细讲解如何正确配置Maven的pom.xml文件,以便将Spring Boot项目打包成war格式,这在需要部署到传统应用服务器(如Tomcat)时非常有用。 首先,我们需要理解Spring Boot的默认打包方式是jar,因为它内置了...
在Java开发领域,Spring Boot因其简洁的配置和强大的功能,成为了构建Web应用的首选框架。在实际项目中,我们往往需要根据不同的部署环境(如开发、测试、生产)创建定制化的打包文件。`maven-assembly-plugin`是...
在软件开发过程中,特别是Java Web项目的部署环节,将项目打包成WAR文件是一项常见的需求。WAR文件(Web Application Archive)是一种用于封装Web应用程序的标准格式,它包含了运行该应用所需的所有资源、类文件以及...
以下是将Spring Boot项目打包成WAR并在Tomcat中运行的详细步骤: 1. **修改打包形式**: 在`pom.xml`文件中,将项目的打包类型从`jar`改为`war`。在`<project>`标签内添加或修改`<packaging>`标签,如下所示: ``...
在打成jar包部署时,通常适用于纯Java应用程序,而不是Web应用程序。Web应用通常被打包成war文件,因为它们包含了HTML、CSS、JavaScript等静态资源,以及Servlet、JSP等动态内容。然而,如果你的项目是微服务架构的...
【RAP 打成war并发布到tomcat】 在IT领域,RAP(RWT Application Platform)是一种基于Web的应用程序开发框架,允许开发者构建富客户端应用程序,这些应用能够在多种浏览器上运行,类似于Eclipse RCP(Rich Client ...
在Java开发领域,Maven是一个不可或缺的构建工具,它能够帮助开发者管理项目依赖、构建工件,如JAR或WAR包。"maven打包war配置"这个主题涉及到如何使用Maven来打包一个Web应用程序(WAR)项目。WAR文件是Web应用的...
Java JDK,全称为Java Development Kit,是开发和运行Java应用程序必不可少的软件开发工具包。它由Oracle公司提供,是Java编程环境的基础。JDK包含了Java编译器、Java虚拟机(JVM)、类库以及各种工具,使得开发者...
- 说明:将项目打包成JAR文件。 - **清理项目** - 命令格式:`mvn clean` - 说明:清理项目,删除`target`目录。 - **安装项目到本地仓库** - 命令格式:`mvn install` - 说明:安装当前项目到本地Maven仓库...
* 若启动中报 Servlet.service() for servlet jsp threw exception 错误,可能是 Maven 库生成的包与 TOMCAT 中的 servlet-api.jar,jsp-api.jar 包有冲突,进入项目文件将冲突的包删除就可以。 Myeclipse 配置 ...
在Java开发领域,Ant是一个非常...总之,Ant作为Java开发中的构建工具,其`<war>`任务能方便地帮助开发者将Web应用打包成WAR文件,便于分发和部署。理解并熟练掌握Ant的使用,对于提高开发效率和项目管理具有重要意义。
在SpringBoot项目中,通常我们可以选择打包成可执行的jar包,但在某些部署场景下,比如想要部署到传统的Web应用服务器中(例如Tomcat、Jetty等),需要打包成war包。接下来,我们将详细介绍SpringBoot项目打包成可...