springBoot

 

一.简介

1.spring boot

spring boot 用来简化spring应用开发,约定大于配置

javaEE开发的一站式框架

 

2.微服务

微服务是一种架构风格,一个应用应该是一组小型服务,可以通过HTTP的方式进行互通

每个功能元素最终都是可独立替换和独立升级的软件单元

 

二.helloworld

1.引入相关依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--这个插件,可将应用打成jar包,方便部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </dependency>
    </dependencies>

(生成的jar包中携带了嵌入式的tomcat服务器,不需要我们在环境中部署tomcat。直接运行jar包即可)

2.编写启动类

@SpringBootApplication
public class HelloWorldMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloWorldMainApplication.class,args);
    }
}

3.探究

(1)他的真正父项目是spring-boot-dependencies。它是版本仲裁中心,以后我们的依赖默认不需要写版本(仲裁中心有的)

(2)spring-boot-starter:spring-boot场景启动器,springboot将所有功能场景抽取出来,做成一个个staters(启动器),只要在项目中引入这些stater相关场景的所有依赖都会导入进来

(3)①@springBootApplication:指明某个类是主配置类,springboot就会应用这个类的main方法来启动springboot应用。进入该注解中,会发现其它注解:

         ②@SpringBootConfiguration:springboot的配置类(内部其实就是@configuration注解)

         ③@EnableAutoConfiguration:组合注解,开启自动配置功能

            1) --->@AutoConfigurationPackage--->@Import({Registrar.class}) :将主配置类所在的包下面的组件扫描到spring容器

            2)--->@Import({EnableAutoConfigurationImportSelector.class}):导入哪些组件选择器,将需要的组件以全类名方式返回

                        会给容器中导入非常多的自动配置类(XXAutoConfiguration):给容器导入这个场景需要的所有组件,并配置好这些组件(96个)--->loadFactoryNames(factoryClass,classLoader)从类路径的META-INF/spring.factories中获取EnableAutoConfiguration指定的值

 

4.使用spring Initializer快速创建spring boot项目

(1)resources文件夹目录结构:

         ①static:保存所有的静态资源;js css images

         ②templates:保存所有的模板页面(默认jar包使用嵌入式tomcat,默认不支持jsp页面)freemarker,thymeleaf

         ③application.properties:springboot应用的配置文件,可以修改一些默认配置

 

三. springboot配置

1.springboot使用一个全局配置文件:application.properties/yml

2.YAML:标记语言,以前的配置文件大多xx.xml.YAML以数据为中心,比json,xml等更适合做配置文件(xml浪费大量数据在标签上)

3.YAML语法:(1)使用缩进表示层级关系(2)缩进不许使用Tab键,只允许使用空格,空格数目不重要,同级左侧对齐即可(3)大小写敏感(4)key:(空格)value

4.YAML支持的三种数据结构:(1)对象:键值对的集合(2)数组:一组按次序排列的值(3)字面量:单个的,不可再分的值(数字,字符串,布尔)

5.(1)对象和map的写法

      方式一:在下一行写对象属性和值的关系

friends:
     lastName: kaka
     age: 18

     方式二:行内写法

friends: {lastName: kaka,age: 20}

(2)数组

方式一:用-值表示数组中的一个元素

pets:
  - cat
  - dog
  - pig

方式二:行内写法

pets: [cat,dog,pig]

 

6.从配置文件中获取值:

<!--配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

(idea默认utf编码,properties  ascii进行编码,通过setting设置是否转成ascii码勾选)

(1)@configurationProperties(prefix = “”):将本类所有属性和配置文件相关配置绑定,支持松散语法绑定

          默认从全局配置文件中获取值。

(2)@values():不支持松散语法绑定。不支持复杂类型封装(map,list等)

(3)@propertiesSource(value = {“classpath:person.properties”}):加载指定路径配置文件

(4)@ImportResource(locations = {"classpath:beans.xml"}):导入spring配置文件

7.配置文件优先级:

根目录下config/xx.(根目录和src同级)

根目录下XX.

类路径下:config/xx.

类路径下:XX

(优先级由高到低)高优先级覆盖低优先级

四. 自动配置原理

1. springBoot启动的时候加载主配置类,开启了自动配置功能   @EnableAutoConfiguration:利用@Import({EnableAutoConfigurationImportSelector.class})给容器中导入一些组件。

2.EnableAutoConfigurationImportSelector的父类AutoConfigurationImportSelector调用selectImports()方法。方法中的内容:

(1)获取所有自动配置类

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

   其中调用下面的方法扫描所有jar包类路径下 META-INF/spring.factories。把扫描到文件的内容包装成properties对象。从properties中获取到EnableAutoConfigurtion.class(类名)对应的值(这些值就是自动配置类名),然后把它们添加在容器中

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

3.以HttpEncodingAutoConfiguration这个自动配置类为例讲解自动配置

(1)根据当前不同条件判断,决定这个配置类是否生效

//表示这是一个配置类,以前编写的配置文件一样,也可以给容器中添加组件
@Configuration  
//将配置文件中配置的值和类HttpEncodingProperties绑定起来,并把HttpEncodingProperties加入ioc容器
@EnableConfigurationProperties({HttpEncodingProperties.class})
//spring底层@Condition注解,如果满足指定条件,整个配置类里面的配置就会生效(此处为判断当前应用是否为web应用,如果是,当前配置类生效)
@ConditionalOnWebApplication
//判断当前项目有没有CharacterEncodingFilter这个类  
@ConditionalOnClass({CharacterEncodingFilter.class})
//判断是否存在某个配置
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
public class HttpEncodingAutoConfiguration {
    private final HttpEncodingProperties properties;

    public HttpEncodingAutoConfiguration(HttpEncodingProperties properties) {
        this.properties = properties;
    }
}

 

五. 日志框架

1.常见日志框架

 

 

2.志框springBoot使用日志

springBoot(slf4j+logback): Spring(commons-logging)、Hibernate(jboss-logging)、MyBatis、xxxx

统一日志记录,即使是别的框架和我一起统一使用slf4j进行输出?

如何让系统中所有的日志都统一到slf4j;

(1)、将系统中其他日志框架先排除出去;

(2)、用中间包来替换原有的日志框架;

(3)、我们导入slf4j其他的实现 ;

 

3. 总结

(1)springBoot底层使用slf4j+logback的方式进行日志记录

(2)springBoot通过中间包(类名都一致,但内部的实现编程了SLF4J)把其它日志都替换成了slf4j

 

4.日志的配置

//指定日志级别 trace debug info warn error(默认info级别)
logging.level.com.kaka=trace
//指定位置生成日志目录
logging.path=G:/springboot.log
//指定文件中日志的输出格式
logging.pattern.file=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%ms%n
//指定控制台日志输出格式
logging.pattern.condole=

 

 

六. springboot对静态资源的映射规则

1.​ webjars:以jar包的方式引入静态资源;

(1)、所有 /webjars/** ,都去 classpath:/META-INF/resources/webjars/ 找资源;

(2)、”/**” 访问当前项目的任何资源,都去(静态资源的文件夹)找映射

"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 
"/":当前项目的根路径

(3)、欢迎页; 静态资源文件夹下的所有index.html页面;被”/**”映射;==

​ localhost:8080/ 找index页面

(4)、所有的 **/favicon.ico 都是在静态资源文件下找;==

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值