SpringCloud中Rest微服务构建(上)

1.简单介绍

我们会使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。回忆Spring,SpringMVC,MyBatis等以往学习的知识。Maven的分包分模块架构复习

一个父工程带着多个子Module子模块

SpringCloud父工程(Project)下初次带着3个子模块(Module)

springcloud-api 【封装的整体entity / 接口 / 公共配置等】

springcloud-provider-dept-8001【服务提供者】

springcloud-consumer-dept-80【服务消费者】

2.创建项目

1.SpringCloud版本选择

2.父项目的创建

pom.xml文件:

 
  1. <?xml version=”1.0″ encoding=”UTF-8″?>

  2. <project xmlns=”http://maven.apache.org/POM/4.0.0″

  3. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

  4. xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

  5. <modelVersion>4.0.0</modelVersion>

  6. <groupId>com.csh</groupId>

  7. <artifactId>springcloud</artifactId>

  8. <version>1.0-SNAPSHOT</version>

  9. <modules>

  10. <module>springcloudapi</module>

  11. <module>springcloud-provide-dept-8001</module>

  12. <module>springcloud-consumer-dept-80</module>

  13. <module>springcloud-eureka-7001</module>

  14. <module>springcloud-eureka-7002</module>

  15. <module>springcloud-eureka-7003</module>

  16. <module>springcloud-provide-dept-8002</module>

  17. <module>springcloud-provide-dept-8003</module>

  18. <module>springcloud-consumer-dept-feign-80</module>

  19. <module>springcloud-provide-dept-Hystrix-8001</module>

  20. <module>springcloud-consumer-hystrix-dashboard-9001</module>

  21. <module>springcloud-zuul-gateway-9527</module>

  22. </modules>

  23. <packaging>pom</packaging>

  24. <properties>

  25. <junit.version>4.12</junit.version>

  26. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  27. <maven.comiler.source>1.8</maven.comiler.source>

  28. <maven.comiler.target>1.8</maven.comiler.target>

  29. </properties>

  30. <dependencyManagement>

  31. <dependencies>

  32. <!– springcloud–>

  33. <dependency>

  34. <groupId>org.springframework.cloud</groupId>

  35. <artifactId>spring-cloud-dependencies</artifactId>

  36. <version>Greenwich.SR1</version>

  37. <type>pom</type>

  38. <scope>import</scope>

  39. </dependency>

  40. <!– springboot–>

  41. <dependency>

  42. <groupId>org.springframework.boot</groupId>

  43. <artifactId>spring-boot-dependencies</artifactId>

  44. <version>2.1.4.RELEASE</version>

  45. <type>pom</type>

  46. <scope>import</scope>

  47. </dependency>

  48. <!– 数据库连接–>

  49. <dependency>

  50. <groupId>mysql</groupId>

  51. <artifactId>mysql-connector-java</artifactId>

  52. <version>5.1.47</version>

  53. </dependency>

  54. <!– 德鲁依连接池–>

  55. <dependency>

  56. <groupId>com.alibaba</groupId>

  57. <artifactId>druid</artifactId>

  58. <version>1.1.10</version>

  59. </dependency>

  60. <dependency>

  61. <groupId>org.mybatis.spring.boot</groupId>

  62. <artifactId>mybatis-spring-boot-starter</artifactId>

  63. <version>1.3.2</version>

  64. </dependency>

  65. <dependency>

  66. <groupId>junit</groupId>

  67. <artifactId>junit</artifactId>

  68. <version> ${junit.version}</version>

  69. </dependency>

  70. <dependency>

  71. <groupId>org.projectlombok</groupId>

  72. <artifactId>lombok</artifactId>

  73. <version>1.16.10</version>

  74. </dependency>

  75. <dependency>

  76. <groupId>ch.qos.logback</groupId>

  77. <artifactId>logback</artifactId>

  78. <version>1.2.3</version>

  79. </dependency>

  80. </dependencies>

  81. </dependencyManagement>

  82. </project>

这里注意的是Packageing是pom模式主要是定义POM文件,将后续各个子模块公用的jar包等统一提取出来,类似一个抽象父类

3.创建api公共模块

首先是pom.xml文件:

 
  1. <?xml version=”1.0″ encoding=”UTF-8″?>

  2. <project xmlns=”http://maven.apache.org/POM/4.0.0″

  3. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

  4. xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

  5. <parent>

  6. <artifactId>springcloud</artifactId>

  7. <groupId>com.csh</groupId>

  8. <version>1.0-SNAPSHOT</version>

  9. </parent>

  10. <modelVersion>4.0.0</modelVersion>

  11. <artifactId>springcloudapi</artifactId>

  12. <properties>

  13. <maven.compiler.source>8</maven.compiler.source>

  14. <maven.compiler.target>8</maven.compiler.target>

  15. </properties>

  16. <!– springboot的相关的配置–>

  17. <dependencies>

  18. <dependency>

  19. <groupId>org.projectlombok</groupId>

  20. <artifactId>lombok</artifactId>

  21. </dependency>

  22. <dependency>

  23. <groupId>org.springframework.cloud</groupId>

  24. <artifactId>spring-cloud-starter-feign</artifactId>

  25. <version>1.4.7.RELEASE</version>

  26. </dependency>

  27. <dependency>

  28. <groupId>org.springframework.cloud</groupId>

  29. <artifactId>spring-cloud-starter-hystrix</artifactId>

  30. <version>1.4.7.RELEASE</version>

  31. </dependency>

  32. </dependencies>

  33. </project>

然后是pojo层实体类的dept的编写:

 
  1. package com.csh.springcloud.pojo;

  2. import lombok.AllArgsConstructor;

  3. import lombok.Data;

  4. import lombok.NoArgsConstructor;

  5. import lombok.ToString;

  6. import lombok.experimental.Accessors;

  7. import java.io.Serializable;

  8. @Data

  9. @NoArgsConstructor

  10. @AllArgsConstructor

  11. @ToString

  12. @Accessors(chain=true)

  13. public class Dept implements Serializable {

  14. private int deptno;

  15. private String dname;

  16. private String db_source;

  17. public Dept(String dname) {

  18. this.dname = dname;

  19. }

  20. }

相对应的数据库是:

4.创建provider模块

首先是pom.xml文件:

 
  1. <?xml version=”1.0″ encoding=”UTF-8″?>

  2. <project xmlns=”http://maven.apache.org/POM/4.0.0″

  3. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

  4. xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

  5. <parent>

  6. <artifactId>springcloud</artifactId>

  7. <groupId>com.csh</groupId>

  8. <version>1.0-SNAPSHOT</version>

  9. </parent>

  10. <modelVersion>4.0.0</modelVersion>

  11. <artifactId>springcloud-provide-dept-8001</artifactId>

  12. <dependencies>

  13. <!– 自定义的模块–>

  14. <dependency>

  15. <groupId>com.csh</groupId>

  16. <artifactId>springcloudapi</artifactId>

  17. <version>1.0-SNAPSHOT</version>

  18. </dependency>

  19. <dependency>

  20. <groupId>junit</groupId>

  21. <artifactId>junit</artifactId>

  22. </dependency>

  23. <dependency>

  24. <groupId>mysql</groupId>

  25. <artifactId>mysql-connector-java</artifactId>

  26. </dependency>

  27. <dependency>

  28. <groupId>org.mybatis.spring.boot</groupId>

  29. <artifactId>mybatis-spring-boot-starter</artifactId>

  30. </dependency>

  31. <dependency>

  32. <groupId>org.springframework.boot</groupId>

  33. <artifactId>spring-boot-starter-web</artifactId>

  34. </dependency>

  35. <dependency>

  36. <groupId>com.alibaba</groupId>

  37. <artifactId>druid</artifactId>

  38. </dependency>

  39. <dependency>

  40. <groupId>ch.qos.logback</groupId>

  41. <artifactId>logback-core</artifactId>

  42. </dependency>

  43. <dependency>

  44. <groupId>org.springframework.boot</groupId>

  45. <artifactId>spring-boot-test</artifactId>

  46. </dependency>

  47. <dependency>

  48. <groupId>org.springframework.boot</groupId>

  49. <artifactId>spring-boot-devtools</artifactId>

  50. </dependency>

  51. <dependency>

  52. <groupId>org.springframework.boot</groupId>

  53. <artifactId>spring-boot-starter-jetty</artifactId>

  54. </dependency>

  55. <dependency>

  56. <groupId>org.springframework.cloud</groupId>

  57. <artifactId>spring-cloud-starter-eureka</artifactId>

  58. <version>1.4.7.RELEASE</version>

  59. </dependency>

  60. <dependency>

  61. <groupId>org.springframework.cloud</groupId>

  62. <artifactId>spring-cloud-starter-config</artifactId>

  63. </dependency>

  64. <dependency>

  65. <groupId>org.springframework.boot</groupId>

  66. <artifactId>spring-boot-starter-actuator</artifactId>

  67. </dependency>

  68. </dependencies>

  69. <properties>

  70. <maven.compiler.source>8</maven.compiler.source>

  71. <maven.compiler.target>8</maven.compiler.target>

  72. </properties>

  73. <!–用于配置maven加载src-mai-java中的xml文件 ** 代表多层目录加载,一个 * 只能加载一层目录–>

  74. <build>

  75. <resources>

  76. <resource>

  77. <directory>src/main/java</directory>

  78. <includes>

  79. <include>**/*.xml</include>

  80. </includes>

  81. <filtering>false</filtering>

  82. </resource>

  83. </resources>

  84. </build>

  85. </project>

然后是application.yml的编写:

 
  1. server:

  2. port: 8001

  3. mybatis:

  4. type-aliases-package: com.csh.springcloud.pojo

  5. mapper-locations: classpath:mybatis/mapper/**.xml

  6. spring:

  7. application:

  8. name: springcloud-provider-dept

  9. datasource:

  10. type: com.alibaba.druid.pool.DruidDataSource # 数据源

  11. driver-class-name: org.gjt.mm.mysql.Driver # mysql驱动

  12. url: jdbc:mysql://localhost:3306/db01 #数据库名称

  13. username: root

  14. password: root

  15. dbcp2:

  16. min-idle: 5 #数据库连接池的最小维持连接数

  17. initial-size: 5 #初始化连接数

  18. max-total: 5 #最大连接数

  19. max-wait-millis: 200 #等待连接获取的最大超时时间

编写部门的dao接口:

 
  1. package com.csh.dao;

  2. import org.apache.ibatis.annotations.Mapper;

  3. import org.springframework.stereotype.Repository;

  4. import com.csh.springcloud.pojo.Dept;

  5. import java.util.List;

  6. @Mapper

  7. @Repository

  8. public interface DeptDao {

  9. public boolean adddept(Dept dept);

  10. public Dept queryByid(int id);

  11. public List<Dept> queryall();

  12. }

相对应的mapper文件:(mybatis\mapper\DeptDao.xml)

 
  1. <?xml version=”1.0″ encoding=”UTF-8″ ?>

  2. <!DOCTYPE mapper

  3. PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”

  4. “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>

  5. <mapper namespace=”com.csh.dao.DeptDao”>

  6. <insert id=”adddept” parameterType=”com.csh.springcloud.pojo.Dept”>

  7. insert into dept (deptno,dname,db_source) values (#{deptno},#{dname},#{db_source})

  8. </insert>

  9. <select id=”queryByid” parameterType=”int” resultType=”com.csh.springcloud.pojo.Dept”>

  10. select * from dept where deptno=#{deptno}

  11. </select>

  12. <select id=”queryall” resultType=”com.csh.springcloud.pojo.Dept”>

  13. select * from dept

  14. </select>

  15. </mapper>

创建Service服务层接口:

 
  1. package com.csh.springcloud.service;

  2. import com.csh.springcloud.pojo.Dept;

  3. import java.util.List;

  4. public interface DeptService {

  5. public boolean adddept(Dept dept);

  6. public Dept queryByid(int id);

  7. public List<Dept> queryall();

  8. }

ServiceImpl实现类:

 
  1. package com.csh.springcloud.service;

  2. import com.csh.dao.DeptDao;

  3. import org.springframework.beans.factory.annotation.Autowired;

  4. import org.springframework.stereotype.Service;

  5. import com.csh.springcloud.pojo.Dept;

  6. import java.util.List;

  7. @Service

  8. public class DeptServiceImpl implements DeptService{

  9. @Autowired

  10. DeptDao deptDao;

  11. @Override

  12. public boolean adddept(Dept dept) {

  13. return deptDao.adddept(dept);

  14. }

  15. @Override

  16. public Dept queryByid(int id) {

  17. return deptDao.queryByid(id);

  18. }

  19. @Override

  20. public List<Dept> queryall() {

  21. return deptDao.queryall();

  22. }

  23. }

DeptController提供REST服务:

 
  1. package com.csh.controller;

  2. import org.springframework.beans.factory.annotation.Autowired;

  3. import org.springframework.web.bind.annotation.PathVariable;

  4. import org.springframework.web.bind.annotation.RequestMapping;

  5. import org.springframework.web.bind.annotation.RestController;

  6. import com.csh.springcloud.pojo.Dept;

  7. import com.csh.springcloud.service.DeptService;

  8. import java.util.List;

  9. @RestController

  10. @RequestMapping(“/dept”)

  11. public class DeptController {

  12. @Autowired

  13. private DeptService deptService;

  14. @RequestMapping(“/add”)

  15. public boolean addone()

  16. {

  17. return deptService.adddept(new Dept(“78798789789789”));

  18. }

  19. @RequestMapping(“/find/{id}”)

  20. public Dept findbyid(@PathVariable(“id”) int id)

  21. {

  22. return deptService.queryByid(id);

  23. }

  24. @RequestMapping(“/selectall”)

  25. public List<Dept> findall()

  26. {

  27. return deptService.queryall();

  28. }

  29. }

最后一步是编写DeptProvider的主启动类:

 
  1. package com.csh;

  2. import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;

  3. import org.springframework.boot.SpringApplication;

  4. import org.springframework.boot.autoconfigure.SpringBootApplication;

  5. import org.springframework.boot.web.servlet.ServletRegistrationBean;

  6. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

  7. import org.springframework.context.annotation.Bean;

  8. import javax.servlet.ServletRegistration;

  9. @SpringBootApplication

  10. public class DeptProvider8001 {

  11. public static void main(String[] args) {

  12. SpringApplication.run(DeptProvider8001.class,args);

  13. }}

5.测试provider

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jakeonil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值