配置管理
那現在你的代碼可以編譯了,倉庫也搭建起來了,你需要把你的代碼帶出開發環境,走向最終的發布了。別馬虎了,因為自動化執行從長遠來看,好處是大大的。
Chef,Puppet,和Ansible都是常見的選擇。我自己也寫了一個可選方案,Squadron。這個嘛,當然了,我自然是希望你們能下載下它的,因為它比其它那些要好用多了。
不管你用的是哪個工具,別忘了自動化部署就好。
庫
可能Java最好的特性就是它擁有的這些庫了。下面列出了一些庫,應該絕大多數人都會用得上。
Java的標準庫,曾經還是很不錯的,但在現在看來它也遺漏掉了很多關鍵的特性。
Apache Commons
Apache Commons項目有許多有用的功能。
Commons Codec有許多有用的Base64或者16進制字符串的編解碼的方法。別浪費時間自己又寫一遍了。
Commons Lang是一個字符串操作,創建,字符集,以及許多工具方法的類庫。
Commons IO,你想要的文件相關的方法都在這里了。它有FileUtils.copyDirectory,FileUtils.writeStringToFile, IOUtils.readLines,等等。
Guava
Guava是一個非常棒的庫,它就是Java標準庫"所缺失的那部分"。它有很多我喜歡的地方,很難一一贅述,不過我還是想試一下。
Cache,這是一個最簡單的獲取內存緩存的方式了,你可以用它來緩存網絡訪問,磁盤訪問,或者幾乎所有東西。你只需實現一個CacheBuilder,告訴Guava如何創建緩存就好了。
不可變集合。這里有許多類:ImmutableMap, ImmutableList,甚至還有ImmutableSortedMultiSet,如果這就是你想要的話。
我還喜歡用Guava的方式來新建可變集合:
// Instead of
final Map map = new HashMap();
// You can use
final Map map = Maps.newHashMap();
有許多像Lists, Maps, Sets的靜態類,他們都更簡潔易懂一些。
如果你還在堅持使用Java 6或者7的話,你可以用下Collections2,它有一些諸如filter和transform的方法。沒有Jvaa 8的stream的支持,你也可以用它們來寫出連貫的代碼。
Guava也有一些很簡單的東西,比如Joiner,你可以用它來拼接字符串,還有一個類可以用來處理中斷。
Gson
Google的Gson是一個簡單高效的JSON解析庫。它是這樣工作的:
final Gson gson = new Gson();
final String json = gson.toJson(fooWidget);
final FooWidget newFooWidget = gson.fromJson(json, FooWidget.class);
真的很簡單,使用它會感覺非常愉快。Gson的用戶指南中有更多的示例。
Java Tuples
我對Java一個不爽的地方就是它的標準庫中居然沒有元組。幸運的是, Java tuples工程解決了這一問題。
它也很容易使用,并且真的很贊:
Pair func(String input) {
// something...
return Pair.with(stringResult, intResult);
}
Joda-Time
Joda-Time是我用過的最好的時間庫了。簡直,直接,容易測試。你還想要什么?
這個庫里我最喜歡的一個類就是Duration,因為我用它來告訴說我要等待多長時間,或者過多久我才進行重試。
Lombok
Lombok是一個非常有趣的庫。它通過注釋來減少了Java中的飽受詬病的樣板代碼(注:setter,getter之類的)。
想給你類中的變量增加setter, getter方法?太簡單了:
public class Foo {
@Getter @Setter private int var;
}
現在你可以這么寫了:
final Foo foo = new Foo();
foo.setVar(5);
這里還有更多的示例。我還沒在生產代碼中用過Lombok,不過我有點等不及了。
Play框架
備選方案:Jersey或者Spark
在Java中實現REST風格的WEB服務有兩大陣營:JAX-RS和其它。
JAX-RS是傳統的方式。你使用像Jersey這樣的東西來將注解和接口,實現組合到一起來實現WEB服務。這樣做的好處就是,你可以通過一個接口就能很容易創建出一個調用的客戶端來。
Play框架是在JVM上實現WEB服務的截然不同的一種方式:你有一個routes文件,然后你去實現routes中那些規則所引用到的類。它其實就是個完整的MVC框架,不過你可以只用它來實現REST服務。
原文轉自:http://it.deepinmind.com/java/2014/05/21/better-java.html