Spring Boot 总结
第1章
1.1 Spring Boot的概述
Spring Boot对Spring存在的问题(配置繁琐,损耗开发时间,项目的依赖管理耗时耗力)进行改善和优化,基于约定优于配置的思想,快速构建庞大的spring项目,尽可能减少一切xml配置,做到开箱即用。
1.2 Spring Boot的特点
- 创建独立的spring应用程序
- 尽可能自动配置spring和第三方类库
- 开箱即用,没有代码生成,无需配置xml。
- Spring Boot不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。
1.3 Spring Boot的核心功能
-
起步依赖
本质上是一个Maven项目对象模型,定义了对其他库的传递依赖。起步依赖就是将具有某种功能的坐标打包到一起,并提供一些默认的功能。(里面已经对各种常用的依赖的版本进行了管理)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
-
自动配置依赖(启动器)
为了让Spring Boot帮我们完成各种自动配置,必须引入Spring Boot提供的自动配置依赖,称为启动器。spring-boot-starter-parent工程将依赖关系声明为一个或者多个启动器,根据项目需求引入相应的启动器。SpringBoot要集成SpringMVC进行Controller的开发,所以引入web启动器。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
第2章 Spring Boot快速入门
2.1 创建Maven工程
2.2 添加Spring Boot的起步依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>springboot_quick</artifactId>
<version>1.0-SNAPSHOT</version>
<!--起步依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
</parent>
<dependencies>
<!--web的启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2.3 编写Spring Boot的引导类
//声明该类是一个SpringBoot引导类
@SpringBootApplication
public class MySpringBootApplication {
//main是java程序的入口
public static void main(String[] args) {
//run方法,表示运行SpringBoot的引导类 run参数就是SpringBoot引导类的字节码对象
SpringApplication.run(MySpringBootApplication.class);
}
}
2.4 编写Controller
@Controller
public class QuickController {
@RequestMapping("/quick")
@ResponseBody
public String quick() {
return "你好 springboot";
}
}
2.5 测试
执行SpringBoot起步类的主方法,控制台打印日志如下:
打开浏览器访问:localhost:8080/quick
2.6 快速入门解析
2.6.1 Spring Boot代码解析
- @SpringBootApplication:标注SpringBoot启动类,该注解具备多种功能。(其实是一个组合注解)
* @SpringBootConfiguration:声明当前类就是SpringBoot应用的配置类
* @EnableAutoConfiguration:开启自动配置
* @ComponentScan:开启注解扫描 - SpringApplication.run(MySpringBootApplication.class)代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象。
2.6.2 SpringBoot的热部署
1.在pom.xml中添加配置
<!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
2.修改IDEA设置
然后Shift+Ctrl+Alt + /,选择Resgistry,勾选:compiler.automake.allow.when.app.running
第3章 Spring Boot 原理分析
3.1 起步依赖原理分析
3.1.1 分析spring-boot-starter-parent
从spring-boot-starter-dependencies的pom.xml中发现一部分坐标的版本,依赖管理,插件管理都已经定义好,所以起步依赖的作用就是依赖的传递。
3.1.2 分析spring-boot-starter-web
从spring-boot-starter-web的pom.xml中发现,spring-boot-starter-web就是将web要开发使用的spring-web,spring-webMVC等坐标打包,体现了依赖传递的作用。
3.2 自动配置原理解析
@SpringBootApplication:标注SpringBoot启动类,该注解具备多种功能。(其实是一个组合注解)
- @SpringBootConfiguration:声明当前类就是SpringBoot应用的配置类,等同@Configuration
- @EnableAutoConfiguration:开启自动配置
- @ComponentScan:开启注解扫描
第4章 Spring Boot的配置文件
4.1 spring boot的配置文件类型
Spring Boot是基于约定的,许多配置都有默认值,如果要想替换默认配置的话,可以使用application.properties或者application.yml进行配置。
Spring Boot默认从Resources目录下加载配置文件。
两种文件格式区分:
application.properties文件
server.port=8888
server.servlet.context-path=demo
applicatio.yml文件
server:
port: 8888
servlet:
context-path: /demo
4.2 配置文件于配置类的属性映射方式
4.2.1 使用@Value映射
application.yml配置如下:
person:
name: zhangsan
age: 18
Controller文件如下:
@Controller
public class QuickStartController {
@Value("${person.name}")
private String name;
@Value("${person.age}") private Integer age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "springboot 访问成功! name="+name+",age="+age;
}
}
浏览器访问:localhost:8080/quick
4.2.2 使用@ConfigurationProperties映射
application.yml配置如下:
person:
name: zhangsan
age: 18
Controller文件如下:
@Controller
@ConfigurationProperties(prefix = "person")
public class QuickStartController {
private String name;
private Integer age;
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "springboot 访问成功! name="+name+",age="+age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
}
浏览器访问:localhost:8080/quick
第5章 Spring Boot整合其他技术
5.1 SpringBoot整合Mybatis
5.1.1 添加Mybatis的起步依赖
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
5.1.2 添加数据库驱动坐标
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
5.1.3 添加数据库连接信息
在application.properties中添加数据量的连接信息
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
5.1.4 创建user表
在test数据库中创建user表
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
5.1.5 创建实体Bean
public class User {
// 主键
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
//此处省略getter和setter方法 .. ..
}
5.1.6 编写Mapper
@Mapper
public interface UserMapper {
public List<User> queryUserList();
}
注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
5.1.7 配置Mapper映射文件
在src\main\resources\mapper路径下加入UserMapper.xml配置文件"
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.itheima.mapper.UserMapper">
<select id="queryUserList" resultType="user">
select * from user
</select>
</mapper>
5.1.8 在application.properties中添加mybatis的信息
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.springboot.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
5.1.9 编写测试Controller
@Controller
public class MapperController {
@Autowired
private UserMapper userMapper;
@RequestMapping("/queryUser")
@ResponseBody
public List<User> queryUser(){
List<User> users = userMapper.queryUserList();
return users;
}
}
5.1.10 测试
5.2 SpringBoot整合Junit
5.2.1 添加Junit的起步依赖
<!--测试的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
5.2.2 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MySpringBootApplication.class)
public class MapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void test() {
List<User> users = userMapper.queryUserList();
System.out.println(users);
}
}
其中,
SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以
public final class SpringRunner extends SpringJUnit4ClassRunner
@SpringBootTest的属性指定的是引导类的字节码对象
5.2.3 控制台打印信息
5.3 SpringBoot整合Spring Data JPA
5.3.1 添加Spring Data JPA的起步依赖
<!-- springBoot JPA的起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
5.3.2 添加数据库驱动依赖
<!-- MySQL连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
5.3.3 在application.properties中配置数据库和jpa的相关属性
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
#JPA Configuration:
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
5.3.4 创建实体配置实体
@Entity
public class User {
// 主键
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 用户名
private String username;
// 密码
private String password;
// 姓名
private String name;
//此处省略setter和getter方法... ...
}
5.3.5 编写UserRepository
public interface UserRepository extends JpaRepository<User,Long>{
public List<User> findAll();
}
5.3.6 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes=MySpringBootApplication.class)
public class JpaTest {
@Autowired
private UserRepository userRepository;
@Test
public void test(){
List<User> users = userRepository.findAll();
System.out.println(users);
}
}
5.3.7 控制台打印信息
注意:如果是jdk9,执行报错如下:
原因:jdk缺少相应的jar
解决方案:手动导入对应的maven坐标,如下:
<!--jdk9需要导入如下坐标-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
5.4 SpringBoot整合Redis
5.4.1 添加redis的起步依赖
<!-- 配置使用redis启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
5.4.2 配置redis的连接信息
#Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
5.4.3 注入RedisTemplate测试redis操作
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {
@Autowired
private UserRepository userRepository;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Test
public void test() throws JsonProcessingException {
//从redis缓存中获得指定的数据
String userListData = redisTemplate.boundValueOps("user.findAll").get();
//如果redis中没有数据的话
if(null==userListData){
//查询数据库获得数据
List<User> all = userRepository.findAll();
//转换成json格式字符串
ObjectMapper om = new ObjectMapper();
userListData = om.writeValueAsString(all);
//将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库
redisTemplate.boundValueOps("user.findAll").set(userListData);
System.out.println("===============从数据库获得数据===============");
}else{
System.out.println("===============从redis缓存中获得数据===============");
}
System.out.println(userListData);
}
}
下一篇: 神秘化的本地化:所有人的Php-Intl
推荐阅读
-
Spring Boot 总结
-
rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack 博客分类: rabbitmq
-
mangos 的执行模型 博客分类: c++技术随笔游戏总结整理 gsmangosrun
-
网游服务端技术总结 基于mangos源码 (一) 博客分类: 游戏c++ gameservermangos多线程
-
搭建spring mvc rest返回json,xml遇到的问题,及解决办法 博客分类: java
-
如何利用Spring Boot框架开发一个全球化的应用程序
-
Spring注解驱动开发第4讲——自定义TypeFilter指定@ComponentScan注解的过滤规则
-
Spring注解驱动开发第5讲——使用@Scope注解设置组件的作用域
-
课程Spring注解驱动学习笔记(十五)异步请求
-
Spring之面向切面