• SpringCloud01:SpringCloud介绍、服务提供者、服务消费者


    SpringCloud和SpringBoot的关系

    SpringBoot专注于快速、方便地开发单个个体微服务,SpringCloud关注全局的治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:管理配置、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务

    SpringCloud

    SpringCloud和Dubbo的最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式

    自学网站

    Spring Cloud Netfix:Spring Cloud Netflix【spring cloud中文版】--spring cloud中文文档

    中文API文档:Spring Cloud Dalston 中文文档 参考手册 中文版

    SpringCloud中国社区:Spring Cloud中国社区

    SpringCloud中文网:Spring Cloud中文网-官方文档中文版

    SpringCloud版本选择

    版本说明

     实际开发版本关系

    创建父工程

    创建一个maven工程,去掉src目录

    配置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>org.example</groupId>
    7. <artifactId>SpringCloud</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <!--打包方式 pom-->
    10. <packaging>pom</packaging>
    11. <properties>
    12. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    13. <maven.compiler.source>1.8</maven.compiler.source>
    14. <maven.compiler.target>1.8</maven.compiler.target>
    15. <junit.version>4.12</junit.version>
    16. <log4j.version>1.2.17</log4j.version>
    17. <lombok.version>1.16.18</lombok.version>
    18. </properties>
    19. <dependencyManagement>
    20. <dependencies>
    21. <!--springCloud的依赖-->
    22. <dependency>
    23. <groupId>org.springframework.cloud</groupId>
    24. <artifactId>spring-cloud-dependencies</artifactId>
    25. <version>Greenwich.SR1</version>
    26. <type>pom</type>
    27. <scope>import</scope>
    28. </dependency>
    29. <!--SpringBoot-->
    30. <dependency>
    31. <groupId>org.springframework.boot</groupId>
    32. <artifactId>spring-boot-dependencies</artifactId>
    33. <version>2.1.4.RELEASE</version>
    34. <type>pom</type>
    35. <scope>import</scope>
    36. </dependency>
    37. <!--数据库-->
    38. <dependency>
    39. <groupId>mysql</groupId>
    40. <artifactId>mysql-connector-java</artifactId>
    41. <version>5.1.47</version>
    42. </dependency>
    43. <dependency>
    44. <groupId>com.alibaba</groupId>
    45. <artifactId>druid</artifactId>
    46. <version>1.1.10</version>
    47. </dependency>
    48. <!--SpringBoot 启动器-->
    49. <dependency>
    50. <groupId>org.mybatis.spring.boot</groupId>
    51. <artifactId>mybatis-spring-boot-starter</artifactId>
    52. <version>1.3.2</version>
    53. </dependency>
    54. <!--日志测试~-->
    55. <dependency>
    56. <groupId>ch.qos.logback</groupId>
    57. <artifactId>logback-core</artifactId>
    58. <version>1.2.3</version>
    59. </dependency>
    60. <dependency>
    61. <groupId>junit</groupId>
    62. <artifactId>junit</artifactId>
    63. <version>${junit.version}</version>
    64. </dependency>
    65. <dependency>
    66. <groupId>log4j</groupId>
    67. <artifactId>log4j</artifactId>
    68. <version>${log4j.version}</version>
    69. </dependency>
    70. <dependency>
    71. <groupId>org.projectlombok</groupId>
    72. <artifactId>lombok</artifactId>
    73. <version>${lombok.version}</version>
    74. </dependency>
    75. </dependencies>
    76. </dependencyManagement>
    77. </project>

    服务提供者

    一、创建子module1(springcloud-api)

    1、创建数据库

    1. create database db01
    2. use db01
    3. create table dept(
    4. deptno int primary key not null auto_increment,
    5. dname varchar(20),
    6. db_source varchar(20)
    7. )
    8. insert into dept(dname,db_source) values('开发部',DATABASE());
    9. insert into dept(dname,db_source) values('销售部',DATABASE());
    10. insert into dept(dname,db_source) values('运维部',DATABASE());
    11. insert into dept(dname,db_source) values('测试部',DATABASE());
    12. insert into dept(dname,db_source) values('财务部',DATABASE());

    2、创建实体类

    1. @Data
    2. @NoArgsConstructor
    3. @Accessors(chain = true) //链式写法
    4. public class Dept implements Serializable {
    5. private Integer deptno;
    6. private String dname;
    7. //表示这个数据是存在哪个数据库的字段
    8. //微服务:一个服务对应一个数据库,同一个信息可能存在不同的数据库
    9. private String dbSource;
    10. public Dept(String dname) {
    11. this.dname = dname;
    12. }
    13. }

    二、创建子模块2(springcloud-provider-dept-8081)

    1、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>org.example</groupId>
    8. <version>1.0-SNAPSHOT</version>
    9. </parent>
    10. <modelVersion>4.0.0</modelVersion>
    11. <artifactId>springcloud-provider-dept-8001</artifactId>
    12. <dependencies>
    13. <!--我们需要拿到实体类,所以要配置api module-->
    14. <dependency>
    15. <groupId>org.example</groupId>
    16. <artifactId>springcloud-api</artifactId>
    17. <version>1.0-SNAPSHOT</version>
    18. </dependency>
    19. <!--导入父工程的依赖-->
    20. <dependency>
    21. <groupId>junit</groupId>
    22. <artifactId>junit</artifactId>
    23. <scope>test</scope>
    24. </dependency>
    25. <dependency>
    26. <groupId>mysql</groupId>
    27. <artifactId>mysql-connector-java</artifactId>
    28. </dependency>
    29. <dependency>
    30. <groupId>com.alibaba</groupId>
    31. <artifactId>druid</artifactId>
    32. </dependency>
    33. <dependency>
    34. <groupId>ch.qos.logback</groupId>
    35. <artifactId>logback-core</artifactId>
    36. </dependency>
    37. <dependency>
    38. <groupId>org.mybatis.spring.boot</groupId>
    39. <artifactId>mybatis-spring-boot-starter</artifactId>
    40. </dependency>
    41. <!--test-->
    42. <dependency>
    43. <groupId>org.springframework.boot</groupId>
    44. <artifactId>spring-boot-test</artifactId>
    45. </dependency>
    46. <dependency>
    47. <groupId>org.springframework.boot</groupId>
    48. <artifactId>spring-boot-starter-web</artifactId>
    49. </dependency>
    50. <!--jetty-->
    51. <dependency>
    52. <groupId>org.springframework.boot</groupId>
    53. <artifactId>spring-boot-starter-jetty</artifactId>
    54. </dependency>
    55. <!--热部署工具-->
    56. <dependency>
    57. <groupId>org.springframework.boot</groupId>
    58. <artifactId>spring-boot-devtools</artifactId>
    59. </dependency>
    60. <dependency>
    61. <groupId>org.example</groupId>
    62. <artifactId>springcloud-api</artifactId>
    63. <version>1.0-SNAPSHOT</version>
    64. <scope>compile</scope>
    65. </dependency>
    66. </dependencies>
    67. </project>

    2、Dao

    ①DeptDao

    1. @Mapper
    2. @Repository
    3. public interface DeptDao {
    4. public Integer addDept(Dept dept);
    5. public Dept queryById(Integer deptno);
    6. public List queryAll();
    7. }

    ②DeptMapper.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.springcloud.dao.DeptDao">
    6. <resultMap id="DeptMap" type="Dept">
    7. <id property="deptno" column="deptno"></id>
    8. <result property="dname" column="dname"></result>
    9. <result property="dbSource" column="db_source"></result>
    10. </resultMap>
    11. <insert id="addDept" parameterType="Dept">
    12. insert into dept(dname, db_source) values(#{dname}, DATABASE())
    13. </insert>
    14. <select id="queryById" parameterType="Integer" resultMap="DeptMap">
    15. select * from dept where deptno = #{deptno}
    16. </select>
    17. <select id="queryAll" resultMap="DeptMap">
    18. select * from dept
    19. </select>
    20. </mapper>

    3、application.xml

    1. server:
    2. port: 8001
    3. #mybatis配置
    4. mybatis:
    5. type-aliases-package: com.springcloud.pojo
    6. mapper-locations: classpath:mybatis/mapper/*.xml
    7. #spring配置
    8. spring:
    9. application:
    10. name: springcloud-provider-dept
    11. datasource:
    12. type: com.alibaba.druid.pool.DruidDataSource
    13. drive-class-name: org.gjt.mm.mysql.Driver
    14. url: jdbc:mysql://localhost:3306/db01?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    15. username: root
    16. password: 123456

    4、service

    ①DeptService

    1. public interface DeptService {
    2. public Integer addDept(Dept dept);
    3. public Dept queryById(Integer deptno);
    4. public List queryAll();
    5. }

    ②DeptServiceImpl

    1. @Service
    2. public class DeptServiceImpl implements DeptService {
    3. @Autowired
    4. private DeptDao deptDao;
    5. @Override
    6. public Integer addDept(Dept dept) {
    7. return deptDao.addDept(dept);
    8. }
    9. @Override
    10. public Dept queryById(Integer deptno) {
    11. return deptDao.queryById(deptno);
    12. }
    13. @Override
    14. public List<Dept> queryAll() {
    15. return deptDao.queryAll();
    16. }
    17. }

    5、controller

    1. @RestController
    2. public class DeptController {
    3. @Autowired
    4. private DeptService deptService;
    5. @PostMapping("/dept/add")
    6. public Integer addDept(Dept dept){
    7. return deptService.addDept(dept);
    8. }
    9. @GetMapping("/dept/get/{deptno}")
    10. public Dept queryById(@PathVariable("deptno") Integer deptno){
    11. return deptService.queryById(deptno);
    12. }
    13. @GetMapping("/dept/list")
    14. public List queryAll(){
    15. return deptService.queryAll();
    16. }
    17. }

    6、主启动类

    1. //启动类
    2. @SpringBootApplication
    3. public class DeptProvider_8001 {
    4. public static void main(String[] args){
    5. SpringApplication.run(DeptProvider_8001.class,args);
    6. }
    7. }

    服务消费者

    三、创建子模块3(springcloud-consumer-dept-80)

    1、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>org.example</groupId>
    8. <version>1.0-SNAPSHOT</version>
    9. </parent>
    10. <modelVersion>4.0.0</modelVersion>
    11. <artifactId>springcloud-consumer-dept-80</artifactId>
    12. <!--实体类+web-->
    13. <dependencies>
    14. <dependency>
    15. <groupId>org.example</groupId>
    16. <artifactId>springcloud-api</artifactId>
    17. <version>1.0-SNAPSHOT</version>
    18. </dependency>
    19. <dependency>
    20. <groupId>org.springframework.boot</groupId>
    21. <artifactId>spring-boot-starter-web</artifactId>
    22. </dependency>
    23. <dependency>
    24. <groupId>org.springframework.boot</groupId>
    25. <artifactId>spring-boot-devtools</artifactId>
    26. </dependency>
    27. </dependencies>
    28. </project>

    2、 application.xml

    1. server:
    2. port: 8080

    3、ConfigBean(用来注册RestTemplate的Bean)

    1. @Configuration
    2. public class ConfigBean {
    3. @Bean
    4. public RestTemplate getRestTemplate(){
    5. return new RestTemplate();
    6. }
    7. }

    4、controller

    1. @RestController
    2. public class DeptConsumerController {
    3. //理解:消费者,不应该有service
    4. @Autowired
    5. private RestTemplate restTemplate; //提供多种便捷访问远程http服务的方法,简单的Restful服务模板
    6. private static final String REST_URL_PREFIX = "http://localhost:8001";
    7. @RequestMapping("/consumer/dept/add")
    8. public Integer addDept(Dept dept){
    9. return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept,Integer.class);
    10. }
    11. @RequestMapping("/consumer/dept/get/{deptno}")
    12. public Dept queryById(@PathVariable("deptno") Integer deptno){
    13. return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + deptno, Dept.class);
    14. }
    15. @RequestMapping("/consumer/dept/list")
    16. public List list(){
    17. return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
    18. }
    19. }

  • 相关阅读:
    记一次搭建conda虚拟环境
    【SpringBoot】配置文件.properties和.yml
    C#的AOP(最经典实现)
    在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector
    利用Unity和OpenXR实现眼动追踪的基础指南
    高可用性与安全性:搭建直播带货小程序架构的考虑因素
    贪心算法---两道题
    【block的基本使用 Objective-C语言】
    leetcode - 1877. Minimize Maximum Pair Sum in Array
    全国职业技能大赛云计算--高职组赛题卷①(容器云)
  • 原文地址:https://blog.csdn.net/qq_55137734/article/details/131031460