使用Spring Boot和Cloudant入门微服务
通过优锐课的java架构分享学习中,讨论了关于创建一个简单的微服务来管理Cloudant NoSQL数据库中的产品评论专题。收获颇丰,整理出来给大家参考学习,尤其是架构思维导图对于正在学习中的人很受益!
预计时间
阅读和遵循本教程中的步骤大约需要30分钟到一个小时。
先决条件
要完成本教程,你需要以下内容:
JDK1.8
2.3以上版本
Git客户
安装这些工具后,请将示例应用程序从GitHub克隆到你的本地环境:
java
git clone https://github.com/gangchen03/refarchcloudnativemicrosocialreview.git
Show more
流程
步骤1.在IBM Cloud中预配Cloudant NoSQL DB
要配置Cloudant服务,你需要一个IBM Cloud帐户。 登录到你的IBM Cloud帐户或注册一个新的免费帐户。
要创建Cloudant服务,请转到IBM Cloud目录中的Cloudant NoSQL DB服务(请记住登录到你的IBM Cloud帐户)。 要命名你的Cloudant服务(例如,refarch-cloudantdb),请从服务列表中的操作''下拉菜单中选择
重命名服务’’。
为了进行测试,你可以选择Lite计划,然后单击Create。 创建完成后,打开凭据选项卡并记下你的Cloudant Service凭据。 例如:
{
'username': 'xxxxyyyybluemix',
'password': 'zzzzz',
'host': 'xxxxyyyybluemix.cloudant.com',
'port': 443,
'url': 'https://xxxxyyyybluemix:[email protected]yyyybluemix.cloudant.com'
}
Show more
单击启动按钮以打开Cloudant管理控制台。 现在是空的。
步骤2.使用Gradle构建示例应用程序
现在,你可以处理该应用程序了。 可以使用Gradle或Maven构建Spring Boot应用程序。 对于此操作方法,说明适用于Gradle。
导航到GitHub存储库根文件夹refarch-cloudnative-micro-socialreview; 你应该在该文件夹中找到build.gradle文件。 它定义了库依赖关系和基本的构建配置,例如构建的输出。 该应用程序使用以下依赖项:
java
compile("org.springframework.boot:springbootstarterweb:1.4.0.RELEASE") {
exclude module: "springbootstartertomcat"
}
compile("org.springframework.boot:springbootstarterjetty:1.4.0.RELEASE")
compile("org.springframework.boot:springbootstarteractuator:1.4.0.RELEASE")
compile group: 'com.cloudant', name: 'cloudantspringbootstarter', version: '0.0.2'
compile("junit:junit")
compile group: 'org.springframework.boot', name: 'springbootstartertest', version: '1.4.0.RELEASE'
Show more
请注意依赖项cloudant-spring-boot-starter。 它确保在构建Cloudant Spring Boot Starter时将其下载并添加到项目中。 稍后运行Gradle构建时,所有依赖项将在首次运行时下载。
步骤3.了解代码
借助Spring Boot,构建云原生微服务应用程序非常容易和直接。 在根目录下,大多数文件和文件夹都是与构建相关的。 应用程序代码在src文件夹下管理。 看一下这四个类:
socialreview.cloudant.Application:引导程序和服务器
socialreview.cloudant.Review:数据库中评论的实体表示
socialreview.cloudant.ReviewRestController:用于评论的微服务REST API
socialreview.cloudant.ReviewRestControllerTest:对微服务REST API进行嗅探测试以进行评论
代码审查: src/main/java/socialreview/cloudant/Application.java
这是引导程序类,可加载Web应用程序并启动嵌入式服务器。
java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
System.out.println("SocialReview Spring Boot Microservice is ready");
}
}
Show more
@SpringBootApplication是一个方便注释,可加载有用的Spring组件,例如@ Configuration,@ ComponentScan和@EnableAutoConfiguration。 它还将Spring webmvc添加到类路径并**DispatcherServlet以开始处理请求。
主要功能调用SpringApplication.run引导应用程序。
代码审查: src/main/java/socialreview/cloudant/Review.java
这是一个实体类,它映射到Cloudant NoSQL数据库中保存的文档。 Spring Boot框架使用Cloudant数据库的响应自动序列化实体对象,并在将请求发送回REST请求时将其转换为JSON。
java
public class Review {
private String _rev;
private String _id;
private String comment;
private int itemId;
private int rating;
private String reviewer_email;
private String reviewer_name;
private String review_date;
public Review(){}
public Review(boolean isStub) {
this.comment = "It works";
this.itemId = 13401;
this.rating = 5;
this.reviewer_email = "[email protected]";
this.reviewer_name = "Gang Chen";
this.review_date = "08/18/2016";
}
Show more
代码审查: src/main/java/socialreview/cloudant/ReviewRestController.java
这是公开REST API并与Cloudant数据库进行交互以执行保存和查询操作的主类。
java
@RestController
@RequestMapping("/review")
public class ReviewRestController {
@Autowired
private Database db;
Show more
@RestController告诉Spring MVC以根Web上下文根作为审查来处理Web请求。
将Cloudant Spring Boot Starter作为依赖项添加时,它会自动挂接到Spring应用程序配置中。 使用应用程序属性源中提供的属性,启动程序通过指定@Autowired注释来配置Cloudant数据库bean,该bean可通过依赖项注入进行注入。
java
// Create a new review
@RequestMapping(method = RequestMethod.POST, consumes = "application/json")
public @ResponseBody String saveReview(@RequestBody Review review) {
System.out.println("Save Review " + review);
Response r = null;
if (review != null) {
r = db.post(review);
}
return r.getId();
}
Show more
此代码将审阅注释文档保存/持久保存到Cloudant数据库中。 这是一个POST请求。 Cloudant Java客户端通过上面显示的单个API调用db.post(review)使持久化变得简单。 另一方面,GET(查询)功能稍微复杂一些。
java
// Query reviews for all documents or by ItemId
@RequestMapping(method=RequestMethod.GET)
public @ResponseBody List getAll(@RequestParam(required=false) Integer itemId) {
// Get all documents from socialreviewdb
List allDocs = null;
try {
if (itemId == null) {
allDocs = db.getAllDocsRequestBuilder().includeDocs(true).build().getResponse()
.getDocsAs(Review.class);
} else {
// create Index
// Create a design doc named designdoc
// A view named querybyitemIdView
// and an index named itemId
db.createIndex("querybyitemIdView","designdoc","json",
new IndexField[]{new IndexField("itemId",SortOrder.asc)});
System.out.println("Successfully created index");
allDocs = db.findByIndex("{\"itemId\" : " + itemId + "}", Review.class);
}
} catch (Exception e) {
System.out.println("Exception thrown : " + e.getMessage());
}
return allDocs;
}
Show more
使用@RequestParam(required = false)整数itemId参数,你可以查询整个审阅文档或仅查询与特定itemId相关联的所有审阅。 获取所有文档非常容易,因为Cloudant Java库提供了内置的API。
通过itemId查询稍微复杂一些。 Cloudant数据库通常使用MapReduce机制来执行查询。 为此,通常需要创建一个索引并将其保存在设计文档(特殊的Cloudant文档)中。 首次使用时仅创建一次。 创建索引后,你可以通过使用db.findByIndex()调用索引来执行查询。
返回的对象以JSON格式序列化为Review实体对象。
代码审查: src/main/resources/application.yml
java
#Spring properties
spring:
application:
name: socialreviewmicroservice
#Server configuration
server:
contextpath: /micro
port: 8080
#Cloudant Confiugration
cloudant:
db: socialreviewdb
username:
password:
url:
Show more
该文件定义应用程序配置,例如应用程序名称,Web应用程序的基本URL以及运行在哪个端口上。 我还将Cloudant配置信息放入此文件中。 你需要更新cloudant配置部分以填写你先前创建的Cloudant实例凭证。 已将db属性设置为socialreviewdb以配置Cloudant客户端以将所有数据库请求定向到该数据库名称。
注意:使用不包含application.yml文件中url条目帐户密码的Cloudant凭据url或主机属性。 对于在IBM Cloud上运行的实例,这将是主机值和协议。 例如:https://xxxx-yyyy-bluemix.cloudant.com。
代码审查:src / test / java / socialreview / cloudant / ReviewControllerTest.java
ReviewControllerTest是一个简单的集成测试用例,它验证了与Cloudant的连接是否成功并且能够获取所有文档。 你可以稍后按照说明运行测试用例。
步骤4.构建并运行应用程序
配置Cloudant后,更新Cloudant凭证的src / main / resources /
application.yml文件:
用户名
密码
网址
注意:使用不包含application.yml文件中url条目帐户密码的Cloudant凭据url或主机属性。 对于在IBM Cloud上运行的实例,这将是主机值和协议。 例如:https://xxxx-yyyy-bluemix.cloudant.com。
在存储库根目录下,运行以下命令来构建和运行该应用程序:
java
\$ cd refarchcloudnativemicrosocialreview
$ ./gradlew build
Show more
$ ./gradlew build
Show more
确保应用程序构建成功完成。 它将编译后的应用程序打包在build / libs目录下。 现在,你可以使用以下命令运行该应用程序:
java
\$ java jar build/libs/microsocialreview0.1.0.jar
Show more
是的,应用程序的最终发行版是在jar文件中,你需要运行的只是执行Jar文件。 该应用程序应在端口8080上运行。使用以下URL打开浏览器:http:// localhost:8080 / micro / review。
这将返回数据库中的所有评论。 你可以使用Chrome POSTMAN插入新的审阅文档,也可以使用以下curl命令插入审阅注释:
java
curl request POST
url 'http://localhost:8080/micro/review'
header 'accept: application/json'
header 'contenttype: application/json'
data @ <<'EOF'
{"comment": "Nice product",
"itemId": 13402,
"rating": 3,
"reviewer_email":"[email protected]",
"reviewer_name": "Gang Chen",
"review_date": "12/31/2017"}'
EOF
Show more
成功执行后,它应该返回Cloudant文档ID。 你可以通过再次点击GET URL来验证操作:http:// localhost:8080 / micro / review?itemId = 13402。
保存的评论评论应返回。 或者,你可以启动Cloudant数据库控制台并在那里查看文档。
要运行简单的集成测试,请使用以下命令:
java
\$ ./gradlew clean test
Show more
摘要
这篇文章向你展示了如何使用Spring Boot和Cloudant Java客户端轻松构建微服务应用程序以访问Cloudant数据库。