SpringCloud项目创建
1.1 maven-archetype-site(更复杂的网站项目)
1.2 springcloud 版本和 springboot 对应的版本
SpringBoot2.X版和SpringCloud H版
SpringCloud Alibaba 2.1
Springcloud和SpringcloudAlibaba版本的选择
如何选择与springcloud匹配的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>
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>
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
该日志的主要意思是代理事务管理器配置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.业务类
groupid 项目组织唯一标识 可以是父组织
ArtifactID就是项目的唯一的标识符 统称为坐标
9.2 同级maven依赖项目
<dependency>
<!--父类组-->
<groupId>ins.cloud</groupId>
<!--依赖公共项目名称-->
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
-Dservice.port=8002