1.sprongboot介绍
SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC,data-jpa等常用的框架封装到了一起,帮助你隐藏这些框架的整合细节,实现敏捷开发。
核心思想: 约定大于配置
例如:
我们需要搭建一个spring web项目的时候就不需要在去繁琐的配置web.xml,加载spring和spring mvc, 配置数据库连接、配置spring事务, 配置加载配置文件的读取,开启注解等
有了SpringBoot后,只需要导入xxx-start依赖,写上Controller-service-Mapper代码,启动就行.
SpringBoot就是一个工具集.
官网:Spring Boot
SpringBoot特点:
-
SpringBoot项目不需要模板化的配置。
-
SpringBoot中整合第三方框架时,只需要导入相应的starter依赖包,就自动整合了。约定大于配置。
-
SpringBoot默认只有一个.properties的配置文件(现在yml形式比较常用),不推荐使用xml,后期会采用.java的文件去编写配置信息。
-
SpringBoot工程在部署时,采用的是jar包的方式,内部自动依赖Tomcat容器,提供了多环境的配置。
-
后期要学习的微服务框架SpringCloud需要建立在SpringBoot的基础上。
2.快速入门
2.1.选择构建项目的类型
2.2.指定springboot版本和需要的依赖
ps: 2.7.13版本创建完项目会报错alimaven找不到依赖,手动将pom文件中版本改成2.7.2
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/>
</parent>
2.3.导入依赖[会自动导入的]
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.4.编写controller
@RestController
public class Demo01TestController {
@GetMapping("/test")
public String test(){
return "Hello SpringBoot!";
}
}
2.5.测试
主类点击启动类启动 [注意: 启动类要跟其他包平级才行]
启动成功效果和浏览器显示效果
3.springboot的目录结构
3.1.pom.xml文件
-
指定了一个父工程: 指定当前工程为SpringBoot,帮助我们声明了starter依赖的版本。
-
项目的元数据:包名,项目名,版本号。
-
指定了properties信息:指定了java的版本为1.8
-
导入依赖:默认情况导入spring-boot-starter,spring-boot-starter-test
-
插件:spring-boot-maven-plugin
3.2.src目录
-src
-main
-java
-包名
启动类.java # 需要将controller类,放在启动类的子包中或者同级包下,否则需要使用@ComponentScan 注解,并指定扫描的包即可
-resources
-static # 存放静态资源的,js,css,html
-templates # 存储模板页面的,Thymeleaf,jsp,freemarker
application.properties # SpringBoot提供的配置文件,后缀支持2种:1.properties 2.yml(推荐)
-test # 只是为了测试用的
4.springboot常用注解[重点]
4.1.@Configuration和@Bean
-
之前使用SSM去开发时,在xml文件中编写bean标签,但是SpringBoot不推荐使用xml文件。
-
@Configuration注解相当于beans标签
-
@Bean注解相当于bean标签
-
id=“方法名 | 注解中的name属性(优先级更高)”
-
class=“方法的返回结果”
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class User {
private int id;
private String username;
private String password;
}
//===================================================
@Configuration // 代表当前类是一个配置类
public class UserConfig {
@Bean // 构建一个实例,放到spring容器中
public User user(){
return new User(1,"张三丰","123456");
}
/*
<beans ....> @Configuration
<bean id="user1" class="com.qf.firstspringboot.entity.User" />
</beans>
*/
}
// ==================================================
// 就可以从容器中获得该对象
@RestController
public class TestController {
@Autowired
private User user;
@GetMapping("/bean")
public User testBean(){
return user;
}
}
4.2.@SpringBootApplication
@SpringBootApplication就是一个组合注解:
-
@SpringBootConfiguration就是@Configuration注解,代表启动类就是一个配置类。
-
@EnableAutoConfiguration帮你实现自动装配的,SpringBoot工程启动时,运行一个SpringFactoriesLoader的类,加载META-INF/spring.factories配置类(已经开启的),通过SpringFactoriesLoader中的load方法,以for循环的方式,一个一个加载。
-
好处:无需编写大量的整合配置信息,只需要按照SpringBoot提供好了约定去整合即可。
-
坏处:如果说你导入了一个starter依赖,那么你就需要填写他必要的配置信息。
-
手动关闭自动装配指定内容:@SpringBootApplication(exclude = QuartzAutoConfiguration.class)
-
-
@ComponentScan就相当于<context:component-scan basePackage=“包名” />,帮助扫描注解的
5.SpringBoot常用配置
5.1.配置文件格式
SpringBoot的配置文件,文件名必须是application
,格式支持properties
和yml
。
更推荐使用yml文件格式:
-
yml文件,会根据换行和缩进帮助咱们管理配置文件所在位置
-
yml文件,相比properties更轻量级一些
-
K: V 表示一对键值对(冒号: 后一定有一个空格)
-
以空格的缩进来控制层级关系;只要是左对齐的都是属于一个层级的数据
-
属性和值大小写敏感.
yml文件的劣势:
-
严格遵循换行和缩进
-
在填写value时,一定要在: 后面跟上空格
配置文件的作用
-
修改SpringBoot的配置的默认值:
比如默认启动的Tomcat的端口是8080,可以修改为8081
-
配置文件的位置
一般默认都是放在resources/下
5.2.多环境配置
实际开发中,有三种环境:
1.开发环境-程序员日常开发所需
2.测试环境-项目的集成测试
3.生产环境-最终项目部署的环境,真实环境
SpringBoot支持多环境的配置。只需要根据环境需要,编写多个配置文件,通过配置属性选择使用哪个环境
使用步骤:
1.多环境的配置文件命名:application-环境名.yml
2.在总文件application.yml中通过属性:spring profiles active 环境名
ps:也可在部署工程时,通过 java -jar jar文件 --spring.profiles.active=环境
5.3.获取配置文件信息
解释: 将yml配置的值,赋值给对应的类
方案:
-
方案一: @ConfigurationProperties [开发中不常用, 源码中常用]
-
方案二: @Value [比较简单的, 常用]
方案一: @ConfigurationProperties
# 示例
password:
slat: sfgagsdgjiajg
count: 666
@Data //get和set
@Component //表示是spring中的类
@ConfigurationProperties(prefix = "password") //配置属性, password(yml中的前缀)
public class PasswordProperties {
private String slat;
private int count;
}
@RestController
public class Demo03TestReadConfigController {
@Resource
PasswordProperties passwordProperties;
@RequestMapping("/value6")
public void test6(){
System.out.println(passwordProperties.getSlat());
System.out.println(passwordProperties.getCount());
}
}
方案二: @Value
// yml配置文件内容是一样的
// 不一样的是Java类中使用的注解
@RestController
public class Demo03TestReadConfigController {
@Value("${password.slat}")
private String slat; //加盐
@Value("${password.count}")
private Integer count; //数量
//测试
@RequestMapping("/value")
public void test3(){
System.out.println(slat);
System.out.println(count);
}