使用Dropwizard(2)-配置分类ConfiguredBundle
前言不可避免的要用dropwizard作为service框架。持续学习。上次在dropwizard中使用feign,使用hystrix, 算是基本入门了。接下来就是基于此的优化。 把需要使用Configuration的逻辑从Application里分离出来在开始的demo中,由于不知道dropwizard怎么传播类,怎么注入, 把所有的初始化的东西都放到Application里去new出来。现在发现有办法可以分离部分配置逻辑。 现在把feign的基础配置抽离出来: 12345678910111213141516public class ConnectivityBundle implements ConfiguredBundle<HelloWorldConfiguration> { @Override public void run(HelloWorldConfiguration configuration, Environment environment) throws Exception { //init hystrix ...
如何使用visual studio code debug node js
使用Visual Studio Code编写NodeJS, 首先要掌握如何debug。在visual studio code 里,只要按F5就可以了。更多详情,参考 https://code.visualstudio.com/docs/editor/debugging 。
Java Web基础入门
前言语言都是相通的,只要搞清楚概念后就可以编写代码了。而概念是需要学习成本的。 Java基础不用看《编程思想》,基础语法看 http://www.runoob.com/java/java-basic-syntax.html 就可以了,入门后想干啥干啥,如果感兴趣,如果有时间。 Web这里讲的web是指提供API(Application Programming Interface)的能力。那么什么是API? API是指server端和client端进行资源交互的通道。Client可以通过API来获取和修改server端的资源(Resource). 实际上,API差不多就是URL的代称,现阶段,推荐采用RESTfull API. RESTfull APIAPI表现方式就是URL(Uniform Resoure Locator)。RESTfull API是一个概念,规定了应该以什么样的结构去构建API,即应该如何拼接URL。先来看看URL是什么样子的。 资源(Resources)path中的groups和users都是资源的名称,通过参数来确定资源的位置。 行为/操作(M ...
Dagger2 入门解析
前言在为dropwizard选择DI框架的时候考虑了很久。Guice比较成熟,Dagger2主要用于Android。虽然都是google维护的,但Dagger2远比guice更新的频率高。再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好。提前发现问题,更高的效率。 还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深。很少有单独讲Dagger2的。不得已,去看官方文档。 HelloWorld官方的example是基于maven的,由于maven天然结构的约定,compile的插件生成可以和maven集成的很好。而我更喜欢gradle,gradle随意很多,结果就是编译结构需要自己指定。 demo source: https://github.com/Ryan-Miao/l4dagger2 结构如下: 123456789101112131415161718192021222324252627282930.├── build.gradle├── gradle│ └── wrapper│ ├── grad ...
技术开发中一些名词解释
前言现在还记得第一次面试的时候,被问HTML全称是什么,这才意识到记住全称并不是无理取闹,而是个人对这项技术的理解程度还没到。当你去了解一个技术的时候,名词是首先要掌握的,除非你只是皮毛。 常规 英文 全称 desc HTTP HyperText Transfer Protocol 超文本传输协议 HTML HyperTextMark-upLanguage 超文本标记语言 API Application Programming Interface 接口 SQL Structured Query Language 结构化查询语言 NoSQL Not only SQL 不仅仅是sql GUI Graphical User Interface 图形用户界面 IDE Integrated Development Environment 集成开发环境 URL Uniform Resoure Locator 统一资源定位符 Java 英文 全称 desc JDK Java Development Kit Java开发工具 JVM J ...
Git 工作流
前言一直在使用git做版本控制,也一直工作很顺利,直到和别人发生冲突的时候。这才注意到git 工作流并不是那么简单。比如,之前遇到的清理历史。百度到的资料很多,重复性也很多,但实践性操作很少,我很难直接理解其所表达的含义。直接望文生义经常得到错误的结论,只能用时间去检验真理了,不然看到的结果都是似懂非懂,最后还是一团糟。 学习git工作流1. 最简单的使用,不推荐1.1.创建仓库1234567891011121314151617181920212223242526$ pwd/home/ryan/workspace/l4git-workflow$ touch readme.md$ lsreadme.md$ touch .gitignore$ git init初始化空的 Git 仓库于 /home/ryan/workspace/l4git-workflow/.git/$ touch test.txt$ git add .$ git commit -m "init"[ ...
Ubuntu安装java8和java9
安装Jave81. 导入Webupd8 PPA123sudo add-apt-repository ppa:webupd8team/javasudo apt-get update 2. 安装1sudo apt-get install oracle-java8-installer 选择确认条款,用Tab键切换。 3. 设置为默认jdk12//sudo update-java-alternatives -s java-8-oraclesudo apt install oracle-java8-set-default 安装Java91. 导入Webupd8 PPA123sudo add-apt-repository -y ppa:webupd8team/javasudo apt-get update 2. 安装1sudo apt-get install oracle-java9-installer 选择确认条款,用Tab键切换。 3. 设置环境变量1sudo apt-get install oracle-java9-set-defaul ...
Google styleguide 之 javaguide
前一阵都在看阿里巴巴Java开发手册,然后看到有人说google的直接放网上了。看了下,发现只是简单的编码规范。 Google javaguide 地址:http://google.github.io/styleguide/javaguide.html 这里有一份中文的翻译: http://www.blogjava.net/zh-weir/archive/2014/02/08/409608.html
NodeJS 初学之安装配置环境
1.环境安装操作系统: Ubuntu 16.04.2 LTS 1.1安装nvm1ryan@ryan-900X5L:~/temp$ curl https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | bash Note v0.33.4 is the latest version from creationix/nvm 安装好后,关闭重新打开terminal,输入nvm可以验证是否安装 安装目录默认是~/.nvm 使用淘宝镜像国内环境,使用淘宝镜像。配置环境变量,修改.bashrc追加 123# taobao npm mirrorexport NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node 1.2 安装node安装最新的node 1nvm install node 或者指定node版本 1ryan@ryan-90 ...
Optional乱用Empty之No value present
前言看到好多文章都是推荐采用Optinal的,而经常我遇到问题的时候就想:如果设计成optional的话就不会忽略这种NullPointException错误了。然而,optional并不是想用就随便用的。今天花了10分钟追踪一个bug,根源就是optional滥用。 问题描述API返回失败,没有描述原因。看着蛋疼,因为公开的API不方便返回错误详情。于是查log,发现错误日志的message为:No value present。没搞清楚这个错误信息是哪一层跑出来的。需要进一步跟踪。A=>B=>C=>D,一直追踪到C层才找到问题。 问题代码如下: 1234public FieldBuilder withSubcategoryId(Optional<String> id) { this.id = id.get(); return this;} 这是一个创建工厂类,负责创建一个可以使用对象。所有的字段都采用了Opetional的包裹。这个是对象,理应不包含业务逻辑,应该没有错误异常。如果有异常应该显式的throws出来, ...