3.开始使用Spring Cloud实战微服务

摘要:
开始使用SpringCloud实战微服务3.1。SpringCloud实战先决条件3.1.1。所需的技术储备语言:Java、scala、Groovy等可用。推荐使用Java构建工具:Java开发人员主要使用Maven,Androd开发人员使用Gradle。服务提供者:指服务的被调用者。服务使用者:指服务的调用方。3.3.编写服务提供商。3.3.1.手动编写项目。3.3.2.使用SpringInitializer快速创建SpringBoot项目。首先,我们需要访问http://start.spring.io,如下图所示。接下来,选择SpringBoot的版本。SpringBoot的最新版本是1.5.1,如下图所示。
                 开始使用Spring Cloud实战微服务

 3.1. Spring Cloud实战前提

              3.1.1. 需要的技术储备

                  语言方面:可以使用Java、scala、Groovy...等等,推荐使用Java

                  构建工具方面:Java开发者主要使用的是Maven,Androd开发者使用的是Gradle。(将Maven项目转换成Gradle项目所使用的命令是:gradle init --type pom)

                  依赖技术:Spring Boot

              3.1.2. 使用的工具及软件版本

                   原则:使用最新的版本进行开发

                   JDK: 1.8版本

                   Maven:3.3.9版本

                   IDE:Spring Tool Suite 3.8.2版本,IDEA

                   Spring Boot :1.5.1版本

                   Spring Cloud:Camden SR5版本

3.2. 服务提供者与服务消费者

             3.2.1 什么是服务提供者和服务消费者?

                服务提供者:是指服务的被调用方(即:为其它服务提供服务的服务)

                服务消费者:是指服务的调用方(即:依赖其它服务的服务)

3.3. 编写服务提供者

               3.3.1. 手动编写项目

               3.3.2. 使用Spring Initializr快速创建Spring Boot项目

               首先,我们需要访问http://start.spring.io,如下图所示

3.开始使用Spring Cloud实战微服务第1张

接着,选择Spring Boot的版本,目前最新的Spring Boot版本是1.5.1,如下图所示。

 3.开始使用Spring Cloud实战微服务第2张

接着我们需要选择一些依赖,在搜索框中输入“Web”,会自动显示出有关Web的下拉列表,我们选择第一个,如下图所示。

 3.开始使用Spring Cloud实战微服务第3张

选择完Web之后,会在下方看到我们所依赖的Web,如下图所示

 3.开始使用Spring Cloud实战微服务第4张

接着,再选择JPA、Mysql,最后点击下方的“Generate Project”按钮,如下图所示。

3.开始使用Spring Cloud实战微服务第5张

点击上图的"Generrate Project"之后弹出如下图所示的对话框,我们点击另存为保存到本地。

3.开始使用Spring Cloud实战微服务第6张

接着,我们打开开发工具IntellijIDEA工具,如果是第一次使用IDEA工具,会出现如下图所示的界面,我们点击“Import Project”。

3.开始使用Spring Cloud实战微服务第7张

会弹出如下图所示的界面,我们选择我们刚才生成的microservice-simple-provider-user工程下的pom.xml文件,然后点击"OK"

3.开始使用Spring Cloud实战微服务第8张

点击上图的“OK”之后,我们便可以看到如下图所示的界面,我们什么也不做,直接点击"Next"(一直下一步)

 3.开始使用Spring Cloud实战微服务第9张

上图中resources目录下的static和templates两个文件夹没有什么用,我们删掉它,然后我们在resources目录下新建一个schema.sql文件,新建的schema.sql文件需要配置一下“Configure data source”、"Change dialect to..."这两项,我们先点击"Configure data source"。

3.开始使用Spring Cloud实战微服务第10张

  点击上图的"Configure data source"之后,我们可以看到如下图所示的界面,我们选择左侧的"MySQL",右侧的"Driver files"下面没有内容,我们点击"Download"下载驱动文件。3.开始使用Spring Cloud实战微服务第11张

3.开始使用Spring Cloud实战微服务第12张

 下载完驱动文件后,如下图所示,我们点击"OK"

3.开始使用Spring Cloud实战微服务第13张

  这时如果您的IDEA工具还从来没添加过Mysql,那么schema.sql文件依然提示要配置data source和方言,那么我们怎么添加Mysql呢?我们发现啊,在IDEA工具的右侧,有一列工具栏,我们点击Database那一栏。

3.开始使用Spring Cloud实战微服务第14张

 点击上图的"Database"那一栏后我们可以看到如下图所示的界面,可以看到,我还未添加过任何数据库,下面我们点击那个"+"号图标。

3.开始使用Spring Cloud实战微服务第15张

 点击上图的"+"号图标之后,我们看到如下图所示界面,我们点击MySQL

3.开始使用Spring Cloud实战微服务第16张

   点击上图的"MySQL"之后,我们可以看到如下图所示的界面,我们新建一个数据库Database:"microservice",User和Password是我们本地安装的Mysql的用户名和密码。之后我们需要测试连接是否可以成功(先不要点击Test Connection)。

3.开始使用Spring Cloud实战微服务第17张

  点击上图的"Apply"和"OK"之后,可以看到如下图所示的界面,我们可以试一条SQL语句看是否可以查询到结果,比如我们查询所有的数据库,可以看到正确查询出了结果。

 3.开始使用Spring Cloud实战微服务第18张

我们添加完Mysql数据库后,我们刚才添加的schema.sql文件提示的内容便减少了一条,只剩下让我们配置方言了,如下图所示。我们点击"Change dialect to..."

3.开始使用Spring Cloud实战微服务第19张

我们可以看到如下图所示的界面,可以看到默认情况下SQL Dialect都是Generic,我们既然用的数据库是Mysql,那么我们便点击"Generic",在下拉框中选择"MySQL"。

3.开始使用Spring Cloud实战微服务第20张

选择完方言之后,如下图所示。我们点击"OK"

3.开始使用Spring Cloud实战微服务第21张

点击上图的"OK"之后,我们可以看到我们的schema.sql文件终于不再报异常提示信息了,我们在该sql文件中写上建表语句,如下图所示。

 3.开始使用Spring Cloud实战微服务第22张

   同理,我们再新建一个data.sql文件,并在该文件中写上插入语句,如下图所示。

3.开始使用Spring Cloud实战微服务第23张

            3.3.3. 编写服务提供者

           实体类User

package com.itmuch.cloud.microservicesimpleprovideruser.entity;

import javax.persistence.*;

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  Long id;
    @Column
    private  String username;
    @Column
    private  String name;
    @Column
    private  int age;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getBalance() {
        return balance;
    }

    public void setBalance(float balance) {
        this.balance = balance;
    }

    @Column
    private  float balance;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

         UserRepository

package com.itmuch.cloud.microservicesimpleprovideruser.repository;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;



@Repository
public interface UserRepository extends JpaRepository<User ,Long> {
}

       UserController

package com.itmuch.cloud.microservicesimpleprovideruser.Controller;

import com.itmuch.cloud.microservicesimpleprovideruser.entity.User;
import com.itmuch.cloud.microservicesimpleprovideruser.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {

    @Autowired
    private UserRepository userRepository;
    @GetMapping("/simple/{id}")
    public User findById(@PathVariable Long id){
       return userRepository.findOne(id);
    }
}

注意版本要选择2.0.0下的

 

3.4. 编写服务消费者

           3.3.1. 手动编写项目

           3.3.2. 使用Spring Initializr快速创建Spring Boot项目(同理和服务提供者)

 第二步我们搭建了一个服务提供者,现在我们来搭建一个服务消费者,我们依然从http://start.spring.io网站生成我们的微服务框架,我们可以注意到,在Dependencies这一栏只选择了一个Web,选好并输入完后,点击"Generate Project"按钮。

3.开始使用Spring Cloud实战微服务第24张

点击上图的"Generate Project"按钮后会弹出下载对话框,如下图所示,另存为保存到本地磁盘。

3.开始使用Spring Cloud实战微服务第25张

 下面我们把该消费者导入到Intellij IDEA工具中,我们点击File---->New------>Module from Existing Sources...,如下图所示

3.开始使用Spring Cloud实战微服务第26张

在弹出的对话框中我们选择我们刚才加压好的movie微服务的pom.xml文件,然后点击"OK",如下图所示。

3.开始使用Spring Cloud实战微服务第27张

下面两步只需点击"Next",然后点击"Finish"按钮即可把工程加到Intellij IDEA工具中来,如下图所示

3.开始使用Spring Cloud实战微服务第28张

           3.4.3. 编写服务提供者

   

movieController

package com.itmuch.cloud.microservicesimpleprovidermovie.Controller;

import com.itmuch.cloud.microservicesimpleprovidermovie.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class movieController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/movie/{id}")
    public User  findById(@PathVariable Long id)
    {
       return   this.restTemplate.getForObject("http://localhost:7900/simple/" + id, User.class);
    }

}

实体类

package com.itmuch.cloud.microservicesimpleprovidermovie.entity;

public class User {
    private  Long id;

    private  String username;

    private  String name;

    private  int age;

    private  float balance;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public float getBalance() {
        return balance;
    }

    public void setBalance(float balance) {
        this.balance = balance;
    }
}

配置文件application.yml

     

server:
   port: 7901

启动类

package com.itmuch.cloud.microservicesimpleprovidermovie;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class MicroserviceSimpleProviderMovieApplication {
    @Bean
    public RestTemplate restTemplate()
    {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(MicroserviceSimpleProviderMovieApplication.class, args);
    }
}

3.5. 为项目整合Spring Boot Actuator

    1. 了解Acuator

      Spring Boot Acuator 提供了很多控制端点。从而了解应用程序的状况。

    2. Acuator监控端点及描述

    3. 3.开始使用Spring Cloud实战微服务第29张

    4. 为项目添加依赖

      <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-actuator</artifactId>
       </dependency>

       测试:访问 http://127.0.0.1:8080/health
       结果:{"status":"UP"} ,返回的是UP表示正常

      访问http://127.0.0.1:8080/info    结果:{} 证明info没有公开   结果:{}证明info没有公开

    5. 配置application.yml

      info:  
        app:  
          name: "@project.name@"   
          description: "@project.description@"  
          version: "@project.version@"  
          spring-boot-version: "@project.parent.version@" 
      再次访问 http://localhost:8080/info
      结果:
      	
      {"app":{"name":"microservice-simple-provider-user","description":"zjmdemo","version":"0.0.1-SNAPSHOT","spring-boot-version":"1.5.9.RELEASE"}}
      访问:http://127.0.0.1:8080/autoconfig
    6. 参考文档:

      https://docs.spring.io/spring-boot/docs/1.5.9.BUILD-SNAPSHOT/reference/htmlsingle

3.6. 硬编码有哪些问题

项目GIT库:https://gitee.com/cyj930307/springcloud_textbook.git

免责声明:文章转载自《3.开始使用Spring Cloud实战微服务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇dart 自己写一个简单的文件编码器springboot java mail sender邮件发送配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java 之 Scanner 类

一、Scanner 类 Scanner 是一个可以解析基本类型和字符串的简单文本扫描器。 Demo: 1 Scanner sc = newScanner(System.in); 2 int i = sc.nextInt(); System.in 系统输入指的通过键盘录入数据。 二、引用类型使用步骤   1、导包 使用 import 关键字导包,在类的所有代...

变量的类型转变

C#中类型转换(显隐)的机制分为两种:一、隐式转换(implicit conversions)二、显式转换(explict conversions)隐式转换不需要指明欲转变的类型; C#中数据类型转换的几种形式进行了详细的分析: 1、Convert.ToInt32(); //转换成32位的整数。2、变量.ToString();/最常见的转换成 字符串。3、...

C#使用BouncyCastle来实现私钥加密公钥解密的方法与java互通的RSA加解密和签名(转)

因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密。在网上查了很久也没有很好的实现。BouncyCastle的文档少之又少。很多人可能会说,C#也是可以的,通过Biginteger开源类来实现,不过那个是有一个文章,不过他加密出来的是16进制结果的。根本不能和JAVA互通。连加密出来的都不和C#原生的加密出来的结果格式一样。所以还是没有...

转:CXF学习笔记一:如何创建、发布和访问基于CXF的服务

主要参考http://cxf.apache.org的相关内容: 1.使用CXF创建服务的基本方法(使用CXF自带的jetty容器)    参考:http://cxf.apache.org/docs/a-simple-jax-ws-service.html 分4步: ① 设置build环境 ② 写服务 ③ 发布服务 ④ 访问服务 1)设置build环境 创建...

spring/spring boot/spring mvc中用到的注解

在spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解。 Spring最开始是为了解决EJB等大型企业框架对应用程序的侵入性,因此大量依靠配置文件来“非侵入式”得给POJO增加功能,然而,从Spring 3.x开始,Spring被外界最为诟病的一点就是配置繁多,号称“配置地狱”,各种xml文件,出了问题非常难排查。从Sprin...

Go 字符串拼接6种,最快的方式 strings.builder

我们首先来了解一下Go语言中string类型的结构定义,先来看一下官方定义: // string is the set of all strings of 8-bit bytes, conventionally but not// necessarily representing UTF-8-encoded text. A string may be em...