目录
@SpringBootConfiguration标注在某个类上 ,表示这是一个springboot配置类
一背景介绍:
1.1
简化Spring应用开发的一个框架;
整个Spring技术栈的一个大整合;
J2EE开发的一站式解决方案;
二、好处用途
1 自动配置 不需要在关注各个框架的整合配置 springBoot 全部已经配置好了
2起步依赖 我们在需要使用某个框架的时候,直接添加这个框架的启动器依赖即可 ,不需要在关注jar包的冲突和整合
设计目的:用来简化Spring 应用的初始化搭建以及开发过程
从最根本上来讲,Spring Boot就是一些库的集合,它能够被任意项目所使用。它使用“习惯优于配置”的理念让你的项目快速运行起来。spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架,总结一下及几点:
(1)为所有Spring开发提供一个更快更广泛的入门体验。
(2)零配置。无冗余代码生成和XML强制配置,遵循“约定大于配置”。
(3)集成了大呈常用的第三方库的配置,Spring Boot应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。
(4)提供一系列大型项目常用的非功能性特征。如嵌入服务器等。
三、环境搭建
一、MAven设置:
给maven 的settings.xml配置文件的profiles标签添加
二、IDEA设置
三、实践
第一个springBoot程序 helloworld
(1)实验步骤
1、创建一个maven工程 (jar)
2、导入spring Boot相关的依赖
3、编写一个主程序:启动spring boot应用
//来标注一个主程序类
@SpringBootApplication
public class Springboot01helloworldApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot01helloworldApplication.class, args);
}
}
4编写相关的Controller 、Service
/**
* @author chao
* @create -07-2022-07-07-16:55
*/
@ResponseBody
//这个类的所有方法返回的数据写个浏览器
@Controller
//@RestController
public class HelloController {
@RequestMapping("/hello") //发送http://localhost:8080/hello
public String hello(){
return "hello world controller";
}
}
5、运行主程序测试
6简化部署
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
四、helloworld 探究
spring-boot-starter : spring-boot场景启动器﹔帮我们导入了web模块正常运行所依赖的组件;
Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
springboot 将所用的功能场景都抽取出来,做成一个个starters(启动器) 只需要在项目中引入这些starters依赖包就会自动导入进来
@SpringBootConfiguration
标注在某个类上 ,表示这是一个springboot配置类
@Configuration
配置类 --配置文件 配置类也是一个组建 -@Component
@EnableAutoConfiguration
开启自动配置功能: 以前我们需要配置的东西,Spring Boot帮我们自动配置;@EnableAutoConfiguration告诉
SpringBoot开启自动配置功能;这样自动配置才能生效﹔
@AutoConfigurationPackage
自动配置包:@lmporIAutoConfigurationPackages.Registrar.class) :Spring的底层注解@lmport,给容器中导入一个组件;AutoConfigurationpackage
@ConfigurationProperties(prefix = "person") //默认从全局配置文件获取值
@PropertySource(value = {"classpath:person.properties"}) 加载指定的配置文件
ImportResource 导入spring配置文件 让配置文件里面的内容生效
springBoot里面没有Spring的配置文件 我们自己编写的配置文件也不能自动识别 想让spring的配置文件生效加载进来需要引入ImportResource注解
在主配置文件写上
@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class SpringBoot02ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot02ConfigApplication.class, args);
}
}
springBoot推荐给容器中添加组建的方式:
1配置类
/指明当前类是一个配置类
@Configuration
public class MyAppConfig {
}
//指明当前类是一个配置类 不再使用//@ImportResource(locations = {"classpath:beans.xml"})方式
五、配置文件
2、YAML基本语法
3、例子
spring:
datasource:
username: root
password:
3、配置文件值·注入 yml
配置文件 properties
#spring.profiles.active=dev person.last-name=张三${random.uuid} person.age=${random.int} person.birth=217/12/12 person.boss=false person.map.k1=v1 person.map.k2=v2 person.lists=a,b,c person.dog.name=${person.hello:hello}_dog person.dog.age=15 person.dog=dog
javabean程序
将配置文件中的每一个属性的值 映射到这个组建中
* ConfigurationProperties
*/
//@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person") //默认从全局配置文件获取值
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String ,Object> map;
private List<Object>lists;
private Dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Boolean getBoss() {
return boss;
}
public void setBoss(Boolean boss) {
this.boss = boss;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<Object> getLists() {
return lists;
}
public void setLists(List<Object> lists) {
this.lists = lists;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", boss=" + boss +
", birth=" + birth +
", map=" + map +
", lists=" + lists +
", dog=" + dog +
'}';
}
}
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value ;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
特殊属性注解
一、加载自定义配置文件
二、给容器中添加组建
**
* @author chao
* @create -07-2022-07-08-9:38
*/
//指明当前类是一个配置类 不再使用//@ImportResource(locations = {"classpath:beans.xml"})方式
@Configuration
public class MyAppConfig {
//将方法返回值添加到容器中
@Bean
public HelloService helloService(){
System.out.println("给容器中添加组建了");
return new HelloService();
}
}
三。占位符
#spring.profiles.active=dev
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=217/12/12
person.boss=false
person.map.k1=v1
person.map.k2=v2
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
person.dog=dog
四、多个profile配置文件
我们在主配置文件编写的时候,文件名可以是application-{profile}.properties/yml默认使用application.properties的配置;
五、配置文件加载位置以及优先级
例如我当前项目
我们在主配置文件编写的时候文件名可以是application-{profile}。properties
3方式三 ;虚拟机参数
六、自动配置文件原理
一但这个配置类生效;这个配置类就会给容器中添加各种组件﹔这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;
精髓∶
1 ).SpringBoot启动会加载大量的自动配置类
2)、我们看我们需要的功能有没有SpringBoot默认写好的自动配置类;
3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件有,我们就不需要再来配置了)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值;