• springBoot


    依赖

    • 引入父工程,父工程里会检测个人编写的配置文件,父工程引用了父工程:spring-boot-dependencies,其限定了所需要的jar的一些版本,实现jar版本的管理

    自动配置

    • @SpringBootApplication注解包含
      • @SpringBootConfiguration注解 包含@Configuration 即最终配置注解
      • @EnableAutoConfiguration 自动配置 包含@Import({AutoConfigurationImportSelector.class}) 即引入了配置类
        - AutoConfigurationImportSelector类:加载配置
        - 同配置类包下:META-INF/spring.factories文件 -》ServletWebServerFactoryAutoConfiguration类引入了 -》ServerProperties类通过注解 -》@ConfigurationProperties加载默认配置 通过其josn文件
      • @ComponentScan 组件扫描 即自动扫描@SpringBootApplication注解同级及子孙包

    @SpringBootApplication即可具备以上三个注解作用。

    修改配置

    父工程扫描文件

    • 要修改配置只要覆盖默认配置即可 如:
    # 服务器端口
    server.port=8081
    #当前web应用的名称
    server.servlet.context-path=/demo1
    

    yml语法

    server:
      port: 8082
    
    name: zhangsan
    
    #对象配置
    person:
      name: zhangsan
      age: 18
      addr: beijing
    
    # 行内配置
    person: {name: zhangsan,age: 18,addr: beijing}
    
    # 配置数组
    city:
      - beijing
      - tianjin
      - chongqing
      - shanghai
    # 或者
    city: [beijing,tianjin,chongqing,shanghai]
    
    # 配置数据、集合(对象数据)
    student:
      - name: tom
        age: 18
        addr: beijing
      - name: lucy
        age: 17
        addr: tianjing
    # 或者
    student: [{name: tom,age: 18,addr: beijing},{name: lucy,age: 17,addr: tianjing}]
    
    # map配置
    map:
      key1: value1
      key2: value2
    

    获取配置文件所定义的属性

    • @Value("${配置名}")
    @Value("${name}")
    private String name;
    @Value("${person.addr}")
    private String addr;
    
    • @ConfigurationProperties(prefix = "配置前缀") + getxxx()方法
    @ConfigurationProperties(prefix = "person")放在类上
    
    private String name; //定义属性
    
    提供get方法:
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    
    • @EnableConfigurationProperties(属性类字节码对象) 可以载入属性类

    整合其他技术

    • 整合junit测试
      • 引入启动器
      • 编写测试类,测试类需添加注解
    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = 启动类字节码文件)
    

    SpringBoot

    一、配置文件

    • 可以导入配置文件处理器,这样在配置文件和实体类可以建立映射
    • @ConfigurationProperties(prefix="xxx") 通过前缀把配置中的信息绑定到实体类中
    • @Value("${xxx}") 绑定配置文件中属性到实体类属性
    • @PropertySource(value=-"classpath:xxxx.xx") 引入属性文件(即导入spring配置文件)
    • @ImportResource("locations={classth:xxx.xml,xxxx.xxx,...}") 自己配置的文件不生效,通过注解引入配置文件,让其生效

    多配置文件时,激活指定的配置文件(激活程序某一种环境):

    • properties:
      • 先给配置文件名称添加标识:如:application-dev.properties
      • 在默认配置文件中指定配置文件: 如:spring.profiles.active = xxx
      • 当启动后其会使用application-dev.properties这个配置文件了
    • yml: yml支持多文档块方式,即通过"---"来分隔表示不同的配置文件。修改:在默认的文档块中指定

    配置文件加载顺序:先加载带后缀的,先加载外部的后加载内部的。

    二、自动配置

    springboot就是为了减去繁杂的配置而生,个人认为一切配置都有一个与之对应的配置类,就是把配置文件都转换成了配置类来进行操作。

    • 1-开启:@EnableAutoConfiguration --》
      • 利用@EnableAutoConfigurationImportSelector给容器中导入组件 --》
      • springFacrorieaLoader.loadFacroryNames() 扫描所有jar包装路径下MERA-INF/spring.facrories
    • xxxAutoConfigurationl类都是容器中一个组件(即类),都加入到了容器中用来做自动配置
      • xxxProperties是通过前缀封装了配置文件中属性的类,属性与配置文件中相关配置绑定
    • 使用springboot,即可以看其有没有自动配置类,【有&不满意】可以通过配置文件覆盖来修改【没有】自己编写配置类并添加到配置类,自己编写的配置类还可以和配置文件绑定来做配置。

    **派生注解:@ConditionalXXX **

    • 作用:必须是该注解指定的条件成立,才能给容器中添加组件,添加了组件配置里面配置的内容才能生效
    • 如在某个配置类上加了这个注解:@conditionalOnClass({xxx.class,xxx.class,...}) 即表示:项目中有这些类,配置才能生效

    自动配置类必须在一定的条件下才能生效:

    配置文件中配置:debug=true 即开启springboot的debug模式
    在控制台就可以知道哪些类用了自动配置,哪些类没有用自动配置(因为配置的条件不满足)

    三、日记处理

    springboot底层是spring框架
    spring默认用jcl日记框架
    而springboot用的是slf4j抽象层和logback实现层。

    日记门面(即抽象层或接口层)

    • jcl(jakarta commons-logging)
    • slf4j(simple logging facade for java)
    • jboss-logging
    • ...

    日志实现

    • log4j
    • jul(java.util.logging)
    • log4j2
    • logback
    • ...

    可以说logback是对log4j的完善升级。

    日志的使用

    • 接口搭配对应的实现类

    程序--》接口层面--》对应的实现类

    • 接口搭配非对应实现类,需要通过适配器类来转换

    程序--》接口层面--》适配器类层--》非对应实现类

    遗留问题:框架中使用了其他框架,其他框架各自使用了不同日志,如何统一日志记录,使用同一日志框架进行输出呢?
    解决:即通过适配器类来偷换jar实现包,以完成统一框架输出

    • 1-系统中其他日志框架先排除出去
    • 2-使用中间包来替换原有日志框架
    • 3-导入所使用日志接口的实现类

    springboot日志关系(使用)

    • 1-springboot底层使用slf4j + logback的方式进行日志记录
    • 2-springboot把其他日志都替换成了slf4j 接口来完成统一
    • 3-即把中间替换包引入
    • 4-如果引入其他框架,一定要把该框架默认日志依赖先移除

    springboot能自动适配所有日志,底层使用【slf4j】 + 【logback】的方式记录日志,要想换成其他日志实现框架时,只需要把这个框架的日志配置放入到程序资源文件即可。

    日志类:Logger类

    • 获取:loggerFacroty.getLogger(getClass())
    • .trace("xxxx信息");
    • .debug("xxxx信息");
    • .info("xxxx信息");
    • .warn("xxxx信息");
    • .error("xxxx信息");

    以上五个方法也是日记的级别,由低到高。 spring默认设置日志级别是:info
    可以调整日志的输出级别:其只会打印所设置级别即后面级别的日志信息。

    • 设置级别:在配置文件中指定--logging.level.xxx包 = 级别名称 (不填写具体的包,即每个包的日记级别都设置)
    • logging.file = 文件名或路径 --表示把日志打印到所设置的文件或路径中
    • logging.path = 指定path --表示在指定目录下记录日志(与logging.file是冲突的,如果设置了logging.file后就会在其设置的文件或路径下输出日志)
    • logging.pattern.console = xxxxx --设置在控制台输出的日志格式
      • 如:%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
    • logging.pattern.file = xxxxx --设置在指定文件中输出的日志格式

    profile特性 多环境日志的格式切换

    • 1-给日志配置文件填加【-spring】后缀
    • 2-在日志配置文件中添加:

    指定日志配置文件
    给类路径下放上日志框架自己的配置文件即可,springboot就不使用默认的日志配置了

    切换日志框架

    • 即上面所提的适配器类模式:把对应其他框架通过中间替换类替换统一接口
    • 把默认日志实现类去掉,导入所用日志实现类
    • 把日志配置文件导入到类路径下。

    WEB

    springboot对静态资源的映射规则

    可以取webjars网站下载对应的静态资源对应的maven ,如jq、sootstrap等
    webjars以jar包的方式引入静态资源

    • 1-【/webjars/**】访问,都去classpath:/META-INF/resources/webjars/所找资源;

    • 2-【/**】访问的任何资源,如果没有处理都默认去以下路径查找

      • "classpath:/META-INF/resources/"
      • "classpath:/resources/"
      • "classpath:/static/"
      • "classpath:/public/"
      • "/"
    • 3-【欢迎页】:静态资源文件下所有的index.html

    • 4-【网页图标】:所有的**/favicon.ico都是在静态资源文件下找;

    修改默认的静态资源访问路径:配置文件配置:spring.resources.static-locations=路径,路径,... 如:classpath:/hello/,classpath:/xiaoai/

    模板引擎:thymeleaf

    模板引擎:jsp、velocity、freemarker、thymeleaf

    thymeleaf的使用

    • 引入thymeleaf,即maven添加依赖
    <dependency>
        <grouprd>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        <-- springboot2以上版本不用改这些 -->
        <java.version>1.8</java.version>
        <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
        <!--布局功能的支持程序thymeLeaf3主程序layout2以上版本-->
        <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
    </dependency>
    
    • 只要把HTML页面放在classpath:/templates/,thymeleaf就能自动渲染

    thymeleaf的语法
    可以在页面上导入名称空间: 可以不导入,导入就是为了获得语法提示

    • 语法

    可以通过【th:属性名=${xxx}】修改任意属性

  • 相关阅读:
    闭包
    iframe
    函数声明和函数表达式
    简单的事件委托
    onhashchange
    WebP探索
    Chrome
    适合自己学习的一些网站
    模拟jQuery的一些功能
    __autoload()方法
  • 原文地址:https://www.cnblogs.com/xiaoaiying/p/13582887.html
Copyright © 2020-2023  润新知