有了自动配置类,就免去我们手动配置的麻烦,SpringBoot启动时,从类路径下spring-boot-autofigure包中的META-INF/spring.factories中获取EnableAutoConfiguration的值(各种配置类的全限定类名),作为自动配置类导入容器中,那么自动配置类生效帮我们自动配置,其真正配置类也在这个包下
3. 快速创建Spring应用(创建向导)
Spring Initializer
主程序生成好了
resources中包括
static保存所有的静态资源
templates保存模板页面
application.properties:springboot的配置文件,这里可修改默认的
4. 配置文件(名字固定)
application.properties(默认使用,优先级高)
application.yml
4.1 yml格式 server: port: 8080 "" : 特殊字符不会转义 '' : 特殊字符会转义 对象、Map: friends: lastName: howl age: 20 friends: {lastName: howl,age: 20} 数组: pets: - cat - dog pets: [dog,cat,pig]
4.2 配置文件yml获取组件的值 // 组件必须的 @Component @ConfigurationProperties(prefix = "person") // 默认从主配置文件获取 public class Person{ private int age; xxxxxx } person: age: 20 name: Howl <!-- 导入配置文件处理器,配置文件yml绑定属性时会有提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
properties也一样
乱码:idea使用utf-8,要在编译器里面设置,编译转换ascii码 person.age=20 person.name=哈哈哈4.3 从配置文件中获取值
@Value(Spring注解)
4.4 读取外部文件与xml配置文件 @PropertySource(value = "classpath:person.yml") @ImportResources(locations = {"classpath:bean.xml"}) //读取是spring的<bean>标签的文件,放在主程序入口处
4.5 注解实现配置类 @Configuration public class Myconfig { @Bean public HelloWorld helloService(){ return new HelloWorld(); } }
4.6 配置文件随机数与占位符 ${random.value} person.age=20 person.name=${person.age:默认值}_Howl
4.7 多环境支持
4.7.1 多profile文件 主配置文件编写时,文件规定可以是 application-{profile}.properties/yml eg:配置文件命名为: application-dev.properties application-prod.properties 主配置文件中加入: spring.profiles.active=dev激活dev的配置文件
4.7.2 yml文档块 server: port: 8081 spring: profiles: active: dev --- server: port: 8082 spring: profiles: dev --- server: port: 8083 spring: profiles:prod
4.7.3 配置文件加载位置 application.properties application.yml 优先级由高到低,优先采用高的,但也会互补 /config / classpath:/config classpath:/
5. 自动配置原理
1)SpringBoot启动的时候加载主配置类,开启了自动配置功能:@EnableAutoConfiguration
2)@EnableAutoConfiguration 作用:(去aotuconfigure包的META-INF中获取全限定类名,再将对应的类加载进来)
利用@Import的 AutoConfigurationImportSelector.class选择器给容器导入一些组件
这个选择器中的selectImports()方法负责加载
3)每一个加载的自动配置类进行自动配置功能
4)举例一个配置类的内部的注解(根据不用条件判断配置类是否生效)
@Configuration 4.1 @EnableConfigurationProperties({CacheProperties.class}) // .class是个properties映射成bean对象(但头部没有加@Component注解),要使其生效即要加入bean容器 @ConditionalOnClass({CacheManager.class}) // 内部是Spring注解@Conditional,满足条件配置类生效 其还有有参构造器,将对应的XXXproerties注入到内部变量中:4.1)所有在配置i文件能配置的属性都是在XXXProperties类中封装着,配置文件能配置什么,就看对应的XXXProperties
5)所以我们能在主配置文件中配置什么,完全是是看xxxproperties的
Debug模式 # 主配置文件中 # 开启SpringBoot的debug模式,会显示启用的自动配置类 debug=true
6. 日志框架 日志抽象层(类似于JDBC) 日志实现
SLF4j、jbossing-logging、JCL(Commons-logging) JUL(Java.util.logging)、Log4j、Log4j2、Logback
Spring框架默认JCL(导包common-logging)
SpringBoot选用SLF4j和logback
应该调用日志抽象层
使用
导入SLF4j抽象层和Logback实现类
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } } Logger logger = LoggerFactory.getLogger(this.getClass()); logger.trace("这时trace日志"); logger.debug("这时debug日志"); //日志级别 logger.info("这时info日志"); logger.warn("这时warn日志"); logger.error("这时error日志");查看默认配置
去springboot第一个包中查看properties文件, 去去springboot-autoConfiguration看配置类高级特性
自己写的logback.xml中可以加 <springProfile> </springProfile> 表示只在某个环境生效7. Web开发