飞码网-免费源码博客分享网站

点击这里给我发消息

使用Spring Boot和Cloudant开始学习微服务 |-Java教程

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站

学习目标

创建一个简单的微服务来管理Cloudant NoSQL数据库中的产品评论。

预计的时间

阅读和遵循本教程中的步骤大约需要30分钟到一个小时。

先决条件

要完成本教程,您需要以下内容:

  • JDK 1.8
  • Gradle 2.3+
  • Git client

安装完这些工具后,请将示例应用程序从GitHub克隆到您的本地环境:

 


java
git clone https://github.com/gangchen03/refarch‑cloudnative‑micro‑socialreview.git

 

脚步

步骤1.在IBM Cloud中预配Cloudant NoSQL DB

要配置Cloudant服务,您需要一个IBM Cloud帐户。登录到您的IBM Cloud帐户或注册一个新的免费帐户。

要创建Cloudant服务,请转到IBM Cloud目录中的Cloudant NoSQL DB服务(请记住登录到您的IBM Cloud帐户)。命名您的Cloudant的服务(例如,refarch-cloudantdb),选择重命名服务行动下拉菜单中的服务列表。

要进行测试,您可以选择精简版计划,然后点击创建创建完成后,打开凭据选项卡并记下您的Cloudant Service凭据。例如:

 


{
 'username': 'xxxx‑yyyy‑bluemix',
 'password': 'zzzzz',
 'host': 'xxxx‑yyyy‑bluemix.cloudant.com',
 'port': 443,
 'url': 'https://xxxx‑yyyy‑bluemix:zzzzz@xxxx‑yyyy‑bluemix.cloudant.com'
}

 

单击启动按钮以打开Cloudant管理控制台。现在是空的。

步骤2.使用Gradle构建示例应用程序

现在,您可以处理该应用程序了。可以使用Gradle或Maven构建Spring Boot应用程序。对于此操作方法,说明适用于Gradle。

导航到GitHub存储库根文件夹refarch-cloudnative-micro-socialreview您应该build.gradle在该文件夹中找到该文件。它定义了库依赖关系和基本的构建配置,例如构建的输出。该应用程序使用以下依赖项:

 


java
compile("org.springframework.boot:spring‑boot‑starter‑web:1.4.0.RELEASE") {
    exclude module: "spring‑boot‑starter‑tomcat"
}
compile("org.springframework.boot:spring‑boot‑starter‑jetty:1.4.0.RELEASE")
compile("org.springframework.boot:spring‑boot‑starter‑actuator:1.4.0.RELEASE")
compile group: 'com.cloudant', name: 'cloudant‑spring‑boot‑starter', version: '0.0.2'
compile("junit:junit")
compile group: 'org.springframework.boot', name: 'spring‑boot‑starter‑test', version: '1.4.0.RELEASE'

 

注意依赖项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");
    }
}

 

@SpringBootApplication是一个方便的注释,负载有用弹簧组件,如@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 = "gc@ibm.com";
        this.reviewer_name = "Gang Chen";
        this.review_date = "08/18/2016";
    }

 

代码审查:src / main / java / socialreview / cloudant / ReviewRestController.java

这是公开REST API并与Cloudant数据库进行交互以执行保存和查询操作的主类。

 


java
@RestController
@RequestMapping("/review")
public class ReviewRestController {

    @Autowired
    private Database db;

 

@RestController告诉Spring MVC的同根Web上下文根作为复习处理Web请求。

将Cloudant Spring Boot Starter作为依赖项添加时,它会自动挂接到Spring应用程序配置中。通过使用应用程序属性源中提供的属性,启动程序可以配置Cloudant数据库Bean,该Bean可以通过指定@Autowired注释通过依赖项注入来注入

 


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();
}

 

此代码将审阅注释文档保存/持久保存到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;
}

 

使用该@RequestParam(required=false) Integer itemId参数,您可以查询整个审阅文档或仅查询与特定itemId相关联的所有审阅。获取所有文档非常容易,因为Cloudant Java库中有一个内置的API可以做到这一点。

按itemId进行查询稍微复杂一些。Cloudant数据库通常使用MapReduce机制来执行查询。为此,通常需要创建一个索引并将其保存在设计文档(特殊的Cloudant文档)中。首次使用时仅创建一次。创建索引后,您可以使用调用索引来执行查询db.findByIndex()

返回的对象被序列化为JSON格式的Review实体对象。

代码审查:src / main / resources / application.yml

 


java
#Spring properties
spring:
  application:
     name: socialreview‑microservice

#Server configuration
server:
  context‑path: /micro
  port: 8080

#Cloudant Confiugration
cloudant:
  db: socialreviewdb
  username:
  password:
  url:

 

该文件定义了应用程序配置,例如应用程序名称,Web应用程序的基本URL以及运行在哪个端口上。我还将Cloudant配置信息放入此文件中。您需要更新cloudant配置部分以填写您先前创建的Cloudant实例凭证。db属性已设置为socialreviewdb配置Cloudant客户端,以将所有数据库请求定向到该数据库名称。

注意:使用您的Cloudant凭证urlhost属性,其中不包括application.yml文件中url条目的帐户密码。对于在IBM Cloud上运行的实例,这将是host值和协议。例如:https://xxxx-yyyy-bluemix.cloudant.com

代码审查:src / test / java / socialreview / cloudant / ReviewControllerTest.java

ReviewControllerTest是一个简单的集成测试用例,用于验证与Cloudant的连接是否成功并且能够获取所有文档。您可以稍后按照说明运行测试用例。

步骤4.构建并运行应用程序

一旦配置了Cloudant,请更新该src/main/resources/application.yml文件以获取Cloudant凭证:

  • username
  • password
  • url

注意:使用您的Cloudant凭证urlhost属性,其中不包括application.yml文件中url条目的帐户密码。对于在IBM Cloud上运行的实例,这将是host值和协议。例如:https://xxxx-yyyy-bluemix.cloudant.com

在存储库根目录下,运行以下命令来构建和运行该应用程序:

 


java
\$ cd refarch‑cloudnative‑micro‑socialreview
$ ./gradlew build

 

 


$ ./gradlew build

 

确保应用程序构建成功完成。它将编译后的应用程序打包在build / libs目录下。现在,您可以使用以下命令运行该应用程序:

 


java
\$ java ‑jar build/libs/micro‑socialreview‑0.1.0.jar

 

是的,应用程序的最终发行版是在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 'content‑type: application/json' 
  ‑‑data @‑ <<'EOF'
  {"comment": "Nice product",
    "itemId": 13402,
    "rating": 3,
    "reviewer_email":"gangchen@us.ibm.com",
    "reviewer_name": "Gang Chen",
    "review_date": "12/31/2017"}'
EOF

 

成功执行后,它应该返回Cloudant文档ID。您可以通过再次点击GET URL来验证操作:http:// localhost:8080 / micro / review?itemId = 13402。

保存的评论评论应返回。或者,您可以启动Cloudant数据库控制台并在那里查看文档。

要运行简单的集成测试,请使用以下命令:

 


java
\$ ./gradlew clean test

 

概括

这篇文章向您展示了如何使用Spring Boot和Cloudant Java客户端轻松构建微服务应用程序以访问Cloudant数据库。

飞码网-免费源码博客分享网站 爱上飞码网—https://www.codefrees.com— 飞码网-matlab-python-C++ 爱上飞码网—https://www.codefrees.com— 飞码网-免费源码博客分享网站
赞 ()
内容页底部广告位3
留言与评论(共有 0 条评论)
   
验证码: