目录
1 入门案例
1.1 环境准备
1.2 编写pom.xml
1.3 编写入口程序
1.4 编写接口
1.5 编写配置
1.6 快速部署
1.6.1 打jar包
1.6.2 部署
1.7 访问接口
2 全注解开发
2.1 常用注解
2.2 属性绑定注解
2.2.1 注册组件
2.2.2 @ConfigurationProperties(prefix="teacher")
2.2.3 @EnableConfigurationProperties
3 整合项目流程
3.1 导依赖
3.2 找redis的自动配置类
3.3 找redis的配置属性类
SpringBoot的底层原理仍然是Spring,使用SpringBoot框架带来如下优势
(1) 快速开发
能快速创建一个生产级别的Spring应用
(2) 简化整合
SpringBoot提供了可选的场景启动器(starter),整合项目只需要引入对应的场景启动器(例: web-starter、mybatis-starter等)即可
(3) 简化配置
遵循"约定大于配置"的规则,只要引入了对应的"场景启动器(starter)",则该启动器的所有配置都按默认配置(但也可以自定义配置,只需要修改配置文件即可)
集中化管理配置:所有配置都写在同一个文件中
(4) 简化部署
SpringBoot直接嵌入了Tomcat、Jetty、Undertow,因此不需要再将项目打war包后放在Tomcat中部署,只需要将项目打jar包后放在java环境中用java -jar命令即可
(5) 简化监控
SpringBoot自带一些指标监控、健康检查(k8s检查应用是否存活)
(6) 简化运维
SpringBoot可以采用外部化配置(将配置文件放在jar包外面),可以直接在外部修改配置文件后重启jar包(java -jar命令)即可,规避了war包方式需要重新打war包重新部署的弊端
1 入门案例
1.1 环境准备
(1) SpringBoot 3+
(2) JAVA 17+
(3) maven 3.6+
(4) Tomcat 10+
1.2 编写pom.xml
继承SpringBoot的starter
添加web的starter依赖
<!--所有SpringBoot项目都必须继承自spring-boot-starter-parent-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.4</version>
</parent>
<!--依赖不用写版本号,因为版本号已经在此项目的父项目spring-boot-starter-parent的父项目spring-boot-dependencies中用"<dependencyManagement>依赖管理"定义好了-->
<!--也可以利用maven的"就近原则",使用自定义的依赖版本-->
<dependencies>
<!--web开发的场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--redis场景启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!--SpringBoot打包插件,让应用支持直接jar包部署-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
1.3 编写入口程序
入口程序只有一个,只有这个类的所在的包及其子包才会被Spring扫描到,即默认的@ComponentScan
也可以用@SpringBootApplication(scanBasePackages = "xyz.aboluo")或@ComponentScan("xyz.aboluo")来明确要扫描的包
/**
* 启动SpringBoot项目的主入口程序
*/
@SpringBootApplication(scanBasePackages = "xyz.aboluo") //标记这是一个SpringBoot应用
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext iocContext = SpringApplication.run(MainApplication.class, args);
}
}
1.4 编写接口
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "{'code':200,'msg':'hello,world!'}";
}
}
1.5 编写配置
在application.properties配置文件中自定义相关配置
配置文件的所有配置项是和某个类的对象的属性一一绑定的,这种类叫做配置属性类
例:ServerProperties.class类绑定了Tomcat服务器有关的配置(比如server.port)
MultipartProperties.class类绑定了文件上传相关的配置
#自定义端口
server.port=8083
#项目地址
server.servlet.context-path=/sb
#最大文件大小
spring.servlet.multipart.max-file-size=20MB
1.6 快速部署
1.6.1 打jar包
1.6.2 部署
在jar包所在目录,用cmd进入Window控制器,直接用java -jar jar包命令执行jar包
1.7 访问接口
2 全注解开发
SpringBoot摒弃了xml的配置方式,改为全注解驱动
2.1 常用注解
@Configuration、@SpringBootConfiguration(与@Configuration功能一样)、@Bean、@Scope、@Component、@Controller、@Service、@Repository、@Import
上述注解介绍可以看这篇文章
2.2 属性绑定注解
将Spring容器中已经注册的组件(Bean)的属性值和配置文件的配置项的值进行绑定
2.2.1 注册组件
可以用@Component等注解注册,也可以在Spring配置类中用@Bean注解注册
2.2.2 @ConfigurationProperties(prefix="teacher")
将配置文件中所有teacher前缀的配置项的值与有此注解的组件的属性进行绑定(需要2者同名才可以绑定)
注解可以用在Bean类上,也可以用在Spring配置类@Bean方法上
此时通过@Component注册的组件生效,通过@Bean注册的组件也生效
2.2.3 @EnableConfigurationProperties
用在Spirng配置类(@Configuration或@SpringBootConfiguration)上的注解,并且还是需要配合@CdonfigurationProperties一起使用
作用1: 将对应的类注册进SpirngIOC容器(无需再写@Component或@Bean)
作用2: 并且用配置文件中的特定前缀的配置型的值与有此注解的组件的属性进行绑定
使用原因:因为SpringBoot只扫描自己主程序所在的包,就算引入的第三方包中的类用了@ConfigurationProperties注解也无法进行属性绑定,因此此注解主要是针对导入的第三方包而存在的
@SpringBootConfiguration
@EnableConfigurationProperties({Dog.class, Cat.class})
public class SpringConfig {
}
#application.properties配置文件
dog.name=旺财
dog.age=3
dog.like=骨头
cat.name=小猫咪
cat.age=2
cat.like=猫粮
@ConfigurationProperties(prefix = "dog")
public class Dog {
private String name;
private Integer age;
private String like;
}
@ConfigurationProperties(prefix = "cat")
public class Cat {
private String name;
private Integer age;
private String like;
}
@SpringBootApplication(scanBasePackages = "org.example")
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext iocContext = SpringApplication.run(MainApplication.class, args);
Dog dog = iocContext.getBean(Dog.class);
Cat cat = iocContext.getBean(Cat.class);
System.out.println(dog); //Dog{name='旺财', age=3, like='骨头'}
System.out.println(cat); //Dog{name='小猫咪', age=2, like='猫粮'}
}
}
3 整合项目流程
以整合redis为例
3.1 导依赖
3.2 找redis的自动配置类
根据规则,某个项目的自动配置类一般是xxxxxAutoConfiguration,因此redis的配置类就是RedisAutoConfiguration
3.3 找redis的配置属性类
根据规则,某个项目的配置属性类一般是xxxxxProperties
从redis的自动配置类的@EnableConfigurationProperties注解可知它的配置属性类是RedisProperties
从配置属性类的@ConfigurationProperties注解可知在自己项目的配置文件中要写的前缀是"spring.data.redis"
从这个配置属性类中得到默认配置: 默认主机地址是"localhost",默认端口号是"6379"