使用Spring Boot和Cloudant入门微服务

73 篇文章 0 订阅
36 篇文章 0 订阅
本文详述了如何通过优锐课的java架构分享,利用Spring Boot创建管理Cloudant NoSQL数据库中产品评论的微服务。首先介绍了所需工具和环境,接着讲解了在IBM Cloud中配置Cloudant服务的步骤,然后详细阐述了Gradle构建示例应用的过程,包括代码解析和主要类的功能。最后,指导读者如何构建并运行应用程序,以及进行简单的测试验证。
摘要由CSDN通过智能技术生成

通过优锐课的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:zzzzz@xxxxyyyybluemix.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 = "gc@ibm.com";
        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":"gangchen@us.ibm.com",
    "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数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值