Spring Boot入门学习笔记

1.微服务与Springboot

微服务:一个项目可以由多个小型服务构成(微服务)

Spring boot 可以快速开发微服务模块(简化j2ee开发;整个spring技术栈整合如spring mvc 、spring;整个j2ee技术整合如整合mybatis Struts2)

2.第一个SpringBoot程序及执行原理

(1)需要配jdk及maven环境

(2)目录结构resources:

static存静态资源(js css 图片)

Templates:模板文件(freemarker,thymeleaf,默认不支持jsp)

  1. spring boot将各个应用/三方框架 设置成了一个个“场景”stater,选完之后,spring boot 会将该场景所需要的所有依赖自动注入,例如选择“web”,例如选择“web”,spring boot 就会将web相关的依赖全部引入本项目。如(tomcat  json包等)
  2. @SpringBootApplication:spring boot的主配置类。该注解包含:@ SpringBootConfiguration:包含@Configuration,表示“配置类”

代替spirng.xml。且该类会自动化放入spring容器。

  1. EnableAutoConfiguration:是SB自动配置。(如将主应用程序包下的类,自动注入)可以找到@SpringBootApplication所在类的包。(自己写的包)

SB在启动时,会根据META-INF/spring.factories找到相应的三方依赖,并将这些依赖引入本项目。(三方依赖)

总结:编写项目时,一般会对自己写的代码以及三方依赖进行配置。但是springboot可以自动进行配置。

自己写的代码,sb通过@SpringBootConfiguration自动帮我们配置。 三方依赖,通过spring-boot-autoconfig-2.0.3Release.jar中的META-INF/spring.factories,该jar包中包含了 J2EE整合体系中需要的依赖。

如何自动装配研究org.springframework.boot.autoconfigure.web.servlet.httpEncodingAutoConfiguration源码发现:@Configuration:标识此类是一个配置类,将此类纳入spring IOC容器。@EnableConfigurationProperties(HttpEncodingProperties.class):通过HttpEncodingProperties将编码设置为UTF_8,(即自动装配为UTF_8,如何修改编码:在配置文件中设置spring.http.encoding.charset=GBK)。

@ConditionalOnProperty(prefix = “spring.http.encoding”, value =”enable”,matchIfMissing = true)

当属性满足要求时,此条件成立:要求为如果spring.http.encoding.enable=xxx没有配置则成立。即每一个XxAutoConfiguration 都有很多@ConditionOnXxx,当这些条件都满足时,则此配置自动生效(utf-8)。

 如何知道springboot开启或禁止哪些自动装配?

在application.properties,添加debug = true配置,

重启之后positive matches为自动启动,negative matches为自动禁止的。

3.配置文件及yml使用

  1. 配置文件,作用:spring boot自动配置(约定,8080),可以使用配置文件对默认的配置进行配置。默认的全局配置文件,如application.properties : k=v;

application.yml 不是一个标记文本;注意:a.  K:空格V。 b.通过垂直对其指定层次关系。

c.默认不写引号,

Xml:是一个标记文档,<server>   <port>8882</port> </server>

  1. Yaml通过@ConfigurationProperties和@Value方式注入值。

绑定:

@Compont

@ConfigurationProperties(prefix=”student”)

Public class Student

注值:@ConfigurationProperties为批量注入,@Value单个注入。

  1. @PropertySource:默认会加载application.properties/application.yml文件中数据。例如@PropertySource(value={classpath:conf.properties}),加载conf.properties.但是@PropertySource只能加载properties,不能加载yml。
  2. @ImportResource

Spring boot 自动装配/自动配置。Spring等配置文件,默认会被spring boot自动给配置好。自己编写的spring等配置文件,sb默认不识别,如果需要识别,则需要通过@ImportResource指定配置文件的路径。但不推荐手写配置文件,spring boot 推荐使用注解方式进行配置:@Configuration @Bean

  1. spring boot 全局配置文件中的占位符表达式,如:  

a、随机数 ${random.uuid}等

b、引用变量值  

Yml中:

Student:

uname:x

name:${student.user.name}

实际引用的是properties中的student.user.name=z167

4.springBoot多环境设置及切换

  1. 多环境的切换(profile)
  1. Properties

默认boot会读取application.properties环境,多个application-环境名.properties,如application-dev.properties 8883.

如果要选择某一个具体的环境:application.properties中指定:spring.profiles.active=(dev)环境名,如果将application.properties注释掉,spring boot仍会读取其他 application-环境名.properties

  1. yml

第一环境(主环境)

Server:

Port:8888

Spring

profiles:dev 环境名

  1. 动态切换环境

通过运行参数指定环境:

  1. sts(Eclipse):Run Configuration -Argument - program Argument

--spring.profiles.active=环境名

  1. 命令行方式:

Java -jar 项目名.jar --spring.profiles.active=环境名。

      通过vm参数指定环境:

Sts(Eclipse):run configuration -Argument -VM

-Dspring.profile.active=环境名

5.springBoot配置文件位置及加载顺序

 (1)位置

Properties和yml中的配置,相互补充;如果冲突,则properties优先级高。

Spring boot默认能够读取的application.properties/application.yml,这两个文件可以存在于以下4个地方:

File:项目根目录/config

File:项目根目录

Classpath:项目根目录/config

Classpath:项目根目录

注意:如果某项配置冲突,则优先级从上往下。如果不冲突,则互补结合使用。

(2)外部配置文件及加载顺序问题

在properties文件中配置项目名: server.servlet.context-path=/boot.

项目外部的配置文件:

在项目Run configuration ,argumenets:

--spring.config.location =文件路径

如果同一配置同时存在于内部配置文件和外部配置文件,则外部>

内部。

 通过命令行,调用外部配置文件

Java -jar 项目.jar --spring.config.location=D:/app.properties.

更新项目运行参数:(补救)

在项目run configuration, arguments

 --server.port = 8883

通过命令行,调用外部配置文件。

Java -jar 项目.jar --server.port=8883.多个地方配置时,如果冲突优先级为:命令参数(调用外部的配置文件>运行参数>内部文件)

6.Spring boot日志处理

(1) 日志框架 UCL JUL JBOSS-logging  logback log4j log4j2

(2)Spring boot默认选用slfj.logback

(3)Spring boot默认帮我们配置好了日志,我们直接使用即可。

日志级别: trace<DUBUG<INFO<WARN<ERROR<FATAL<OFF

(4)Spring boot默认的日志级别是info(即只打印info及之后的级别信息),也可自定义级别;全局配置可以通过配置将日志信息存储到文件中 logging.file =D:/springboot.log。存储到项目的根目录中的,也可以指定具体的日志路径:logging.path =D:/springboot.log;也可以存储到一个文件夹,logging.path=D:/log/,并默认的文件名是spring.log。

(5)指定日志显示格式:

a、日志显示在console中

Logging.pattern.console = %d {yyyy-MM-dd} [%thread] % -5level %logger{50}

%d:日期时间

%thread:线程名

%-5level:显示日志级别,-5表示从左显示5个字符宽度。

%logger{50}:设置日志长度

%msg:日志消息

%n:回车

b、日志显示在文件中

Logging.pattern.file =%d{yyyy-MM-dd} ** %-5level **%logger..

默认的日志格式,是在jar包中相应包的xml文件中进行配置。

 日志具体的使用规范,在springboot 官方资料中查看,https://docs.spring.io/spring-boot/docx/2.0.4.RELEASE/reference

7.Springboot 处理web静态资源

  1. springboot开发web项目(静态资源 html css js)

New - spring starer -设置(选择 需要的场景 ,web)

Spring boot 是一个jar,因此静态资源就不是再存放到webapps中,存放在哪里?

静态资源的存放路径 通过webMvcAutoConfiguration类-addResourceHandlers()指定:/webjars

Spring boot将静态资源存放到jar包中,引入:从jar目录结构的webjars开始写:http://localhost:8080/webjars/jquery/3.3.1-1/jquery.js

  1. 如何自己写静态资源,如何放到如spring boot中?将自己写的静态资源->jar,同上(不推荐)

推荐:spring boot约定 ,spring boot将一些目录结构 设置成静态资源存放目录,我们的静态资源直接放入这些目录即如:
classpath:/META-INF/resources/

Classpath:/resources/

Classpath:/static/

Classpath:/public/

注意:在以上目录存放资源文件后,访问时不需要加前缀,直接访问即可。如:http://localhost:8080/word.html

8.WebMvcAutoConfiguration源码解读

(1)设置欢迎页:webMVCAutoConfiguration类中welcomePageHandlerMapping() -->getIndexHtml()-->location +”index.html”;

(2)网站中网页标签的Logo是固定名字:favicon.ico,自定义favicon.ico,阅读源码得知,只需要将favicon.ico文件放入任意静态资源目录中即可。

总结:1、通过源码发现静态资源的目录  2、用静态资源:只需要将静态资源放入以上目录即可。 3、其他特定的文件(欢迎页,ico),只需要根据约定(index.html favicon.ico)放入该

  1. 如何自定义静态资源目录(properties文件中的prefix+属性):

Spring.resources.static-locations=classpath:/res/,”classpath:/img/”

以上就将静态资源目录设置为了classpath:/res/,classpath:/img/,注意自定义静态资源目录后,动态资源:jsp(Spring boot默认不支持)。推荐:模板引擎。

9.模板引擎thymeleaf

  1. 网页=模板+数据
  2. 引入thymeleaf:到官网查询 thymeleaf的依赖(maven
  3. 使用thymeleaf:代码在哪里写?

thymeleafAutoConfiguration、XxProperties

使用thymeleaf只需要将文件放入目录:“classpath:/templates/”;文件的后缀:“.html”

注意:在以前传统的web项目中,静态资源修改后是不需要重启的;但是在spring boot项目中修改后需要重启。

例如:<p th:text=”${welcome}”> welcome to thymeleaf..</p>以上,先从${welcome}中取值,如果有th就是替换原来html值:

10.SpringBoot整合外置Tomcat及使用JSP开发

   若需要使用JSP需要外置Tomcat并打成War包,

  1. 更改tomcat依赖关系
  2. 建立必要web目录结构,如webapps/WEB-INF(需要)
  1. 新建boot项目,war

注意:

<dependency>

<groupId> org.springframework.boot<groupId>

<artifactId>spring-boot-starter-tomcat<artifactId>

<scope>provided</scope>

<dependency>

Provided:意思是将项目打包时,不需要将内置的tomcat一起打包。

  1. 建立基本的web所需的目录结构

webapps/WEB-INF(需要)

Webapps/WEB-INF/web.xml(不需要)

Webapps/index.jsp

  1. 创建tomcat实例,部署项目

访问:   域名/项目名/文件名  例如:http://localhost:8080/SBJSP/index.jsp

分析:

如果是一个war包的spring boot项目,在启动服务器tomcat时,会自动调用ServletInitializer类中的configure方法,configure方法会调用spring boot的主配置类,从而启动spring boot。即启动tomcat服务器时,会启动tomcat及springboot。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值