SpringBoot 入门学习笔记
一、学习路线


| 简介 | 详情 |
|---|---|
| SpringBoot 的缓存支持 | 使用EhCache缓存; 使用Redis缓存; |
| SpringBoot 的安全管理 | Spring Security简单入门; 使用Spring Session实现分布式会话管理 |
| SpringBoot 的日志管理 | 默认日志配置; 整合Log4j实现日志管理; 使用AOP实现统一Web请求日志 |
| SpringBoot 的监控管理 | actuator模块解析; |
| SpringBoot 的其他内容 | 定时任务与异步调用; 邮件发送实现; 后台运行配置; |
二、Spring
1、什么是Spring
- Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。
2、Spring是如何简化开发的:
为了降低Java开发的复杂性,Spring采用了以下4种关键策略:
- 基于POJO的轻量级和最小侵入性编程;
- 通过IOC,依赖注入(DI)和面向接口实现松耦合;
- 基于切面(AOP)和惯例进行声明式编程;
- 通过切面和模板减少样式代码;
三、SpringBoot
(一)核心思想:
约定大于配置
(二)SpringBoot的主要优点
- 为所有Spring开发者更快的入门
- 开箱即用,提供各种默认配置来简化项目配置
- 内嵌式容器简化web项目
- 没有冗余代码生成和XML配置的要求
(三)微服务
- 业务:
- Service:userService:==》模块
- springmvc,controller==》提供接口
1、微服务是一种架构风格,他要求我们在开发一个应用的时候,这个应用必须构建成一些列小服务的组合;可以通过http的方式互通。
2、单体应用架构:
所谓的单体应用架构(all in one)是指,我们将一个应用中的所有服务都封装在一个应用中,无论是ERP,CRM或是其他什么系统,你都把数据库访问,web访问,等等各个功能放到一个war包内: 这样做的好处:易于开发和测试;十分方便部署;当需要扩展时,只需要将war复制多份然后放到多个服务器上,再做个负载均衡就可以了。
3、单体应用架构的缺点:
哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包,部署这个应用war包。特别是对于一个大型应用,我们不可能把所有内容都放在一个应用里面,我们如何维护,如何分工合作都是问题;
(四)使用场景
1、Spring 再简化:SpringBoot - 打包成JAR包:内嵌tomcat;微服务架构
2、服务越来越多:SpringCloud :如何去整理这些服务,扩展一下这些服务出了问题该怎么处理
3、SpringBoot核心:自动装配(为什么能简化开发的答案)
四、yaml语法
# 普通Key value
name: ping
# 对象
student:
name: ping
age: 20
# 行内写法
student: {name: ping, age: 30}
# 数组
pets:
- cat
- dog
- pig
# 行内写法
pets: [cat,dog,pig]
五、javaConfig 绑定配置文件的值
1、注解方式赋值
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class Dog {
@Value("per")
private String name;
@Value("3")
private Integer age;
public Dog() {}
... # getter 和 setter
}
2、 yaml方式赋值
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties("dog")
public class Dog {
private String name;
private Integer age;
public Dog() {
}
...
}
application.yml 文件
dog:
name: per
age: 20
重点:
- ConfigurationProperties作用:
- 将配置文件中配置的每一个的属性的值,映射到这个组件中;
- 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置绑定
- 参数 prefix=“dog” : 将 配置文件的dog下面的所有属性一一对应(注意:名字一定要相同)
3、*.properties文件配置
import org.springframework.context.annotation.PropertySource;
@PropertySource("classpath:dog.properties")
public class Dog {
# SPEL 表达式取出配置文件的值
@Value("${name}")
private String name;
private Integer age;
public Dog() {
}
...
}
dog.properties
name=东方
注意:IDEA中这种方法如果不配置编码的话,会出现乱码。去设置 FileEncoding中设置一下编码问题就好了。

4、松散绑定
yml文件中的 last-name: 阿黄 对应 类中的 lastName
5、 JSR303数据校验

使用方式
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
@Validated
public class Dog {
@Email #按照上面的一系列注解进行使用
private String name;
private Integer age;
public Dog() {}
...
}
六、配置文件位置

(一) 基础介绍
- 1、file:指项目路径
- 2、名字必须是 application.yml/properties
- 3、classpath:类路径,一般是java/resources目录
(二)优先级
-
按照从1到4优先级越来越低,也就是说:优先按照序号小的配置文件进行配置(有哪个使用哪个)
(三)多环境配置
1、properties文件
创建多个配置文件
- application.properties
- application-dev.properties
- application-test.properties
然后在 application.properties中进行配置
spring.profiles.active=dev
2、yaml文件
spring:
profiles:
active: dev
server:
port: 8080
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
七、静态资源目录

1、优先级
resources>static>public
- public: 一般放公共资源,大家都会访问的js
- static:静态资源,一些图片等等
- resouces:放一些上传的一些文件
- 如果自定义资源目录,上面那些目录就都失效了(一般不会这么干)

2、总结

八、RPC协议
1、本地方法调用
本地的A方法调用本地的B方法
2、概念:
是一种进程间通信方式,它是一种技术的思想,而不是规范。他允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或者函数,而不是用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
3、两个核心:通讯,序列化
4、序列化:方便数据的传输
九、注解学习
1、@PostConstruct和@PreDestroy
==被这两个注解修饰的方法可以保证在整个Servlet生命周期中只被执行一次即使Web容器在其内部多次实例化该方法所在的Bean==
@PostConstruct:用来修饰方法,标记在项目启动的时候执行这个方法,一般用来执行某些初始化操作,比如全局配置。@PostConstruct注解的方法会在构造函数之后执行,Servlet的==init()==方法之前执行。@PreDestory:当bean被Web容器管理的时候调用,一般用来释放bean所持有的的资源,@PreD额story注解方法会在Servlet的==init()==之前执行。
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@Configuration //此类将被容器管理成Bean
public class MyConfiguration {
public MyConfiguration() {
System.out.println("构造方法被调用");
}
//构造器之后被执行
@PostConstruct
private void init() {
System.out.println("PostConstruct注解方法被调用");
}
//bean死亡之前被执行
@PreDestroy
private void shutdown() {
System.out.println("PreDestroy注解方法被调用");
}
}
J2EE已在Java 9中弃用 @PostConstruct和@PreDestroy这两个注解 ,并计划在Java 11中将其删除。我们有什么更好的替代方法吗?当然有!如果在JAVA9之后使用这两个注解,请添加以下依赖 :
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependcy>
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果