java-bootstrap
先来看一段每一个项目都要写的BASH脚本。
#!/usr/bin/env bash
in
start )
;;
stop )
;;
restart )
shift
"$0" stop ${@}
"$0" start ${@}
;;
*)
;;
esac
相信大家都不会陌生,每次都重复不免有些难受。抽了点时间做了个简单的实现 https://github.com/geeker-house/jbootstrap
实现的方式比较简单,定义了一个接口用来处理command line arguments传递以及jvm shutdown hook调用, 用serviceloader去加载需要启动的项目。接口和实现如下:
package org.geekerhouse.jbootstrap.api;
/**
* @author SY0503
*/
public interface Launcher {
/**
* command line arguments
* @param args
*/
void launch(String[] args);
/**
* jvm shutdown hook
*/
void destroy();
}
package org.geekerhouse.jbootstrap.main;
import org.geekerhouse.jbootstrap.api.Launcher;
import java.util.ServiceLoader;
/**
* @author SY0503
*/
final class Main {
private final static class Bootstrap implements Launcher {
private final ServiceLoader<Launcher> loader;
private static volatile boolean running = true;
private Bootstrap() {
this.loader = ServiceLoader.load(Launcher.class);
}
@Override
public void launch(String[] args) {
for (Launcher launcher : loader) {
launcher.launch(args);
}
synchronized (Bootstrap.class) {
while (running) {
try {
Bootstrap.class.wait();
} catch (Throwable ignored) {
}
}
}
}
@Override
public void destroy() {
for (Launcher launcher : loader) {
launcher.destroy();
}
synchronized (Bootstrap.class) {
running = false;
Bootstrap.class.notify();
}
}
}
public static void main(String[] args) {
Bootstrap bootstrap = new Bootstrap();
Runtime.getRuntime().addShutdownHook(new Thread(() -> bootstrap.destroy()));
bootstrap.launch(args);
}
}
那么不同的项目该如何处理jvm配置参数呢? 配合maven assembly plugin和maven profile, 我们可以为不同的项目配置不同的目录。 只需要在maven工程文件中添加如下配置就可以:
<profiles>
<profile>
<id>default</id>
<properties>
<profile.active>default</profile.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>empty</id>
<properties>
<profile.active>empty</profile.active>
</properties>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<!-- add profile here -->
</profiles>
当然,launcher的实现类依赖,可以在profile的depency中给出就好了, 这样在构建的时候就可以依据不同的profile给项目打包了。由于比较简单,可以自行插件代码和脚本。
java-bootstrap的更多相关文章
- java +bootstrap table 完整例子
需求:现在常用的table 插件很多, 比如 jquey datatables ,不过操作挺 麻烦, 看到推荐的bootstrap 自带的 table,就用到项目来,先看效果:
- java bootstrap分页
样式如下 datumMap.total总共多少页 datumMap.page第几页 <nav class="pull-right"> <ul class=&quo ...
- 2016年排名Top 100的Java类库——在分析了47,251个依赖之后得出的结论(16年文章)
本文由HollisChuang 翻译自 The Top 100 Java Libraries in 2016 – After Analyzing 47,251 Dependencies . 原作者:H ...
- 2016 年排名 Top 100 的 Java 类库
我们分析了GitHub中47,251个依赖,从中找出了排名前一百的Java类库,让我们看看谁在前面,谁在后面. 我们在漫长的周末的消遣方式就是浏览GitHub并且搜索流行的Java类库.我们决定把其中 ...
- What is Java virtual machine?
Java Virtual Machine (JVM) is a specification that provides runtime environment in which java bytec ...
- Python on Android
Python on Android Posted on April 29, 2015 by Alexander Taylor There are an increasing number of r ...
- oracle存储过程代码覆盖率统计工具
目前针对于高级语言如C++,JAVA,C#等工程都有相关的代码覆盖率统计工具,但是对于oracle存储过程或者数据库sql等方面的项目,代码覆盖率统计和扫描工具相对较少. 因此针对这种情况,设计了代码 ...
- Netty框架入门
一.概述 Netty是由JBOSS提供的一个java开源框架. Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 二. ...
- JVM源码分析之JVM启动流程
原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 “365篇原创计划”第十四篇. 今天呢!灯塔君跟大家讲: JVM源码分析之JVM启动流程 前言: 执行Java类的main方法,程序就能运 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(1)
[源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简 ...
随机推荐
- 如何使用Handler
什么是Handler? Handler可以发送和处理消息对象或Runnable对象,这些消息对象和Runnable对象与一个线程相关联.每个Handler的实例都关联了一个线程和线程的消息队列.当创建 ...
- windows下命令行cmder工具
windows下系统自带的命令行工具,实在是太丑了,输入命令后,有时排版乱七八糟,而且使用惯liunx系统的命令后,实在是不能够接受,这么蹩脚的工具:为此我给大家推荐一款实用的开源工具cmder 下载 ...
- 在JLabel上显示图片,并且图片自适应JLabel的大小
本文转载地址: http://blog.csdn.net/xiaoliangmeiny/article/details/7060250 在写<Core Java>上的示例代码时 ...
- Spring-bean作用域scope详解
Spring Framework支持五种作用域(其中有三种只能用在基于web的Spring ApplicationContext). singleton 在每个Spring IoC容器中一个bean定 ...
- 028hibernate缓存(性能优化策略)
一级缓存 二级缓存 查询缓存 缓存是为了提高性能 变化不是很大,相对静态的对象放入缓存 对象的创建比较耗时
- javaWeb学习总结(8)- JSP标签(6)
一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...
- spring-定时器(2)
Spring提供的三种定时任务机制及其比较 定时任务的需求在众多应用系统中广泛存在,在Spring中,我们可以使用三种不同的定时机制,下面一一描述并加以比较 1. 基于Quartz的定时机制 下面详细 ...
- java集合(1)- 类底层数据结构分析
Java 集合类图 参考:http://www.cnblogs.com/xwdreamer/archive/2012/05/30/2526822.html
- Lambda类库篇 —— Streams API, Collector和并行
本文是深入理解Java 8 Lambda系列的第二篇,主要介绍Java 8针对新增语言特性而新增的类库(例如Streams API.Collectors和并行). 本文是对 Brian Goetz 的 ...
- 在eclipse-jee-juno中配置Aptana对jQuery代码自动提示
主要问题 在Aptana的Web Project中打开js文件有JavaScript的自动提示,但是在JavaEE项目中却没有. 版本 eclipse-jee-juno,即Eclipse 4.2的Ja ...