欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Spring Boot和Cloudant入门微服务

程序员文章站 2024-03-13 17:09:03
...

通过优锐课的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数据库。