springboot是一款基于spring的集成多方框架的快速开发框架,它采用继承maven父工程的依赖的方式使自己不需要在像spring框架开发那样需要写繁杂的xml配置文件。你在springboot的项目里最多见的就是注解和java代码。
但是?这么优越的一个开发框架,难道还用来开发我们之前开发的那种所有的代码都放在一个jar包那种的项目吗?答案当然不是,需要注意的是它依旧可以开发这样的项目,只是目前它用在微服务架构里开发比较适合它的特性,它的每一个接口都可以分开作为一个微服务,如果那些大业务需要这些小的微服务,我们只需要调用这些api就可以,以前在ssm框架里,我们需要MVC三层模型封装成一个功能性的单体服务项目,但是现在我们可以把功能拆分成一个个模块,它们可以由我们的需求去任意的组装,至于怎么调配好用,这就属于程序员的事情了。
什么是微服务?微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法每一个服务运行在自己的进程中服务间通信采用的轻量级通信机制(一般是http). 这些服务围绕业务能力构建并且可通过全自动部署机制独立部署这些服务公用一个最小型的集中式的管理服务可用不同的语言开发,使用不同的数据存储技术。
微服务架构架构如如下图所示:
微服务的优点
- 易于开发和维护:一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量少。开发和维护单个微服务相当简单。而整个应用是若干个微服务构建而成的,所以整个应用也被维持在一个可控状态。单个微服务启动较快 单个微服务代码量较少,所以启动会比较快。局部修改容易部署:单个应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,只需要重新部署这个服务即可。技术栈不受限:在微服务架构中,可以结合项目业务及团队的特点,合理选择技术栈。例如某些服务可以使用关系型数据库Mysql有些服务。可以使用非关系型数据库如redis;甚至可根据需求,部分微服务使用Java开发,部分微服务使用Node.js开发。按需收缩可根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,增加内存、升级CPU或者增加节点。
微服务的缺点
- 运维要求较高: 更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行。而在微服务中,需要保证几十甚至几百个服务正常运行与协作,这给运维带来了很大的挑战。分布式固有的复杂性:使用微服务构建的是分布式 系统。对于一个分布式系统,系统容错、网络延迟等都会带来巨大的挑战。接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务 API ,可能所有使用该接口的微服务都需要调整。
分布式就是指数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,解决了网络GIS 中存在的数据异构、数据共享、运算复杂等问题。
在idea创建一个springboot项目的步骤
- new project选择springInitializer选项配置jdk,添加springweb依赖点击创建就OK了
pom文件
org.springframework.boot spring-boot-starter-parent2.6.5 com.hlc helloWord0.0.1-SNAPSHOT helloWord helloWord 11 这里不就是我们创建的时候导入的web坐标吗? 单元测试org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest 打包插件 org.springframework.boot spring-boot-maven-plugin
我们不难发现在pom文件里具有
spring-boot-starter-parent的继承依赖:
org.springframework.boot spring-boot-dependencies2.6.5
我们再进去这个spring-boot-dependencies里去看看:
出于水文篇幅考虑,我只复制了一些常见的依赖版本 1.9.7 9.4.1.jre8 8.0.28 3.36.0.3
我们发现原来springboot不需要写那么多配置文件是因为它利用了maven的继承依赖的原因使得它可以轻松的获得其它框架的核心工具。
main函数所在的类(主运行入口)package com.hlc.helloword;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication我们看它的源码
public class HelloWordApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWordApplication.class, args);
}
}
这个注解是怎么回事?我们去看看源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Inherited
@SpringBootConfiguration注意这个注解,我们继续进去看看它的源代码
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
@AliasFor(
.......省略
继续看源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Configuration继续!!!给我看到底
@Indexed
public @interface SpringBootConfiguration {
@AliasFor(
annotation = Configuration.class
)
boolean proxyBeanMethods() default true;
}
再来!它还有:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@documented
@Component这个注解真的太友好了,终于熟悉了我的老兄弟,这不就是spring框架IOC技术使用的组件注解吗?
public @interface Configuration {
@AliasFor(
annotation = Component.class
)
String value() default "";
boolean proxyBeanMethods() default true;
}
所以原来是这样,自动装配,自动生成Javabean的原理原来是一层层注解达成的功能,把注解当成超级小的元,一个微服务大概就是一个个元以及一些逻辑代码组成的吧!
启动的控制台效果这个永不飘红的小图标是我自己设置的,莫慌!
下一次测试写接口



