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 服务注册中心简 ...
随机推荐
- 学习笔记TF011:多层神经网络
线性回归.对数几率回归模型,本质上是单个神经元.计算输入特征加权和.偏置视为每个样本输入特征为1权重,计算特征线性组合.激活(传递)函数 计算输出.线性回归,恒等式(值不变).对数几率回归,sigmo ...
- MapReduce运行流程分析
研究MapReduce已经有一段时间了.起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程.现在把自己的理解贴出来,与大家分享,欢迎纠错. ...
- Linux上open-iscsi 的安装,配置和使用
关于open-iscsi open-iscsi是一个实现 RFC3720 iSCSI协议的高性能initiator程序.iSCSI使得访问SAN上的存储不再只能依赖Fibre Channel,也可以通 ...
- 将数据的初始化放到docker中的整个工作过程(问题记录)
将数据的初始化放到docker中的整个工作过程 由于是打算作为个人博客,所以对于install这个步骤,我从一开始就打算删掉的,前面一个多星期一直在修bug,到前天才开始做这个事情. 过程中也是碰到了 ...
- Linux(Debian、Ubuntu、Deepin等)安装最新版Chrome Unstable
将下载源加入到系统的源列表 sudo wget https://repo.fdzh.org/chrome/google-chrome.list -P /etc/apt/sources.list.d/ ...
- java基础(六章)
一.for循环的使用场合 l while循环--先判断,再循环 while(1.条件表达式){ //2.循环操作 //3.更改循环条件表达式 } l do-while--先循环 ...
- 打开IIS的快捷键
[windows键+R]→在运行界面输入“inetmgr”→点击回车键,即可以出现IIS界面
- 最全面的Java字节byte操作,处理Java基本数据的转换及进制转换操作工具,流媒体及java底层开发项目常用工具类
前言:用于处理Java基本数据的转换及进制转换操作工具 一.实现功能 1.int与byte互转 2.int与byte[]互转 3.short与byte互转 4.short与byte[]互转 5.16位 ...
- 为什么使用dojo?dojo与jquery有什么不同?dojo适合什么开发场景?
首先介绍一下dojo的特性: 1.Dojo是一个符合AMD规范的企业级框架(dojo是一个重量级框架) 2.Dojo全面支持异步加载JS机制(即:支持通过require异步加载JS模块,通过defin ...
- Dom 简介
HTML DOM 简介 DOM 教程 DOM 节点 HTML DOM 定义了访问和操作 HTML 文档的标准. 您应该具备的基础知识 在您继续学习之前,您需要对以下内容拥有基本的了解: HTML CS ...