qiyadeng.com

java developer tutorial

记录7月射箭活动(多图)

说起射(箭)可以古代的六艺之一(六艺分别是礼、乐、射、御、书、数)。不光是带兵打仗的将军射箭技术好,如勇将吕布辕门射戟;很多文人的射箭技术也是十分了得,如孔子、孟子等。

哈哈,我们可能和这些将军大家的技艺还有很大差距,但是我们正在一步步和他们到了一个地方--练习射箭的场馆。

第一轮的练习赛,看看我们的小伙伴的姿势,不求命中靶上,但求姿势最帅。

接着我们进行了分组对抗赛分成两组,平均分高的小组,讲获得小礼物。

技术总监首先出场。


实力干将李萌同学

大力手彭涛,(上面有支箭一直没有拔出来)

低调的美女出场

高调的美女出场

箭已经放出去了,姿势还是这么优美,醉了。

总是最认真的那个

结果是。。。。。。。。。我输了,胜利的小组是。



恭喜,恭喜。。。。。

安装国际惯例,最后总是以一顿美味结束的。期待下一次的活动。。。。




你的第一个Eclipse插件-Logger声明

Java开发者应该有使用过很多插件,其中有些很酷的插件,有没有考虑过自己动手写一个。下面我们开始做一些初步的介绍。

一、根据模版生成Eclipse插件

1.新建Plugin项目,如下图,选择Hello,World Command模版



2.运行你的插件,选择运行Eclipse Application

在你的菜单中和工具条上就多了一个菜单和按钮。

二、自定义功能-Logger声明生成

1.修改菜单名称

打开MANIFEST.MF文件,选择下面的Extensions标签。或是直接打开Plugin.xml文件.(同时把SampleHander修改为GenericHandler)

修改完成,plugin.xml文件(文件较长提供下载plugin.xml)。(如果觉得这部分麻烦也可以直接跳过这步)

plugin.xml中主要定义新增加的插件,需要用到那几个扩展点。比如菜单放在什么位置,菜单的内容,以及点击菜单之后触发的动作分别是什么等等。

2.增加点击按钮或者是菜单功能

打开GenericHandler修改其中的execute方法,菜单中或者是按钮点击之后触发的就是这个方法,在这个方法中我们可以选择和编辑器中的文件资源进行交互,这样就能往里面新增内容了。

public Object execute(ExecutionEvent event) throws ExecutionException {
  //IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
  IEditorPart activeEditor = HandlerUtil.getActiveEditor(event);
  CompilationUnitEditor currentEditor = (CompilationUnitEditor) activeEditor.getAdapter(CompilationUnitEditor.class);
  final ITextSelection selection = (ITextSelection)currentEditor.getSelectionProvider().getSelection();
  final ITextEditor editor = (ITextEditor) activeEditor.getAdapter(ITextEditor.class);
  final IDocumentProvider documentProvider = editor.getDocumentProvider();
  final IDocument document = documentProvider.getDocument(editor.getEditorInput());
  IFile file = ((FileEditorInput) currentEditor.getEditorInput()).getFile();
  String className = file.getName();
  className = className.replaceAll(".java", ".class");
  final String finalSnippet = "\tprivate Logger logger = LoggerFactory.getLogger("+className+");\n";
  try {
    document.replace(selection.getOffset(), 0, finalSnippet);
  } catch (org.eclipse.jface.text.BadLocationException e) {
    e.printStackTrace();
  }
  return null;
}

处了对IDcoument进行操作。更常用的一种方法是使用Java Model,对Java文件进行解析。调用javaType.createField方法或者是javaType.createMethod方法。

3.并且在依赖中加入如下内容。


3.运行

运行你的插件,新建一个Java项目和Java类文件,把光标放在文件内,点击菜单或者是按钮,一行代码就自动生成在你的文件中了。


三、更多

关于关于上面代码中的和JDT中资源的交互,可以参考。

1.Eclipse JDT的帮助文档

2.一个不错的网站vogella

3.自己找一些比较简单的插件,先研究研究其他人是如何写的。如GuavaHelper

plugin.xml (2.2KB)

Eclipse看源代码插件-GrepCode

一个优秀的开发离不开看源代码,其中有一种场景时,我们在使用某个类库的时候希望了解,这部分的代码或者这个类库的相关使用情况。点开就发现一个类文件,需要attach source code。我们如果真去找到这部分代码还使需要费点时间的。

Eclipse中有一个插件GrepCode,为我们看源代码提供了方便。


如果出现了如上的代码,只需要点击GrepCode的搜索按钮即可找到相应的源代码。



自动部署神器

开发者或者是维护人员比较烦恼的事情是,需要频繁的部署项目。部署项目本身是一个重复的工作,而去也要特别小心(特别是生产环境),一不小心就容易出现错误。国外有一款专门用于解决部署问题的应用deploybot.

主要需要经过简单几步配置,以后就可以点击Deploy自动完成部署。
1.设置代码仓库信息。
2.设置主机信息,因为主机是在国外,如果使用AutoSFTP的方式,代码从国内的Git拷贝到国外的服务器,然后又从国外的服务器拷贝到国内的服务器可能比较慢。所以,这里推荐使用Custom的方式,自己写脚本在部署的服务器上,从Git仓库中复制代码并部署。
3.开始部署。

分布式锁的实现(基于Redis)

锁是很多系统的基础服务,但是实现分布式环境的锁并不是简单的事情。还好现在各类组件齐全,今天我们介绍基于Redis的锁的Java实现-redssion。

1.安装redis

安装redssion的锁服务队redis的版本有要求,要求必须高于2.6版本。关于redis的安装,请参考redis安装

2.redssion库

redssion的库添加的pom文件中去。

<dependency>
   <groupId>org.redisson</groupId>
   <artifactId>redisson</artifactId>
   <version>2.1.0</version>
</dependency>

3.测试例子

  Config config = new Config();
        config.useSingleServer().setAddress("ipaddress:6379");
        Redisson redisson = Redisson.create(config);
        
        for(int i=0;i<5;i++){
        RLock lock = redisson.getLock("testLock");
        lock.lock(10, TimeUnit.SECONDS);//10s超时
        logger.info("the lock client id is client{}",i);
        Thread.sleep(1000);
        logger.info("client{} unlock",i);
        lock.unlock();
        }

4.参考

redisson