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}】修改任意属性

posted @ 2020-11-29 23:47  小艾影  阅读(129)  评论(0编辑  收藏  举报