目录
springboot与springmvc,springcloud关系
@PropertySource(value={"classpath:jdbc.properties"})+@Value
@ConfigurationProperties(perfix="persion")
@ImportResource(classpath:xxxx.xml)
上手麻烦,很多框架的初学者根本不知道要从何开始搭建一个项目,对初级开发者很不友好
配置繁杂,使用一个框架,或者向项目中集成一个插件,要专门学习配置文件,哪怕是细微的配置错误,也会导致无法使用,而且排查起来特别困难,对初级开发者很不友好
项目需要单独配置容器,编写好的项目还需要自己配置Tomcat运行,又多了一个额外的步骤,一旦配置有问题,又可能要折腾很久,对初级开发者很不友好
spring组件的一站式快速开发框架,避免了众多繁琐的配置,极大的简化了开发者的学习成本,项目搭建成本,对初级开发者十分友好
内置tomcat,jetty容器,不再需要开发者打成war包部署到容器中,只要打成一个独立的jar就可以独立运行,所有依赖均在一个jar包中
注解代替xml是spring4.x的核心功能,springboot的配置文件只有一个application.yml,开发者不再需要配置一大堆的xml,properties
使用一个第三方框架的配置变得十分简单
springboot启动器会将一组依赖打包到一起,作为一个启动器,比如spring-boot-starter-web包含了web开发需要的spring-web,springmvc等依赖
springboot可以监控服务和应用
1.springboot是spring组件的一站式快速开发框架
2.springmvc是基于spring的mvc框架
3.springboot是springcloud的基础,springcloud是一站式微服务框架
1.打开IDEA,创建新项目,选择Spring Initializr,填写路径和项目名,选择maven作为构建工具,选择JDK版本
2.选择初始化项目时要导入的依赖,这里我们因为是简单演示,只选择了spring-web,有需要可以挨个点开看看哪些是可能用到的,可以一并导入,点击确定即创建项目
3.配置SDK和maven,等待maven依赖导入完成即可,到这一步,这个springweb项目就创建完成了,我们完全没有配置什么spring文件,springmvc文件
4.启动项目
点击main方法的启动按钮,或者使用IDEA上面的启动按钮,就可以使用springboot内置的tomcat容器来启动我们的项目,我们完全没有自己手动打包,配置tomcat去运行
5.看看我们的pom文件,有一个web项目启动器
spring-boot-start-parent
封装好了版本号,提供版本控制,导入它以后,导入其他依赖时不再需要配置version
spring-boot-starter-web
springweb核心组件,包含了web项目所需所有核心依赖
原理是maven依赖的子父关系
springboot把需要的一类依赖封装好,导入一个依赖就可以应用
-
org.springframework.boot -
spring-boot-starter-parent -
3.1.5 -
-
-
org.springframework.boot -
spring-boot-starter-web -
-
- 点进去会发现包含多个依赖
-
-
org.springframework.boot -
spring-boot-starter -
3.1.5 -
compile -
-
-
org.springframework.boot -
spring-boot-starter-json -
3.1.5 -
compile -
-
-
org.springframework.boot -
spring-boot-starter-tomcat -
3.1.5 -
compile -
-
-
org.springframework -
spring-web -
6.0.13 -
compile -
-
-
org.springframework -
spring-webmvc -
6.0.13 -
compile -
1.Spring1.X完全通过xml配置
2.Spring2.X可以使用注解对Bean进行声明和注入
1.应用的基本配置用xml
2.业务逻辑中的开发用注解,如service中@Autowire
3.Spring3.X开始提供了Java配置方式,可以通过Java代码配置
4.Spring4.X推荐使用Java配置方式
Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置
作用于类上,标记该类是一个配置类,相当于以前的xml配置文件
作用于方法上,相当于xml中的,将方法的返回值交由spring容器管理
Spring Boot的核心注解,是一个复合注解,包含@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解
scanBasePackages:指定扫描包,通常不指定
exclude:指定不扫描的包,通常不指定
后缀是Configuration,没错,这个注解继承了@Configuration,配置注解
开启自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置所需要的配置项
如:我们添加了spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC
容器扫描自动装配,默认扫描该注解所在类的同级目录及子目录,因此通常把启动类放在项目根目录下
可以通过basePackages属性配置扫描的目标包,但通常不会这么做
可以通过excludeFilters属性配置不扫描的包
spring配置文件为yml或者properties,通常使用yml
springboot全局配置文件可以是application.yml或application.properties,默认放在resources目录下,通常是application.yml
相比以往的配置方式,采用树形结构,更符合编码习惯,有上千个配置可供选择
我们不在此处讨论框架的配置,只讨论自定义值的配置
缩进+冒号后空格
- name: zhangsan
- 注意:
- 字符串默认不用加上单引号或者双引号
- 使用双引号需要考虑转义,单引号不需要考虑转义
- "zs\n ls" zs换行ls
- 'zs\nls' zs\nls
- key:
- key: value
- key: value
- 或者 key:{key: value,key: value}
- Person:
- name: zhangsan
- age: 20
- key:
- - value
- - value
- 或者key: [value,value]
- 注意:
- 用 - 值表示数组中的一个元素
-
- PersonList:
- - zhangsan
- - lisi
- student:
- -name: zhangsan
- age: 18
- -name: lisi
- age: 17
- 或者:student: [{name: zhangsan,age: 18},{name: lisi,age: 17}]
某些时候,我们有可能针对某个类必须要用到单独的配置文件,把配置的值注入到Bean中,此时可以使用@PropertySource+@Value
1.作用在类上,在该类的范围内,读取指定位置的配置文件
2.springboot默认只会加载application.yml/application.properties
3.配置可以为多个,用逗号隔开
value={"classpath:jdbc.properties","xxx","xxx"}
4.配置文件有可能找不到,设置ignoreResourceNotFound=true,允许配置文件缺失
@PropertySource(value={"classpath:jdbc.properties"}, ignoreResourceNotFound=true)
@Value("${jdbc.url}"),作用在变量上,获取配置项的值给定变量
- @PropertySource(value={"jdbc.properties"}, ignoreNotFound=true)
- @Value("${jdbc.url}")
- private String jdbcUrl;
- @Value("${jdbc.driverClassName}")
- private String jdbcDriverClassName;
- @Value("${jdbc.username}")
- private String jdbcUsername;
- @Value("${jdbc.password}")
- private String jdbcPassword;
用来简化@PropertySource+@Value
通常作用在配置类上,表示属性自动装配,perfix前缀+该类的属性名,去配置文件中找对应的配置值装配到对应的属性上
注意:
前缀的单个单词首字母不能大写
如果该类的变量上同时使用了@Value,以ConfigurationProperties为准
使用对象中的数据,要在具体的方法中使用,而不能在类中直接使用,涉及依赖注入的顺序
- login
- username: zhangsan
- password: 123456
-
- @Configuration
- public class loginConfig {
- private String username;
- private String password;
- }
由于springboot只会加载yml和properties,当某个类下必须读取xml配置,就要使用@ImportResource注解
如果在启动类上使用,就可以读取原本的applicationContext.xml作为项目启动的配置文件
通常不会这么做
功能和xml的import一致,其实就是将配置分类,通过不同的配置文件进行配置
pom启动器依赖包
SpringBoot提供了绝大多数开发场景的starter pom,只要导入就能通过自动配置消除繁琐的配置