课程地址
1. Springboot parent和starter区别
- parent:开发Springboot项目需要继承spring-boot-starter-parent,其中定义了若干个依赖管理(坐标版本号),避免依赖版本冲突;
- starter:开发Springboot项目需要导入坐标时通常导入对应的starter,每个starter根据功能不同,通常包含多个依赖坐标,简化配置;
2. 配置文件加载优先级
.properties
>.yml
>.yaml
- 不同配置文件中相同的配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留。
3. 配置文件属性提示消失解决方案
4. 读取配置文件属性数据
- 读取单一属性属性:@Value
@Value("${server.port}")
private String port;
- 读取全部属性数据:Environment
@Autowired
private Environment env;
...
sout(env.getProperty("server.port"));
- 自定义对象封装指定数据(目前常用)
5. 整合第三方技术
- 导入相关依赖(starter)
- 配置yml
6. 工程打包与运行
mvn clean
->mvn package
;- pom里应包含打包插件
spring-boot-maven-plugin
; java -jar xxxx.jar [(临时属性:)--server.port=8080 --xx=xx]
运行jar文件。
- linux系统打包运行暂时跳过!
7. 配置文件4级分类
多层级配置文件间的属性采用叠加并覆盖
的形式作用于程序。
8. 多环境开发
-
单文件
-
多文件(yml):主文件中设置公共属性,环境分类文件中设置冲突属性
-
多文件(properties)
-
多环境分组管理
9. 热部署
- 手工启动热部署
(1)导入依赖 devtools
<dependency>
<groupId>org.springframework.boot</groupId>
<artifcatId>spring-boot-devtools</artifactId>
</dependency>
(2)激活热部署(restart):build project (Ctrl + F9)
- 自动启动热部署
激活方式:IDEA失去焦点5s后启动热部署。
10. @ConfigurationProperties 第三方Bean属性绑定
@Bean
@ConfigurationProperties(prefix="datasource")
public DruidDataSource datasource(){
DruidDataSource ds = new DruidDataSource();
return ds;
}
-
宽松绑定:属性名可以宽松绑定,但绑定前缀名(
prefix
)必须仅能使用纯小写字母、数字、下划线作为合法字符;
-
Bean的属性校验
(1)导入JSR303和Hibernate校验框架依赖;
(2)使用@Validated
注解启用校验功能;
(3)使用具体的校验规则规范数据校验格式。
11. web环境模拟测试 webEnvironment =
(1)加载测试专用属性
@SpringBootTest(properties={"test.prop=testvalue1"}, args={"--test.prop=testvalue2"})
public class WebTest {
}
(2)加载测试专用配置
@Import({MsgConfig.class, xxx.class})
public class WebTest {
}
(3)设置测试端口
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class WebTest {
@Test
void testGetById(){
xxxxx;
}
}
(4)模拟测试启动
//开启虚拟MVC调用
@AutoConfigureMockMvc
public class WebTest {
}
(5)模拟测试匹配
@Test
void testGetById(@Autowired MockMvc mvc) throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/books");
ResultActions action = mvc.perform(builder);
// 测试响应状态
StatusResultMatchers status = MockMvcResultMatchers.status();
ResultMatcher ok = status.isOk();
action.andExpect(ok);
// 测试响应头
StatusResultMatchers header= MockMvcResultMatchers.header();
ResultMatcher contentType = header.string("Content_Type", "application/json");
action.andExpect(contentType);
// 测试响应体,json
StatusResultMatchers content= MockMvcResultMatchers.content();
ResultMatcher result= content.json("{\"id\":1,\"name\":\"wyw\"}");
action.andExpect(result);
}
(6)测试事务回滚
@Transactional
public class WebTest {
}
12. Springboot整合Redis
- 导入redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置redis
spring:
redis:
host: 127.0.0.1
port: 6379
- 使用RedisTemplate的各种方法操作redis
13. Mongodb
(1)下载与安装(windows)
(2)Mongodb基础命令
(3)Springboot整合Mongodb
- 导入Mongodb对应依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 配置Mongodb
spring:
data:
mongodb:
uri: mongodb://localhost/itheima
- 提供操作Mongodb的MongoTemplate
@Autowired
private MongoTemplate mongoTemplate
void test() {
// 创建插入或查询对象
Book book = new Book("1", "wyw");
// 插入数据
mongoTemplate.save(book);
// 查询所有
mongoTemplate.findAll();
}
14. Elasticsearch
(1)下载与安装(windows)
(2)创建/查询/删除索引(这里索引相当于Mysql中库的概念)
(3)安装配置IK分词器
下载、解压缩后放在elasticsearch/plugins目录下。
(4)创建索引并指定规则
(5)Springboot整合ES
- 导入ES高阶客户端依赖
<dependency>
<groupId>org.elasitcsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
-
IK分词器
-
创建索引
-
批量添加文档
-
按条件查询文档
15. Springboot整合RocketMQ
- 导入RocketMQ依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.2.1</version>
</dependency>
- 配置RocketMQ
rocketmq:
name-server: localhost:9876
producer:
group: group_rocketmq # 组必须指定
- 生产消息(异步)
- 使用消息监听器对消息队列监听
16. Springboot整合Kafka
- 导入Kafka依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
- 配置Kafka
spring:
kafka:
bootstrap-servers: localhost:9092
consumer:
group-id: order # 启动监听必须指定组
- 生产消息
- 消费消息
17. 监控 Springboot Admin
(1)监控的意义
(2)可视化监控平台——Springboot Admin
(3)监控原理——Actuator
(4)自定义监控指标
- 为info端点添加自定义指标
- 为Health端点添加自定义指标
- 为Metrics端点添加自定义指标
- 自定义端点
18. Bean的加载方式
(1)xml + <bean/>
(2)xml:content + 注解 (@Component + 4个@Bean)
(3)配置类 + 扫描 + 注解 (@Component + 4个@Bean)
- @Bean定义FactoryBean接口
- @ImportResource
- @Configuration注解的proxyBeanMethods属性
(4)@Import导入bean的类
- @Import导入配置类
(5)AnnotationConfigApplicationContext调用register方法
(6)@Import导入ImportSelector接口
(7)@Import导入ImportBeanDefinitionRegister接口
(8)@Import导入BeanDefinitionRegistryPostProcessor接口