《Java EE框架(SSM + Spring Boot + Vue.js 3)整合开发》 课件 第6章 Spring Boot核心_第1页
《Java EE框架(SSM + Spring Boot + Vue.js 3)整合开发》 课件 第6章 Spring Boot核心_第2页
《Java EE框架(SSM + Spring Boot + Vue.js 3)整合开发》 课件 第6章 Spring Boot核心_第3页
《Java EE框架(SSM + Spring Boot + Vue.js 3)整合开发》 课件 第6章 Spring Boot核心_第4页
《Java EE框架(SSM + Spring Boot + Vue.js 3)整合开发》 课件 第6章 Spring Boot核心_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

J

a

v

a

E

E框架整合开发创新·协作·分享T

I

P

C

C教案第六章Spring

Boot核心T

I

P

C

C教案本章目标理解Spring

Boot的自动配置原理了解Spring

Boot的条件注解掌握Spring

Boot的核心注解掌握Spring

Boot的基本配置T

I

P

C

C教案本章内容Spring

Boot的基本配置读取应用配置日志配置Spring

Boot的自动配置原理Spring

Boot的条件注解T

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.1启动类和核心注解@SpringBootApplicationSpring

Boot应用通常都有一个名为*Application的程序入口类,该入口类需要使用Spring

Boot的核心注解

@SpringBootApplication标注为应用的启动类。Spring

Boot的核心注解@SpringBootApplication是一个组合注解,主要组合了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan注解。源代码可以从spring-boot-autoconfigure-2.4.1.jar依赖包中查看

org/springframework/boot/autoconfigure/SpringBootApplication.java。T

I

P

C

C教案1.@SpringBootConfiguration注解@SpringBootConfiguration是Spring

Boot应用的配置注解,该注解也是一个组合注解,源代码可以从spring-boot-2.4.1.jar依赖包中查看

org/springframework/boot/SpringBootConfiguration.java。

在Spring

Boot应用中推荐使用@SpringBootConfiguration注解替代@Configuration注解。T

I

P

C

C教案2.@EnableAutoConfiguration注解@EnableAutoConfiguration注解可以让Spring

Boot根据当前应用项目所依赖的jar自动配置项目的相关配置。例如,在Spring

Boot项目的pom.xml文件中添加了spring-boot-starter-web依赖,Spring

Boot项目会自动添加Tomcat和Spring

MVC的依赖,同时对Tomcat和Spring

MVC进行自动配置。T

I

P

C

C教案3.@ComponentScan注解该注解的功能是让Spring

Boot自动扫描

@SpringBootApplication所在类的同级包以及它的子包中的配置,所以建议将@SpringBootApplication注解的入口类放置在项目包下(Group

Id+Artifact

Id组合的包名),这样可以保证

Spring

Boot自动扫描项目所有包中的配置。这样就不需要在配置文件中配置包的扫描。T

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.2关闭某个特定的自动配置使用@EnableAutoConfiguration注解可以让Spring

Boot根据当前应用项目所依赖的jar自动配置项目的相关配置。如果开发者不需要Spring

Boot的某一项自动配置,该如何实现呢?通过查看@SpringBootApplication的源代码可知,应该使用

@SpringBootApplication注解的exclude参数关闭特定的自动配置,以关闭neo4j自动配置为例,代码如下:@SpringBootApplication(exclude={Neo4jDataAutoConfiguration.class})T

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.3定制Banner首先,在src/main/resources目录下新建banner.txt文件,并在文件中添加任意字符串内容,如“#Hello,Spring

Boot!”。然后,重新启动Spring

Boot项目,将发现控制台启动信息已经发生改变。如果开发者想把启动字符串信息换成字符串图案,具体操作:首先,打开网站/software/taag,输入自定义字符串,单击网页下方的“Select

&

Copy”按钮。然后,将自

定义banner字符串图案复制到src/main/resources目录下的

banner.txt文件中,重新启动Spring

Boot项目即可。T

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.4关闭banner开发者如果需要关闭banner,可以在src/main/resources目录下的perties文件中添加如下配置:spring.main.banner-mode

=

offT

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.5

Spring

Boot的全局配置文件Spring

Boot的全局配置文件(perties或application.yml)位于Spring

Boot应用的

src/main/resources目录下。1.设置端口号server.port=88882.设置Web应用的上下文路径server.servlet.context-path=/XXX这时应该通过“http://localhost:8080/XXX/testStarters”访问如下控制器类中的请求处理方法:@RequestMapping("/testStarters")public

String

index()

{}!!!在Spring

Boot的全局配置文件中,可以配置与修改多个参数,读者想了解参数的详细说明和描述可以查看官方文档说明:https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#common-application-properties。T

I

P

C

C教案6.1

Spring

Boot的基本配置6.1.1启动类和核心注解@SpringBootApplication6.1.2关闭某个特定的自动配置6.1.3定制Banner6.1.4关闭banner6.1.5

Spring

Boot的全局配置文件6.1.6

Spring

Boot的StartersT

I

P

C

C教案6.1.6

Spring

Boot的StartersSpring

Boot提供了很多简化企业级开发的“开箱即用”的

Starters。Spring

Boot项目只要使用了所需要的Starters,Spring

Boot即可自动关联项目开发所需要的相关依赖。例如,我们在ch6_1的pom.xml文件中,添加如下依赖配置:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>Spring

Boot将自动关联Web开发的相关依赖,如tomcat、spring-webmvc等,进而对Web开发的支持,并将相关技术的配置实现自动配置。通过访问“https://docs.spring.io/spring-boot/docs/2.4.1/reference/htmlsingle/#using-boot-starter”官网,可以查看Spring

Boot官方提供的StartersT

I

P

C

C教案本章内容Spring

Boot的基本配置读取应用配置日志配置Spring

Boot的自动配置原理Spring

Boot的条件注解T

I

P

C

C教案6.2读取应用配置6.2.1

Environment6.2.2

@Value6.2.3

@ConfigurationProperties6.2.4

@PropertySourceT

I

P

C

C教案6.2.1

EnvironmentEnvironment是一个通用的读取应用程序运行时的环境变量的类,可以通过key-value方式读取perties、命令行输入参数、系统属性、操作系统环境变量等。

【例6-1】使用Environment类读取perties配置文件的内容。1.创建Spring

Boot项目ch6_1使用STS快速创建Spring

Web应用ch6_1。2.添加配置文件内容

在src/main/resources目录下,找到全局配置文件

perties,并添加如下内容:test.msg=read

configT

I

P

C

C教案6.2.1

Environment3.创建控制器类EnvReaderConfigController在src/main/java目录下,创建名为com.ch6_1.controller的包(是com.ch6_1包(主类所在的包)的子包,保障注解全部被扫描),并在该包下创建控制器类EnvReaderConfigController。在控制器类EnvReaderConfigController中,使用@Autowired注解依赖注入Environment类的对象。@RestControllerpublic

class

EnvReaderConfigController{@Autowiredprivate

Environment

env;@RequestMapping("/testEnv")public

String

testEnv()

{return"方法一:"+env.getProperty("test.msg");//test.msg为配置文件perties中的key}}T

I

P

C

C教案6.2.1

Environment4.启动Spring

Boot应用运行Ch61Application类的main方法,启动Spring

Boot应用。5.测试应用启动Spring

Boot应用后,默认访问地址为:

http://localhost:8080/,将项目路径直接设为根路径,这是

Spring

Boot的默认设置。因此,我们可以通过

http://localhost:8080/testEnv测试应用(testEnv与控制器类

ReaderConfigController中的@RequestMapping("/testEnv")对应)。T

I

P

C

C教案6.2读取应用配置6.2.1

Environment6.2.2

@Value6.2.3

@ConfigurationProperties6.2.4

@PropertySourceT

I

P

C

C教案6.2.2

@Value使用@Value注解读取配置文件内容示例代码如下:@Value("${test.msg}")//test.msg为配置文件perties中的keyprivate

String

msg;//通过@Value注解将配置文件中key对应的value赋值给变量msg@RestControllerpublic

class

ValueReaderConfigController

{@Value("${test.msg}")private

String

msg;@RequestMapping("/testValue")public

String

testValue()

{return"方法二:"+msg;}}http://localhost:8080/testValue测试应用T

I

P

C

C教案6.2读取应用配置6.2.1

Environment6.2.2

@Value6.2.3

@ConfigurationProperties6.2.4

@PropertySourceT

I

P

C

C教案6.2.3

@ConfigurationProperties使用@ConfigurationProperties首先建立配置文件与对象的映

射关系,然后在控制器方法中使用@Autowired注解将对象注入。【例6-3】使用@ConfigurationProperties读取配置文件内容。#

nest

Simple

propertiesobj.sname=chenhengobj.sage=88#List

propertiesobj.hobby[0]=runningobj.hobby[1]=basketball#Map

Propertiesobj.city.cid=dlame=dalianT

I

P

C

C教案建立配置文件与对象的映射关系@Component//使用Component注解,声明一个组件,被控制器依赖注入@ConfigurationProperties(prefix="obj")//obj为配置文件中key的前缀public

class

StudentProperties{private

String

sname;private

int

sage;private

List<String>

hobby;private

Map<String,

String>

city;//省略set和get方法@Overridepublic

String

toString()

{return

"StudentProperties

[sname="

+

sname+

",

sage="

+

sage+

",

hobby0="

+

hobby.get(0)+

",

hobby1="

+

hobby.get(1)+

",

city="

+

city

+

"]";}}T

I

P

C

C教案创建控制器类ConfigurationPropertiesController@RestControllerpublic

class

ConfigurationPropertiesController

{@AutowiredStudentProperties

studentProperties;@RequestMapping("/testConfigurationProperties")public

String

testConfigurationProperties()

{return

studentProperties.toString();}}通过http://localhost:8080/testConfigurationProperties测试应用T

I

P

C

C教案6.2读取应用配置6.2.1

Environment6.2.2

@Value6.2.3

@ConfigurationProperties6.2.4

@PropertySourceT

I

P

C

C教案6.2.4

@PropertySource可以使用@PropertySource注解找到项目的其他配置文件,然后结合6.2.1~6.2.3节中任意一种方式读取即可。【例6-4】使用@PropertySource+@Value读取其他配置文件内容。在ch6_1的src/main/resources目录下创建配置文件

perties和perties,并在perties文件中添加如下内容:your.msg=hello.在perties文件中添加如下内容:my.msg=test

PropertySourceT

I

P

C

C教案创建控制器类PropertySourceValueReaderOhterController在ch6_1项目的com.ch6_1.controller包中,创建名为

PropertySourceValueReaderOhterController的控制器类。在该控制器类中,首先使用@PropertySource注解找到其它配置文件,然后使用@Value注解读取配置文件内容@RestController@PropertySource({"perties","perties"})public

class

PropertySourceValueReaderOhterController

{@Value("${my.msg}")private

String

mymsg;@Value("${your.msg}")private

String

yourmsg;@RequestMapping("/testProperty")public

String

testProperty()

{return"其他配置文件perties:"+mymsg+"<br>"+"其他配置文件perties:"+yourmsg;}}通过

http://localhost:8080/testProperty测试应用T

I

P

C

C教案本章内容Spring

Boot的基本配置读取应用配置日志配置Spring

Boot的自动配置原理Spring

Boot的条件注解T

I

P

C

C教案6.3日志配置默认情况下,Spring

Boot应用使用LogBack实现日志,使用

apache

Commons

Logging作为日志接口,因此代码中通常如下所示使用日志:@RestControllerpublic

class

LogTestController

{private

Log

log

=

LogFactory.getLog(LogTestController.class);@RequestMapping("/testLog")public

String

testLog()

{("测试日志");return"测试日志";}}T

I

P

C

C教案日志级别日志级别有ERROR、WARN、INFO、DEBUG和TRACE。Spring

Boot默认的日志级别为INFO,日志信息可以打印到控制台。但开发者可以自己设定Spring

Boot项目的日志输出级别,例如在perties配置文件中加入以下配置:#设定日志的默认级别为infologging.level.root=info#设定org包下的日志级别为warn=warn#设定com.ch.ch4_1包下的日志级别为debug.ch.ch4_1=debugT

I

P

C

C教案输出日志到文件Spring

Boot项目默认并没有输出日志到文件,但开发者可以在

perties配置文件中指定日志输出到文件,配置示例如下:logging.file=my.log该日志文件位于Spring

Boot项目运行的当前目录(项目工程目录下)。将在c:/log目录下生成一个名为my.log的日志文件。logging.file=c:/log/my.log不管日志文件位于何处,当日志文件大小到达10MB时,将自动生成一个新日志文件。T

I

P

C

C教案日志格式控制logging.pattern.console=%level

%date{yyyy-MM-dd

HH:mm:ss:SSS}

%logger{50}.%M

%L

:%m%nlogging.pattern.file=%level

%date{ISO8601}

%logger{50}.%M

%L

:%m%n文件日志输出格式

控制台日志输出格式logging.pattern.console:指定控制台日志格式。logging.pattern.file:指定日志文件格式。%level:指定输出日志级别。%date:指定日志发生的时间。ISO8601表示标准日期,相当于yyyy-MM-dd

HH:mm:ss:SSS。%logger:指定输出Looger的名字,包名+类名,{n}限定了输出长度。%M:指定日志发生时的方法名。%L:指定日志调用时所在代码行,适用于开发调试,线上运行时不建议使用此参数,因为获取代码行对性能有消耗。%m:表示日志消息。%n:表示日志换行。T

I

P

C

C教案本章内容Spring

Boot的基本配置读取应用配置日志配置Spring

Boot的自动配置原理Spring

Boot的条件注解T

I

P

C

C教案6.4

Spring

Boot的自动配置原理从6.1.1节,我们可知Spring

Boot使用核心注解

@SpringBootApplication将一个带有main方法的类标注为应

用的启动类。@SpringBootApplication注解最主要的功能之一是为Spring

Boot开启了一个@EnableAutoConfiguration注解的自动配置功能。@EnableAutoConfiguration注解主要利用了一个类名为

AutoConfigurationImportSelector的选择器向Spring容器自动配置一些组件。@EnableAutoConfiguration注解的源代码可以从spring-boot-autoconfigure-2.4.1.jar(org.springframework.boot.autoconfigure)依赖包中查看。T

I

P

C

C教案6.4

Spring

Boot的自动配置原理从源代码中可以看出,最终Spring

Boot是通过加载所有(inmultiple

JAR

files)META-INF/spring.factories配置文件进行自动配置的。所以,@SpringBootApplication注解通过使用

@EnableAutoConfiguration注解自动配置的原理是:从classpath中搜索所有META-INF/spring.factories配置文件,并将其中

org.springframework.boot.autoconfigure.EnableAutoConfiguration对应的配置项通过Java反射机制进行实例化,然后汇总并加载到Spring的IoC容器。T

I

P

C

C教案本章内容Spring

Boot的基本配置读取应用配置日志配置Spring

Boot的自动配置原理Spring

Boot的条件注解T

I

P

C

C教案6.5

Spring

Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT

I

P

C

C教案6.5.1条件注解打开spring.factories配置文件中任意一个AutoConfiguration,一般都可以找到条件注解。所谓Spring的条件注解,就是应用程序的配置类在满足某些特定条件才会被自动启用此配置类的配置项。Spring

Boot的条件注解位于spring-boot-autoconfigure-2.4.1.jar的org.springframework.boot.autoconfigure.condition包下。条件注解都是组合了@Conditional元注解,只是针对不同的条件去实现。T

I

P

C

C教案6.5

Spring

Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT

I

P

C

C教案6.5.2实例分析从Spring

MVC项目的web.xml文件中过滤器的配置可知,

Spring

Boot自动配置HTTP编码需要满足的条件是:配置

CharacterEncodingFilter的Bean,并设置encoding和forceEncoding这两个参数。通过查看源代码可知

org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration类,根据条件注解配置了

CharacterEncodingFilter的Bean,并设置了encoding和forceEncoding这两个参数。T

I

P

C

C教案6.5

Spring

Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT

I

P

C

C教案6.5.3自定义条件Spring的@Conditional注解根据满足某特定条件创建一个特定

的Bean。例如,当某jar包在类路径下时,自动配置一个或多个

Bean。即根据特定条件控制Bean的创建行为,这样我们就可以

利用此特性进行一些自动配置。那么,开发者如何自己构造条件呢?在Spring框架中,可以通过实现Condition接口,并重写

matches方法来构造条件。【例6-7】如果类路径classpath(src/main/resources)下存在文件perties,则输出“perties文件存在。”;否则输出“perties文件不存在!”。T

I

P

C

C教案构造条件public

class

MyCondition

implements

Condition{@Overridepublic

boolean

matches(ConditionContext

context,

AnnotatedTypeMetadata

metadata)

{return

context.getResourceLoader().getResource("classpath:perties").exists();}}public

class

YourCondition

implements

Condition{@Overridepublic

boolean

matches(ConditionContext

context,

AnnotatedTypeMetadata

metadata)

{return

!context.getResourceLoader().getResource("classpath:perties").exists()}}T

I

P

C

C教案创建不同条件下Bean的类package

com.ch6_1.conditional;public

interface

MessagePrint

{public

String

showMessage();}package

com.ch6_1.conditional;public

class

MyMessagePrint

implements

MessagePrint{@Overridepublic

String

showMessage()

{return

"perties文件存在。";}}package

com.ch6_1.conditional;public

class

YourMessagePrint

implements

MessagePrint{@Overridepublic

String

showMessage()

{return

"perties文件不存在!";}}T

I

P

C

C教案创建配置类@Configurationpublic

class

ConditionConfig

{@Bean@Conditional(MyCondition.class)public

MessagePrint

myMessage()

{return

new

MyMessagePrint();}@Bean@Conditional(YourCondition.class)public

MessagePrint

yourMessage()

{return

new

YourMessagePrint();}}使用@Bean和@Conditional实例化符合条件的BeanT

I

P

C

C教案创建测试类package

com.ch6_1.conditional;import

org.springframework.context.annotation.AnnotationConfigApplicationContext;public

class

TestMain

{private

static

AnnotationConfigApplicationContext

context;public

static

void

main(String[]

args)

{context

=

new

AnnotationConfigApplicationContext(ConditionConfig.class);MessagePrint

mp

=

context.getBean(MessagePrint.class);System.out.println(mp.showMessage());}}T

I

P

C

C教案运行当Spring

Boot应用ch6_1的src/main/resources目录下存在

perties文件时,运行测试类,控制台显示

“perties文件存在。”;当Spring

Boot应用ch6_1的src/main/resources目录下不存在perties文件时,运行测试类,控制台显示“perties文件不存在!”。T

I

P

C

C教案6.5

Spring

Boot的条件注解6.5.1条件注解6.5.2实例分析6.5.3自定义条件6.5.4自定义StartersT

I

P

C

C教案6.5.4自定义Starters从6.1.6节可知,第三方为Spring

Boot贡献了许多Starters。那么,我们作为开发者是否也可以贡献自己的Starters?学习

Spring

Boot的自动配置机制后,答案是肯定的。【例6-8】自定义一个Starter(spring_boot_mystarters)。要求:当类路径中存在MyService类时,自动配置该类的Bean,并可以将相应Bean的属性在perties中配置。T

I

P

C

C教案新建Spring

Boot项目spring_boot_mystarters首先,通过选择菜单“File->New->Spring

Starter

Project”打开“New

Spring

Starter

Project”对话框。其次,在对话框中输入项目名称spring_boot_mystarters。最后,单击“Next”与“Finish”按钮。T

I

P

C

C教案修改pom文件修改Spring

Boot项目spring_boot_mystarters的pom文件,增加Spring

Boot自身的自动配置作为依赖。<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId></dependency>T

I

P

C

C教案创建属性配置类MyPropertiespackage

com.ch.spring_boot_mystarters;import

perties.ConfigurationProperties;//在perties中通过my.msg=设置属性@ConfigurationProperties(prefix="my")

public

class

MyProperties{private

String

msg="默认值";public

String

getMsg()

{return

msg;}public

void

setMsg(String

msg)

{this.msg

=

msg;}}T

I

P

C

C教案创建判断依据类MyService自定义的Starters将根据该类的存在与否来创建该类的Bean,该类可以是第三方类库的类。package

com.ch.spring_boot_mystarters;public

class

MyService

{private

String

msg;public

String

sayMsg()

{return

"my

"

+

msg;}public

String

getMsg()

{return

msg;}public

void

setMsg(String

msg)

{this.msg

=

msg;}}T

I

P

C

C教案创建自动配置类MyAutoConfiguration@Configuration//开启属性配置类MyProperties提供参数@EnableConfigurationProperties(MyProperties.class)//类加载器(类路径)中是否存在对应的类@ConditionalOnClass(MyService.class)//应用环境中属性是否存在指定的值@ConditionalOnProperty(prefix

=

"my",

value

=

"enabled",

matchIfMissing

=

true)public

class

MyAutoConfiguration

{@Autowiredprivate

MyProperties

myProperties;@Bean//当容器中不存在MyService的Bean时,自动配置这个Bean@ConditionalOn

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论