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 服务注册中心简 ...
随机推荐
- Git分支合并选择
用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并 ...
- 【JAVAWEB学习笔记】21_多条件查询、attr和prop的区别和分页的实现
今天主要学习了数据库的多条件查询.attr和prop的区别和分页的实现 一.实现多条件查询 public List<Product> findProductListByCondition( ...
- POJ1182食物链(并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- Enum in Java
1. Enum Class public enum ContainerPropertyConstants { RETAILER("retailer"), LINED("i ...
- React+ajax+java 上传图片并预览
之前有在网上找ajax上传图片的资料,大部分的人写得都是用jQuery,但是在这里用JQuery就大才小用了,所以我就自己写了,先上图. 由上图,首先点击上面的选择文件,在选择图片之后,将会自动上传图 ...
- 图的M着色问题
问题描述: 给定无向连通图 G 和 m 种不同的颜色.用这些颜色为图 G 和各顶点着色,每个顶点着一种颜色.是否有一种着色法使得图 G 中每条边的两个顶点着不同的颜色.这个问题是图的 m 可着色判定问 ...
- 探讨SQL Server并发处理队列数据不阻塞解决方案
前言 之前对于并发这一块确实接触的比较少,自从遇到现在的老大,每写完一块老大都会过目一下然后给出意见,期间确实收获不少,接下来有几篇会来讲解SQL Server中关于并发这一块的内容,有的是总结,有的 ...
- ElasticSearch的Marvel更新license
Marvel安装的时候需要申请一个license,否则只有30天的使用时间,到期后最多保存7天的监控数据,为了造成不必要的监控数据丢失,建议安装的同时注册一个lincense,方法如下: 1. ...
- 教你一步搭建Flume分布式日志系统
在前篇几十条业务线日志系统如何收集处理?中已经介绍了Flume的众多应用场景,那此篇中先介绍如何搭建单机版日志系统. 环境 CentOS7.0 Java1.8 下载 官网下载 http://flume ...
- Oracle listener服务启动后又停止的解决方案
这是Oracle监听服务.忘了说我的版本是Oracle10g. 我装完Oracle数据库之后,然后用第三方工具plsql去连接,提示no listener,首先我反复检查tnsnames.ora配置文 ...