SpringCloud项目创建

1.创建聚合父工程Project

  1.1  maven-archetype-site(更复杂的网站项目) 

  1.2 springcloud 版本和 springboot 对应的版本

    SpringBoot2.X版和SpringCloud H

    SpringCloud Alibaba 2.1

 

Springcloud和SpringcloudAlibaba版本的选择

如何选择与springcloud匹配的springboot版本

 

  1.3 springboot 的版本 官网

  1.4 相关链接 SpringCloud搭建(一) 聚合父工程搭建

  1.5 创建聚合总工程,未选择任何archetype ;环境 jdk1.8,maven3.8,

   springboot版本:2.2.2.RELEASE  ,

  SpringCloud版本:Hoxton.RELEASE,

  spring cloud alibaba 2.2.0.RELEASE

    ;选择maven- product;spring Initializr 联网会限制版本

    

2.聚合总工程创建后的细节调整和优化

  2.1 idea中过滤无用文件 .idea .iml 文件夹 Editor(编辑) -- fileType(文件类型)

    2.1.1 点击加号,添加需要过滤的后缀,如:*.idea  *.iml。 先回车 apply即可生效

    2.2 idea 调整字符编码UTF-8 Editor(编辑) -- file Encodings(文件编码)

   

  2.3 idea 注解激活  build -- compiler(编译器) -- annotation processors (注解处理器) --  选择项目 但是自动已经设置好了

  

   2.4 Java 编译版本  build -- compiler(编译器) -- Java Compiler(java 编译器) 自动设置为 jdk1.8

  

 

3. 关于父工程 

  3.1 父工程已经创建好了,但是父工程不做真实的代码开发,而是在父工程创建一个一个模块,在模块下做真实的开发 删除父工程的 src目录

  3.2 pom 文件中标注父工程,标注当前工程为父工程  

<packaging>pom</packaging>

  3.3 父工程pom中 统一 管理jar包管理;锁定子模块使用组件的版本 如springboot 2.2.2;maven插件版本 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ins.cloud</groupId>
    <artifactId>tsbxCloud</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>cloud-provide-payment8001</module>
    </modules>


    <!-- 统一管理jar包版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.16.18</lombok.version>
        <mysql.version>5.1.47</mysql.version>
        <druid.version>1.1.16</druid.version>
        <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
    <dependencyManagement>
        <dependencies>
            <!--spring boot 2.2.2-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud Hoxton.SR1-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring cloud alibaba 2.1.0.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis.spring.boot.version}</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
                <optional>true</optional>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
父工程pom配置

  

dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
*如果不在子项目中声明赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

   

3.4 项目maven构建报错 Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin:2.4.1

    使用 maven 导入插件的时候报错:解决办法: 在 pom.xml 中填入对应的版本号后下载成功了  <version>2.4.1</version>

  3.5 modelVersion 描述这个POM文件是遵从哪个版本的项目描述符

 4.创建子模块

  4.1 子模块命名 如 cloud-provide-payment8001(端口号)   

   4.2 选中父项目 -右键new -module (选择maven项目)

  

 

   

 

   4.3 子模块样式

  

 

   4.4 子模块引入相关依赖,公共的依赖不需要指定版本 启动器

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
           <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>
View Code

   4.5 application.yml - resources文件夹下server:

  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:
//localhost:3306/cloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root mybatis: mapperLocations: classpath:/mapper/*.xml #实体类所在的包,配置号后mapper.xml不需要写实体类的完整路径 type-aliases-package: com.atguigu.springcloud.entities

    4.5.1  type-aliases-package 的作用

    4.5.2 mysql 创建数据库使用的字符编码集:

      

    4.5.3  Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

            utf8存储三个字节,mb4四个字节 可以存储Emoji 表情

          utf8mb4_bin  区分大小写,而且可以存二进制的内容。

           utf8mb4_unicode_ci 基于标准的Unicode来排序和比较

  4.6 编写启动类 

  

  4.7.springboot集成mybatis;

    4.7.1 注意 启动类上 两个注解

        

       // Spring 组件包扫描路径
      @ComponentScan(basePackages = "ins")

       //MyBatis Mapper包扫描路径
      @MapperScan(value = { "ins.platform.*.dao","ins.platform.*.*.dao","ins.platform.*.*.*.dao"})

 

     4.7.2 mapper接口层,1.每个接口上加上 @Mapper这个注解的 纳入spring管理;2不写注解 需要在启动类上加上@MapperScan() 扫描到

      1.问题 :报错 no mybatis mapper was found in

        没有去指定mybatis的mapper路径,mybatis的MapperScan()会扫描启动类同级目录下的mapper接口

        导致报No MyBatis mapper was found in的警告

      2.问题:No active profile set, falling back to default profiles: default

      3.问题:如何优雅的不使用@Mapper注解 --- 启动类扫描

      

     4.7.3  问题:”运行项目连接Mysql时出现警告Establishing SSL connection without server‘s identity verification is not recommende   

        url=jdbc:mysql://127.0.0.1:3306/framework?characterEncoding=utf8&useSSL=true

    4.7.4 问题: Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable  

        生产环境上,通常不允许启用devTools工具,因为这是一个严重的安全问题  

        关闭热部署插件  

    4.7.5 问题:No active profile set, falling back to default profiles: default

         配置多环境启动 

    4.7.6 Spring Boot 2.0 中使用 Actuator  健康检查

        作用: 主要是完成微服务的监控,完成监控治理。可以查看微服务间的数据处理和调用,当它们之间出现了异常,就可以快速定位到出现问题的地方。

        详解SpringBoot2.X应用程序监控Actuator的配置与使用

          为了程序的安全性考虑,默认只开启了这两个端口

           spring-boot-starter-actuator监控接口详解

    4.7.7 Initializing Spring DispatcherServlet 'dispatcherServlet'

        前端控制器DispatcherServlet

    4.7.8 trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration] is not eligible     for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

        该日志的主要意思是代理事务管理器配置bean被提前注册了,我这个bean不影响,只是这个bean被提前注册了,bean依旧是管用的

    

  4.8.springboot子项目启动

    4.8.1 自动注入的两个注解的区别,spring提供的@Autowired 和 jdk提供的@Resource

      @Autowired:spring提供注解,根据类型注入属性 有且只有一个匹配类型的对象

      @Qualifier:@Autowired注入时,若有多个同类型的bean,使用该注解指定加载的bean的名称

          spring默认的组扫描的bean id 是类名的首字母小写,如:类 Bee ,bean  id 默认:bee;

          如果类第一个字母大写第二个小写,那么首字母小写获取bean

          如果第一个和第二个字母都是大写的,那个获取bean首字母要大写

      @Resource:java提供注解,可根据名称(默认)、类型注入属性;如果name存在匹配name,如果不存在匹配类型

    4.8.2 post请求中 把参数封装到接口对象中,需要用的@RequestBody这个注解

  

  4.9 框架工程模块的搭建步骤

    1. 建module 选择maven创建

    2.改写pom文件

    3.写yml文件

    4.写启动类

    5.业务类

 

8.关于坐标依赖 groupid和artifactId

  groupid 项目组织唯一标识 可以是父组织

  ArtifactID就是项目的唯一的标识符 统称为坐标

   9.2 同级maven依赖项目

<dependency>
<!--父类组-->
<groupId>ins.cloud</groupId>
<!--依赖公共项目名称-->
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>

 

 

9.idea中一个项目不同端口启动多次

  -Dservice.port=8002

 10.Spring Cloud 环境初搭建:多模块项目管理

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
posted @ 2022-04-04 11:53  BBS_自律  阅读(95)  评论(0编辑  收藏  举报