大家平時主要使用什么Java開發(fā)框架?
我們的項目是一個純后臺服務(wù)的項目,也就是沒有前端頁面,只對外提供服務(wù);項目是是基于 Spring Boot 來做的,引入 spring-boot-starter-web,直接對外暴露接口,報文使用的 JSON,有極個別的接口是從老系統(tǒng)遷移過來的,為了讓調(diào)用方盡可能地稍作修改,所以保持了 XML 的報文;在正式的生產(chǎn)環(huán)境中,也是使用的內(nèi)置的 Tomcat;集成了 Swagger,來做接口的文檔在線自動生成。

ORM 框架選擇的是 MyBatis,由于項目中大部分的查詢都做到了單表查詢,而且查詢條件比較固定,所以直接使用注解做的 SQL 語句綁定。
因為項目不僅使用了關(guān)系型數(shù)據(jù)庫,而更多的數(shù)據(jù)是加工關(guān)聯(lián)后保存到了 MongoDB 中,所以項目也用到了 Spring Data MongoDB,我們的 MongoDB 是做了副本集的部署,使用 Spring Data MongoDB,只需要做簡單的配置,就可以完成對多臺 MongoDB 的訪問,如果其中一臺 MongoDB 掛了,對服務(wù)也是沒有影響的,所以我們做 MongoDB 擴(kuò)容的時候是可以在線做的(MongoDB 擴(kuò)內(nèi)存和 CPU 的時候需要停機(jī))。

和部分系統(tǒng)的交互使用到了 RabbitMQ,而 Spring Boot 只要引入 spring-boot-starter-amqp,其實就可以很方便地完成和 RabbitMQ 的集成;生產(chǎn)者和消費者都非常方便。
因為是純接口的服務(wù),為了減輕數(shù)據(jù)庫的壓力,所以我們根據(jù)業(yè)務(wù)場景,將一些接口的結(jié)果直接緩存到 Redis 中(數(shù)據(jù)變化不頻繁,并且業(yè)務(wù)場景的實時性要求不是很高)。在集成 Redis 的時候,我們前后試了兩種方式:
-
Spring Boot 項目,直接使用 @Cacheable 注解就可以完成和 Redis 最簡單的集成,但是后來因為設(shè)置緩存的超時時間不夠靈活,我們后來改成了第二種方案;
-
使用 RedisTemplate,可以完成對 Redis 的絕大部分操作。

