最近我又回归啦
接触了一个新的插件 安装好之后还要配置一些路径哦不要忘记 不然下面的项目会运行不了哦
分享给大家
正题开始 不是开始创建maven项目啦
A.微服务
是一种架构风格,将业务拆分成模块,部署在不同的主机上提供结构,提供服务,通过http的方式通信.
A.01.发展历程(单体应用程序)
将一个应用的所有应用服务都封在一个应用中,无论什么系统,都把数据库访问,web访问,各个功能放在一 个war包内.
好处: 架构简单,项目开发成本低. 所有项目模块部署到一起,对于小型项目来说,维护方便.
缺点: 所有模块耦合在一起,虽然对于小型项目来说,维护方便.但是,对于大型项目来说,却是不易开发 和维护的. 项目的各模块之前过于耦合,如果一旦有一个模块出现问题,则整个项目将不可用. 无法针对某个具体模块来提升性能. 无法对项目进行水平扩展.
水平扩展与垂直扩展
A.02.发展历程(垂直应用架构)
好处:
系统进行了拆分,可根据不同系统的访问情况,有针对性的进行优化.
能够实现应用的水平扩展.
各系统能够分担整体访问的流量,解决了并发问题.
一个系统发生了故障,不应用其他系统的运行情况,提高了整体的容错率.
缺点:
拆分后的各系统之间相对比较独立,无法进行互相调用.
各系统难免存在重叠的业务,会存在重复开发的业务,后期维护比较困难.
A.03.发展历程(分布式架构)
集群与分布式
垂直拆分(分布式): 就是多个子系统互相协作才能完成整个业务流程,系统之间需要进行通信.
水平扩展(集群): 就是同一个工程部署到多台服务器上.
A.04.发展历程(SOA架构)
在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,对于容量的评估,小服务资源的浪费等 问题比较严重.
此时,我们就需要增加一个统一的调度中心来对集群进行实时管理.此时,系统就会演变为SOA(面向服 务)的架构.
好处:
使用注册中心解决了各个服务之间的服务依赖和调用关系的自动注册与发现.
缺点:
服务之间的依赖与调用关系复杂,测试部署的困难比较大.
A.05.发展历程(微服务架构)
好处:
服务彻底拆分,各服务独立打包、独立部署和独立升级.
每个微服务负责的业务比较清晰,利于后期扩展和维护.
微服务之间可以采用REST和RPC协议进行通信.
缺点:
涉及到各服务的容错性问题.
涉及到数据的一致性问题.
涉及到分布式事务问题
A.06.SOA架构和微服务架构的区别
SOA(Service Oriented Architecture)"面向服务的架构":他是一种设计方法,其中包含多个服务, 服务之间通过相互依赖最终提供一系列的功能.一个服务 通常以独立的形式存在与操作系统进程中. 各个服务之间 通过网络调用.
MicroServices "微服务架构":其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会 拆分为多个可以独立开发、设计、运行的小应用.这些小应用之间通过服务完成交互和集成.
跟着我的思路 一步步来应该就不会报错啦 有什么疑问可以在下面评论哦
运行的结果
巩固一下这些知识
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
在pom.xml中添加这个 然后才会有一个注解
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
不然找不到这个注解RestController
package com.hmf.springboot.controller;
import org.springframework.web.bind.annotation.RestController;
/**
* @author hmf
*/
@RestController
public class TestController {
public String day(){
return "okok";
}
}
运行结果
我们把之前的配置文件改成了
主启动类
@SpringBootApplication 标识启动类
@ComponentScan 开启组件扫描
@Configuration 标识配置类(替代XML配置文件)
@SpringBootConfiguration 标识配置类(是对@Configuration注解进行了包装,本质上依然是 @Configuration注解)
@EnableAutoConfiguration 开启自动配置( 从classpath中搜索所有META-INF/spring.factories配置文件然后,将其中 org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器 只有spring.boot.enableautoconfiguration为true(默认为 true)的时候,才启用自动配置)
@AutoConfigurationPackage 自动配置包(将添加该注解的类所在的package作为自动配置 package进行管理)
实体类
package com.hmf.springboot.controller.demo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @author hmf */ @Component @Data @NoArgsConstructor @AllArgsConstructor public class Student { @Value("${name}") private String name; private int age; }
测试
package com.hmf.springboot; import com.hmf.springboot.controller.demo.Student; import lombok.Data; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @Data @SpringBootTest class ApplicationTests { @Autowired private Student student; @Test void contextLoads() { System.out.println(student); } }
配置文件
运行结果
@ConfigurationProperties(prefix = "student")这个注解可能会报错
然后 在pom.xml中添加这个
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
D.基于配置文件的注入 yml(支持松散绑定,复杂数据类型)
@ConfigurationProperties() 可以通过指定 prefix 指定加载的对象的前缀
如果对象的数据不在 application.xml 中,则需要通过 @PropertySource() 指定文件加载,并且需要配 合 @Value("${xx}") 标签
复杂数据:
List Set Map int
实体类Student.java
package com.hmf.springboot.controller.demo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; /** * @author hmf */ @Component @Data @NoArgsConstructor @AllArgsConstructor @ConfigurationProperties(prefix = "student") public class Student { private String userName; private int userAge; private String userSex; private List<String> userHabbay; private Map<String,Object> tpye; }
配置文件application.yml
#server server: port: 8081 student: user_name: 小芳 user_age: 18 user_sex: 男 user_habbay: - html - java - c语言 tpye: { tpye1: 打游戏,tpye2: 唱歌 }
测试类ApplicationTests.java
package com.hmf.springboot; import com.hmf.springboot.controller.demo.Student; import lombok.Data; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @Data @SpringBootTest class ApplicationTests { @Autowired private Student student; @Test void contextLoads() { System.out.println(student); } }
运行结果
配置文件加载位置
1. config/application.properties(项目根目录中config目录下)
2. config/application.yml
3. application.properties(项目根目录下)
4. application.yml
5. resources/config/application.properties(项目resources目录中config目录下)
6. resources/config/application.yml
7. resources/application.properties(项目的resources目录下)
8. resources/application.yml
@ConfigurationProperties,@EnableConfi gurationProperties