Springboot 入门
1. SpringBoot 你听我说
优点
- 快速创建独立的运行的Spring项目以及与主流框架的集成
- 使用servlet容器,应用不需要打包成war
- starter自动依赖与版本控制
- 大量的自动配置 简化开发
- j2ee开发的一站式框架
springboot入门
- SpringBoot的主要目录
com
+- example
+- myproject
+- Application.java //由里面的main方法 来启动springboot
|
+- domain //主要写实体类entity 和数据访问层Resposity
| +- Customer.java
| +- CustomerRepository.java
|
+- service //业务代码
| +- CustomerService.java
|
+- controller //负责页面的访问控制
| +- CustomerController.java
- pom.xml文件
spring-boot-starter :核心模块 包括配置支持 日志 YAML
spring-boot-test:测试模块 包括JUNIT Hamcrest Mickito - 父项目:spring-boot-starter-parent:父项目真正管理Springboot的里面的所有依赖;Spring boot版本仲裁中心 所以默认不需要写version版本号
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
spring-boot-starter-web
:依赖 不需要写版本号
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
spring-boot-starter
:场景启用器,帮导入了web应用依赖 (springboot将所有的场景抽取出来,做成一个个的starts(启动器)只需要在项目中导入相关场景的依赖都会导入进来。)
2. SpringBoot
的配置
- 在src路径下的 application.properties 和application.yml都会当成全局配置文件,名字名固定。可以修改Springboot的默认值
- YAML:以数据为中心,比json,xml更适合做配置文件
3. yml
配置学习
server:
port: 8080
3.1 yml的基本语法
key: v
:key 与value之间有空格- 有空格的缩进来控制层级关系(只要是左对齐的一列数据都是同一层级的)(属性与值是大小写敏感的)
server:
port: 8081
address: localhost
3.2 yml的值的写法
- 字面值(普通的值 数字 字符串 布尔)
k: v
字面量直接写,字符串默认不加""
(不会转义字符串里面的字符,那么特殊字符会直接表示它的字符意思 abc\nd–>abc换行d)''
(会把特殊字符转成普通的字符串abc\n–>abc\nd)
- 对象 map(属性 值)
person:
lastname: zhangshan
age: 20
person: {lastname: zhangshan,age: 18}
- 数组(list set)用
- 值
表示一个元素的值
personList:
- zhangshan
- lisi
- wangwu
personlist: [zhangshan,lisi,wangwu]
3.3 获取yml配置文件的值
- yml
server:
port: 8081
address: localhost
person:
name: zhangshan
age: 22
boss: true
bitrh: 2017/28/45
maps: {k1: v1,k2: v2,k3: v3}
list:
- lixi
- wangwu
- zhangliu
dog:
name: xiaotian
age: 3
- 在类上加入注解
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Boolean boss;
private Date bitrh;
private Map<String ,Object>maps;
private List<Object>list;
private Dog dog;
- 在测试中利用test自带的测试
4. @value
与@ConfigurationProperties
的区别
@Configuration | @value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个一个写 |
松散语法 | 支持 FileName==File-Name | 不支持 |
SPEL表达式语言 | 不支持 | 支持 ,表达式 ${} #{} |
JSR303数据校验 @Validated | 支持 | 不支持 |
复杂类型 | 支持 | 不支持 只能简单数据类型 |
- 如果,只是在某个业务逻辑中需要获取配置文件的某项值,使用@Value
- 如果在bean中进行映射 使用 @Configuration
5.@PropertiesSource
与@ImportResource
区别
@PropertiesSource
默认指定某个配置文件 ,如果不写默认从全局文件中获取值
//告诉SpringBoot 加载某个配置文件
@PropertySource(value = "classpath:person.properties")
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
@ImportResource
:导入spring的配置文件 让配置文件内容生效 才可以导入容器的配置文件(Springboot里面没有Spring的配置文件,自己编写的配置文件,不能自动识别。因此想要Spring配置文件生效,必须要加载进来,把它@ImportResource
标注在一个配置类上面)
编写Spring的配置文件
另:SpringBoot推荐给容器中添加组件的方式 推荐使用全注解:
- 配置类===配置文件类.xml
- 使用@Bean的方式添加组件
//称为配置类 需要加上@Configuration指明当前类是一个配置类,相当于Spring的配置文件
@Configuration
public class Myconfig {
@Bean//将方法到的返回值添加到容器中,容器中组件默认的id为该方法的名字
public HelloService helloService(){
System.out.println("配置文件类@Bean给容器添加组件");
return new HelloService();
}
}
5. 配置文件占位符 ${}
来占位位置
5.1 随机数
random.value
{random.int}
random.int(10)
{random.int[1024,65536]}
5.2 占位符号获取之前的配置的值 如果没有 可以使用:指定默认的值
6. Profile
- profile是Spring对不同环境提供不同的配置功能的支持,可以激活指定参数等快速切换环境
6.1 多profile文件
- 当我们在主配置文件编写时,可以把文件配置名改成application-{profile}.properties/yml来进行动态的切换
- 默认使用application.properties配置文件
6.2 yml支持多文档块格式
- 可以通过active来指定配置文档块启动的方式
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: prod #指定属于哪个环境
6.3 激活指定profile
- 在配置文件中 指定·要激活得配置文件
spring.profiles.active=dev
- 命令行方式激活(在运行来是指定的配置文件)
--spring.profiles.active=...
7. 配置文件加载位置
- SpringBoot在启动时 会把application.properties application.yml作为默认
- springboot会从高优先级的配置一直向低优先级的配置文件全部加载 高优先会覆盖第优先级的配置文件。也会互补配置
- 可以通过
spring.config.location
来改变默认的配置文件的位置(或者在硬盘上面)(当项目打包时,可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定文件与默认加载的配置文件也可以互补配置)
8. SpringBoot的外部配置文件的加载顺序
- springboot亦可以从以下位置加载配置
- 优先加载带profile的在来加载不带profile的配置文件(由jar包外向jar包内加载)
9. 自动配置原理
1) SpringBoot启动的时候,加载主配置类,并且开启了自动配置@EnableAutoConfiguration
2) @EnableAutoConfiguration
作用:
- 利用
AutoConfigurationImportSelector
给容器中导入了一些组件 - 可以查看
selectImports()
的内容
AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
- 获取候选的配置
-每一个这样的xxxAutoConfifuration类都是容器的一个组件,都加入到容器中,用他们来做自动配置