SpringBoot官网链接:https://spring.io
SpringBoot简介:
1.简化Spring应用开发的一个框架
2.整个Spring技术栈的一个大整合
3.J2EE开发的一站式解决方案;
4.化繁为简 简化xml配置
5.下一代框架的起点
6. 内置tomcat/jetty 容器
….
from all in one to micro-service
使用IDEA新建项目,选择Maven选项,会创建一个空的项目,pom文件也是没有任何依赖。
在pom文件中导入依赖和插件:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.14.RELEASEversion>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
新建SpringBoot应用主程序配置类:
@SpringBootApplication // 标注主程序类,为springBoot应用
public class HelloWorldApplication {
// 启动springBoot应用
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
}
使用IDEA新建项目,选择Spring Initializr选项,选择SpringBoot版本和要用到的组件即可。
该方式会创建一个完整的SpringBoot项目,并且在pom文件中也引入了启动SpringBoot应用所需的依赖,推荐使用。
实际上和第二种方式类似。
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.14.RELEASEversion>
parent>
它的上一级是:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>1.5.14.RELEASEversion>
<relativePath>../../spring-boot-dependenciesrelativePath>
parent>
在spring-boot-dependencies中可以看到规定了很多技术的依赖版本
<properties>
<activemq.version>5.14.5activemq.version>
<antlr2.version>2.7.7antlr2.version>
<appengine-sdk.version>1.9.64appengine-sdk.version>
<artemis.version>1.5.6artemis.version>
<aspectj.version>1.8.13aspectj.version>
<assertj.version>2.6.0assertj.version>
<atomikos.version>3.9.3atomikos.version>
.........
也称为Spring Boot的版本仲裁中心;导入依赖默认是不需要写版本的。
在pom文件中,parent标签是父项目,用于管理项目的jar依赖和版本统一,
如果在父pom文件中,定义了dependencyManagement标签和dependencies标签,在子pom中如果没有声明version版本,默认继承父pom中定义的maven版本
如果子pom声明了version版本,那么将引入子pom中的jar版本
如果父pom中没有定义,只定义了,那么在子pom中就必须声明jar包的版本,否则报错
一般两种共用
spring-boot-starter-*
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring‐boot‐starter‐webartifactId>
dependency>
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所依赖的组件;
所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。
spring-boot-starter-*,各种技术的启动器,配置了默认配置,已经配置了各种依赖,支持快速启动springboot应用。
1.idea启动 XXXApplication (开发使用)
2.a 进入项目目录下:mvn spring-boot:run,b IDEA中右侧maven projects/项目名/Plugins/srping-boot: spring-boot:run
3.在项目目录下编译成jar包 mvn install 生成.jar文件 ,java -jar xxxxxxx.jar
yml形式 前缀一样合并,值和键之间有空格
yml语法 (key: value)
—Map、对象:
person:
last-name: lsisi\nlis
age: 14
或者
person: {last-name: lisi,age: 14}
—数组、List:
lists: [lili,tom]
或者
lists:
- lili
- tom
配置文件读取配置属性注入到bean中
在pom文件中导入配置文件处理器,配置文件进行绑定就会有提示
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
1.在application.properties中将多个属性一一注入到一个bean对象中
human.id=1
human.name=张三
human.map.k1=v1
human.map.k2=v2
human.lists=[123,456,789]
human.dog.name=旺财
human.dog.age=5
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "human")
@Data
@Validated
public class Human {
private Long id;
private String name;
private HashMap map;
private List lists;
private Dog dog;
@Email //邮箱格式校验,需要添加类注解 @Validated
private String email;
}
使用的时候使用@Autowired或者@Resource直接注入到容器中,即可获取封装好的对象
2.将单个属性注入到单个字段中
类上添加注解@Configuration
注入的字段上添加注解:
@Value(“${com.gaboness.test.data}”)
private String data;
如果只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果专门编写了一个javaBean来和配置文件进行映射,那么使用@ConfigurationProperties
3.@ProperSource的使用
在resource目录下新建building.properties配置文件:
building.id=1
building.name=1栋
building.floor=15
再新建一个封装building对象的类:
@Data
@Component
// 指定配置文件的路径,并不是所有的配置信息都写在application.properties中
@PropertySource(value = {"classpath:building.properties"})
@ConfigurationProperties(prefix = "building")
public class Building {
private Integer id;
private String name;
/**
* 楼宇层数
*/
private Integer floor;
}
@ImportResource的使用
导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别; 想让Spring的配置文件生效,加载进来;需要将@ImportResource标注在一个配置类上
(a)创建一个service
@Configuration
@ImportResource(locations = {"classpath:beans.xml"})
// 导入Spring的配置文件让其生效
public class HelloService {
public void hello(String humanName){
System.out.println("xx");
};
}
(b)新建一个spring的配置文件beans.xml
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd">
<bean id="helloService" class="com.gaboness.service.HelloService">bean>
beans>
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
1、配置类@Configuration——>Spring配置文件
2、使用@Bean给容器中添加组件
/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
* 在配置文件中用 标签添加组件
*/
@Configuration
public class MyConfig {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService2(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}
@ConfigurationProperties的参数绑定,可以非常方便的把资源文件中的内容绑定到对象上,支持松绑定 . - _
1.如果类是自己写的,在写的类上面,例如数据源 MyDataSource,配上注解@Component @ConfigurationProperties(prefix=“db”)或者@ConfigurationProperties(“db)
2.如果是第三方的组件,在启动类方法中添加@Bean @ConfigurationProperties(prefix=“db”)或者@ConfigurationProperties(“db)
3.如果是第三方的产品,例如druid,只需要autowired自动注入,
在开发中,每次修改方法都需要启动一次,使用热部署比较方便
准备前提:
1.导入热部署的依赖 devtools
org.springframework.boot
spring-boot-devtools
true //传递 (注:默认的值为false, 及子项目必须依赖,true表示依赖不传递)