SpringCloud入门实验环境搭建

作者:遇见_line 时间:2022-11-17 10:21:14 

目录
  • 微服务

  • 微服务架构

  • SpringCould简介

  • 环境搭建

    • 1. 创建数据库

    • 2. 新建一个子模块api

    • 3. 新建一个子模块provider作为服务的提供者

  • 新建子模块consumer作为消费者

    • debug

      • 子项目无法使用父项目的依赖包

      • required a bean of type 'DeptDao' that could not be found.

    • Connection refused connect

      • RestTemplate传递对象无法接收(null)

        微服务

        个人理解:

        所谓微服务是指每个模块都可以独立完成自己的核心业务,某一个模块的崩溃不影响其他模块的运行,
        每个微服务有自己单独的一个数据库
        每一个微小的服务组成了一个复杂的软件系统

        微服务架构

        微服务指的是服务的大小,关注的是完成一个具体的服务(医院的科室)

        微服务架构是一种架构模式 ,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相
        配合,为用户提供最终价值。一种将一个单一应用程序开发为一组小型服务的方法,每个服务都在其运行
        的进程中。(整个医院)

        优点:

        • 针对特定服务发布,影响小,风险小,成本低

        • 频繁发布版本,快速交付需求

        • 低成本扩容,弹性伸缩,适应云环境

        SpringCould简介

        Springboot关注于更快的开发单体的微服务,而SpringCloud关注于全局服务的治理

        Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。

        Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装、屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

        环境搭建

        在idea中新建一个maven父工程在其pom配置对应依赖,以管理子类依赖的版本


        <properties>

        <lombock.version>1.18.18</lombock.version>
               <log4j.version>1.2.17</log4j.version>
           </properties>
           <dependencyManagement>

        <dependencies>
                   <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
                   <dependency>
                       <groupId>org.springframework.cloud</groupId>
                       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                       <version>3.0.2</version>
                   </dependency>

        <!--spring cloud 依赖包-->
                   <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
                   <dependency>
                       <groupId>org.springframework.cloud</groupId>
                       <artifactId>spring-cloud-dependencies</artifactId>
                       <version>Hoxton.SR9</version>
                       <type>pom</type>
                       <scope>import</scope>
                   </dependency>
                   <!--spring boot 依赖包-->
                   <dependency>
                       <groupId>org.springframework.boot</groupId>
                       <artifactId>spring-boot-dependencies</artifactId>
                       <version>2.3.5.RELEASE</version>
                       <type>pom</type>
                       <scope>import</scope>
                   </dependency>
                   <!--数据库驱动-->
                   <dependency>
                       <groupId>mysql</groupId>
                       <artifactId>mysql-connector-java</artifactId>
                       <version>8.0.22</version>
                   </dependency>
                   <dependency>
                       <groupId>com.alibaba</groupId>
                       <artifactId>druid</artifactId>
                       <version>1.1.21</version>
                   </dependency>
                   <!--springboot 启动器-->
        <!--            <dependency>-->
        <!--                <groupId>org.springframework.boot</groupId>-->
        <!--                <artifactId>spring-boot-starter</artifactId>-->
        <!--                <version>2.4.4</version>-->
        <!--            </dependency>-->
                   <!--JUnit-->
                   <dependency>
                       <groupId>junit</groupId>
                       <artifactId>junit</artifactId>
                       <version>4.13</version>
                       <scope>test</scope>
                   </dependency>
                   <!--lombock-->
                   <dependency>
                       <groupId>org.projectlombok</groupId>
                       <artifactId>lombok</artifactId>
                       <version>${lombock.version}</version>
                       <scope>import</scope>
                   </dependency>
                   <!--log4j-->
                   <dependency>
                       <groupId>log4j</groupId>
                       <artifactId>log4j</artifactId>
                       <version>${log4j.version}</version>

        </dependency>
               </dependencies>
           </dependencyManagement>

        1. 创建数据库

        创建名为db01的数据库,有一张表dept

        SpringCloud入门实验环境搭建

        2. 新建一个子模块api

        其中只有一个实体类dept对应我们数据库中的表

        SpringCloud入门实验环境搭建


        public class Dept {
           private int deptnumber;
           private String dname;
           private String d_source;
          //对应属性的get和set方法
        }

        3. 新建一个子模块provider作为服务的提供者

        导入依赖


         <dependencies>
         <!--将api模块导入由此可使用Dept实体类-->
               <dependency>
                   <groupId>org.example</groupId>
                   <artifactId>springcloud-api</artifactId>
                   <version>1.0-SNAPSHOT</version>
               </dependency>
               <dependency>
                   <groupId>mysql</groupId>
                   <artifactId>mysql-connector-java</artifactId>
               </dependency>
               <dependency>
                   <groupId>com.alibaba</groupId>
                   <artifactId>druid</artifactId>
               </dependency>
               <dependency>
                   <groupId>junit</groupId>
                   <artifactId>junit</artifactId>
                   <scope>test</scope>
               </dependency>
               <dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter</artifactId>
               </dependency>
               <dependency>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-starter-web</artifactId>
               </dependency>
               <dependency>
                   <groupId>org.mybatis.spring.boot</groupId>
                   <artifactId>mybatis-spring-boot-starter</artifactId>
                   <version>2.1.1</version>
               </dependency>
           </dependencies>

        配置配置文件和对应的操作类和接口

        application.xml


        server:
         port: 8081

        mybatis:
         type-aliases-package: pojo
         mapper-locations: classpath:Mybatis/mapper/*.xml
         config-location: classpath:Mybatis/mybatis-config.xml

        spring:
         application:
           name: provider-name
         datasource:
           type: com.alibaba.druid.pool.DruidDataSource
           driver-class-name: com.mysql.cj.jdbc.Driver
           username: root
           password: 123456
           url: jdbc:mysql://localhost:3306/db01?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8

        mapper-config.xml和Deptmapper.xml


        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE configuration
               PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
               "http://mybatis.org/dtd/mybatis-3-config.dtd">
        <configuration>
           <settings>
               <setting name="cacheEnabled" value="true"/>
           </settings>
        </configuration>

        <?xml version="1.0" encoding="UTF-8" ?>
        <!DOCTYPE mapper
               PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
               "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <mapper namespace="com.Dao.DeptDao">
           <insert id="add" parameterType="Dept">
               insert into dept(dname, d_source) values (#{dname},DATABASE());
           </insert>
           <select id="queryByID" resultType="Dept" parameterType="Long">
               select * from dept where deptnumber = #{id};
           </select>
           <select id="queryAll" resultType="Dept">
               select * from dept;
           </select>
        </mapper>

        对应的Dao,Controller,Service


        @Mapper
        public interface DeptDao {
           boolean add(Dept dept);
           Dept queryByID(long id);
           List<Dept> queryAll();
        }

        @Service
        public class DeptImpl implements DeptService{
           @Resource
           private DeptDao deptDao;
           public boolean add(Dept dept) {

        return deptDao.add(dept) ;
           }

        public Dept queryByID(long id) {
               System.out.println("deptimpl"+id);

        return deptDao.queryByID(id);
           }

        public List<Dept> queryAll() {
               return deptDao.queryAll();
           }
        }

        @RestController
        public class DeptController {
           @Autowired
           private DeptImpl deptimpl;
           @PostMapping("/dev/add")
           public boolean addDept(@RequestBody Dept dept){
               System.out.println(dept);
              return deptimpl.add(dept);
           }
           @GetMapping("/dev/{id}")
           public Dept DeptqueryByID(@PathVariable("id") long id) {
               System.out.println("deptcontroller"+id);
               return deptimpl.queryByID(id);
           }
           @PostMapping("/dev/list")
           public List<Dept> DeptqueryAll() {
               return deptimpl.queryAll();
           }

        启动类


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

        新建子模块consumer作为消费者

        导入依赖


        <dependencies>
           <dependency>
               <groupId>org.example</groupId>
               <artifactId>springcloud-api</artifactId>
               <version>1.0-SNAPSHOT</version>
           </dependency>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter</artifactId>
           </dependency>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
           </dependencies>

        配置文件


        server:
         port: 80

        config类和controller


        /*
        RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例
        如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。
        */
        @Configuration
        public class ConfigBean {
           @Bean
           public RestTemplate getRestTemplate() {
               return new RestTemplate();
           }

        }

        @RestController
        public class ConsumerController {
           @Autowired
           private RestTemplate template;
           private static final String url="http://localhost:8001";
           @RequestMapping("/consumer/get/{id}")
           public Dept getByID(@PathVariable long id){
                                                           //请求的路径,请求返回的对象
               Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class);
               return getEntity;
           }
           @RequestMapping("/consumer/add")
           public boolean add(String dname){
               Dept dept = new Dept();
               dept.setDname(dname);
               System.out.println(dept);
               //请求的路径,传递的参数,返回的对象
               return template.postForObject(url+ "/dev/add",dept,Boolean.class);
           }
           @RequestMapping("/consumer/list")
           public List<Dept> list(){
               //请求的路径,返回的对象
               return template.postForObject(url+"/dev/list",void.class,List.class);
           }

        }

        启动类及运行结果

        debug-connect refuserd---debug-传参为null


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

        SpringCloud入门实验环境搭建

        debug

        子项目无法使用父项目的依赖包

        1 如果父项目pom使用


        <dependencyManagement>
        <dependencies>
                 ....

        </dependencies>
        </dependencyManagement>

        方式,则子项目pom不会自动使用父pom中的jar包, 如果需要使用,就要给出groupId和artifactId,无需给出version

        使用是为了统一管理版本信息

        在子工程中使用时,还是需要引入坐标的,但是不需要给出version

        在我们项目顶层的POM文件中,元素。

        通过它元素来管理jar包的版本,

        让子项目中引用一个依赖而不用显示的列出版本号。

        Maven会沿着父子层次向上找,

        直到找到一个拥有dependencyManagement元素的项目,

        然后它就会使用在这个dependencyManagement元素中指定的版本号。

        required a bean of type 'DeptDao' that could not be found.

        使用@Mapper而不是@Repository

            1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。

            2、@repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中

        Connection refused connect

        检查url端口号,是否写对,是否占用

        RestTemplate传递对象无法接收(null)

        在服务器端对应的参数上添加@RequestBody


           @PostMapping("/dev/add")
           public boolean addDept(@RequestBody Dept dept){
               System.out.println(dept);
              return deptimpl.add(dept);
           }

        来源:https://juejin.cn/post/6949533826339700767#heading-2

        标签:SpringCloud,环境搭建
        0
        投稿

        猜你喜欢

      • Kotlin示例讲解标准函数with与run和apply的使用

        2023-06-12 15:47:11
      • Android自定义带进度条WebView仿微信加载过程

        2022-05-08 04:52:46
      • Android webveiw 出现栈错误解决办法

        2023-11-29 01:54:26
      • Android图片加载利器之Picasso扩展功能

        2023-05-14 15:12:33
      • Java深入浅出数组的定义与使用上篇

        2022-03-10 22:32:58
      • 基于WPF实现简单放大镜效果

        2022-02-15 23:19:12
      • android Matrix实现图片随意放大缩小或拖动

        2022-02-12 12:06:48
      • C语言实现简单弹跳小球

        2022-07-03 12:54:34
      • Android中实现根据资源名获取资源ID

        2023-06-20 04:18:30
      • android Launcher3设置默认桌面应用

        2022-07-20 20:18:42
      • Android仿新浪微博发送菜单界面的实现

        2022-12-13 10:54:03
      • jdk8使用stream实现两个list集合合并成一个(对象属性的合并)

        2023-08-05 16:49:30
      • c#异步操作后台运行(backgroundworker类)示例

        2021-12-18 15:54:10
      • Android 微信6.1 tab栏图标和字体颜色渐变的实现

        2023-12-14 22:34:04
      • C#6.0中你可能不知道的新特性总结

        2023-08-17 04:25:54
      • Android BottomSheet效果的两种实现方式

        2022-10-14 02:26:23
      • 详解Android中实现ListView左右滑动删除条目的方法

        2021-08-15 03:38:53
      • Android Intent实现页面跳转的方法示例

        2021-11-08 05:27:22
      • Java 关于时间复杂度和空间复杂度的深度刨析

        2023-11-10 16:07:39
      • Spring整合Quartz开发代码实例

        2022-03-12 16:37:26
      • asp之家 软件编程 m.aspxhome.com