本教程来源于b站尚硅谷雷神SpringBoot2零基础入门springboot全套完整版(spring boot2)
环境:这里用的是jdk8和maven3.6.3
1 spring与springboot 1.1 为什么用SpringBoot?能快速创建出生产级别的Spring应用。
springboot优点:
简单点说,
- 使用spring就是所有东西我自己配,springboot就是配置都给我默认配好,我只需要按需改配置就行了。
- 依赖的各种jar包版本兼容自动做好。
- 内嵌默认tomcat,打jar包,不用部署在tomcat服务器上,java -jar xxx.jar就能运行。
● 微服务是一种架构风格
● 一个应用拆分为一组小型服务
● 每个服务运行在自己的进程内,也就是可独立部署和升级
● 服务之间使用轻量级HTTP交互
● 服务围绕业务功能拆分
● 可以由全自动部署机制独立部署
● 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
微服务独立部署、去中心化就会导致分布式。
分布式需要解决的问题:
● 远程调用
● 服务发现
● 负载均衡
● 服务容错
● 配置管理
● 服务监控
● 链路追踪
● 日志管理
● 任务调度
springcloud各种框架处理分布式的问题,但现在很多SpringCloud的分布式框架被springcloudalibaba的分布式框架代替了。
上云的困难:
● 服务自愈
● 弹性伸缩
● 服务隔离
● 自动化部署
● 灰度发布
● 流量治理
解决方案:
云原生(Cloud Native)
2.2 HelloWorld入门nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public jdk-1.8 true 1.8 1.8 1.8 1.8
需求:浏览发送/hello请求,响应 Hello,Spring Boot 2
1.创建maven工程
2.引入依赖
pom.xml:
4.0.0 com.atguigu boot-01-helloworld 1.0-SNAPSHOT org.springframework.boot spring-boot-starter-parent 2.3.4.RELEASE org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-maven-plugin
3.编写主程序类和业务
MainApplication:
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
HelloController :
@RestController
public class HelloController {
@RequestMapping("/hello")
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
运行main方法,输入
http://localhost:8080/hello
运行成功。
4.打包
停掉服务,点击maven-clean-package
可以看到target中打了jar包
在jar包所在目录内,cmd窗口命令运行:
java -jar boot-01-helloworld-1.0-SNAPSHOT.jar
同样可以启动,测试页面成功即可,停掉服务就直接关cmd窗口。
5.配置
所有配置在这个里面。
具体怎么配可以去官网查:https://docs.spring.io/spring-boot/docs/2.3.4.RELEASE/reference/html/appendix-application-properties.html#common-application-properties
版本号标签是这样得到的:
这里介绍springboot使用的常用容器相关注解。
1 组件添加 @Configuration @Bean、@Component、@Controller、@Service、@Repository @ComponentScan、@import @Conditional
如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用
这种情况是用在当要使用第三方jar包里面的类,但他又没加@component,只能这样用一下。
首先看主程序类的注解@SpringBootApplication里面,是下面这些注解的结合:
再看看@EnableAutoConfiguration这个重要的自动配置注解里面:
看import导入的AutoConfigurationimportSelector.class这个类里面,得到的信息:
1、利用getAutoConfigurationEntry(annotationmetadata);给容器中批量导入一些组件 2、调用Listconfigurations = getCandidateConfigurations(annotationmetadata, attributes)获取到所有需要导入到容器中的配置类 3、利用工厂加载 Map > loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件 4、从meta-INF/spring.factories位置来加载一个文件。 默认扫描我们当前系统里面所有meta-INF/spring.factories位置的文件 spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有meta-INF/spring.factories,文件里面写死了spring-boot一启动就要给容器中加载的所有配置类。
哪些配置生效,哪些不生效,就是下节的《2 按需开启自动配置项》解决的问题。
我们点开其中一个配置类,看到它需要按照之前我们了解过的条件注解@ConditionalXXX注解来判断生不生效:
判断了生不生效,配置怎么默认注入,怎么和配置文件application.properties绑定?
以上面截图为例,就在刚刚自动配置类上的@EnableConfigurationProperties({BatchProperties.class})注解需要的BatchProperties.class类里:
直接通过application.properties修改属性修改默认配置,
甚至根据判断配置类生效的条件@Conditionalxxxx让它自带的不生效,然后自己写个组件注册进去就完成了定制化替换。
● SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
● 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值,指定的值从xxxxProperties里面拿。xxxProperties和配置文件进行了绑定。
● 生效的配置类就会给容器中装配很多组件
● 只要容器中有这些组件,相当于这些功能就有了
● 定制化配置
○ 用户直接自己@Bean替换底层的组件
○ 用户去看这个组件是获取的配置文件什么值就去修改。
- 引入场景依赖
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter - 查看自动配置了哪些(选做)
○ 自己分析,引入场景对应的自动配置一般都生效了
○ 配置文件中debug=true开启自动配置报告。Negative(不生效)Positive(生效) - 是否需要修改
○ 参照文档修改配置项
■ https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
■ 自己分析。xxxxProperties绑定了配置文件的哪些。
○ 自定义加入或者替换组件
■ @Bean、@Component。。。
○ 自定义器 XXXXXCustomizer;
- lombok
简化JavaBean开发,不用写setter-getter之类的常规方法,@data注解一键添加。
(1)添加依赖,springboot也默认管理了版本号
org.projectlombok lombok
(2)安装插件,重启idea
(3)使用
- dev-tools
项目或者页面修改以后:Ctrl+F9;不用重启。 - Spring Initailizr(项目初始化向导)
自动添加主程序类、pom依赖、properties文件啥的。



