SpringBoot unit 2th,关于spring4的那些事,面试重点

豹子头
• 阅读 1040

SpringBoot unit 2th,关于spring4的那些事,面试重点

SpringBoot unit 2th,关于spring4的那些事,面试重点

第二单元SpringBoot配置
1【授课重点】
1)Application.properties
2)Application.yml
3)自定义配置文件
4)引入xml配置
5)@Configuration
2【考核要求】
1)SpringBoot有配置文件的项目
2)Configuration和Bean
3)树形配置文件
4)传统的配置文件
5)Xml方式配置Bean
3【教学内容】
3.1课程导入
1、SpringBoot有灵活的配置方式
2、实际开发中选择一种简单使用的配置方式即可
3、兼容传统的spring配置方式
3.2创建项目

pom.xml 文件的内容如下所示

SpringBoot unit 2th,关于spring4的那些事,面试重点

SpringBoot unit 2th,关于spring4的那些事,面试重点

Spring Boot提供了许多Starters来在类路径中添加jar。 例如,要编写Rest Endpoint,需要在类路径中添加spring-boot-starter-web依赖项。请遵守下面显示的代码以便更好地理解 -
【编写web项目必须有的starter web】

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.2.1Main方法
Main方法应该是编写Spring Boot Application类。 该类应使用@SpringBootApplication进行注释。这是启动Spring启动应用程序的入口点。以在src/java/main目录下找到主类文件。
在此示例中,主类文件位于src/java/main目录中,其默认包为com.yiibai.demo。 请观察此处显示的代码以便更好地理解 -
【启动类有两个注解: @SpringBootApplication, @SpringApplication 】
SpringBoot unit 2th,关于spring4的那些事,面试重点

3.2.2编写一个Rest端点
【就是写一个helloworld】
要在Spring Boot Application主类文件本身中编写一个简单的Hello World Rest 端点,请按照以下步骤操作 -
首先,在类的顶部添加@RestController注释。
使用@RequestMapping注释编写Request URI方法。
Request URI方法应该返回Hello World字符串。
现在,Spring Boot Application类文件将如下面的代码所示 -

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.3创建一个可执行的JAR

创建一个可执行的JAR文件,在命令提示符下使用Maven和Gradle命令运行Spring Boot应用程序,如下所示 -
使用maven命令mvn clean install,如下所示 -

SpringBoot unit 2th,关于spring4的那些事,面试重点

执行命令后,可以在命令提示符下看到 BUILD SUCCESS 的消息,如下所示 -

SpringBoot unit 2th,关于spring4的那些事,面试重点

用Java运行Hello World
创建可执行JAR文件后,可以在以下目录中找到它。对于Maven,可以在目标目录下找到JAR文件,如下所示

SpringBoot unit 2th,关于spring4的那些事,面试重点

现在,使用命令java -jar <JARFILE>运行JAR文件。 请注意,在上面的示例中,JAR文件名为demo-0.0.1-SNAPSHOT.jar

SpringBoot unit 2th,关于spring4的那些事,面试重点

运行jar文件后,可以在控制台窗口中看到输出,如下所示

SpringBoot unit 2th,关于spring4的那些事,面试重点

现在,看一下控制台,Tomcat在端口8080(http)上启动。 现在,转到Web浏览器并点击URL => http://localhost:8080/

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.4SpringBoot构建系统
在Spring Boot中,选择构建系统是一项重要任务。建议使用Maven或Gradle,因为它们可以为依赖关系管理提供良好的支持。 Spring不支持其他构建系统。
3.5依赖管理
Spring Boot团队提供了一个依赖项列表,以支持每个版本的Spring Boot版本。无需在构建配置文件中提供依赖项版本。Spring Boot会根据发行版自动配置依赖项版本。 请记住,升级Spring Boot版本时,依赖项也会自动升级。
注 - 如果要指定依赖项的版本,可以在配置文件中指定它。 但是,Spring Boot团队强烈建议不要指定依赖项的版本。
3.6Maven依赖
对于Maven配置,应该继承Spring Boot Starter父项目来管理Spring Boot Starters依赖项。 因此只需在pom.xml 文件中继承启动父级,如下所示。

SpringBoot unit 2th,关于spring4的那些事,面试重点

【现在用的比较多的是1.5.?】
【16年springcloud在全球流行起来,中国也越来越的使用springboot,现在新项目几乎都是springboot】
【最新的版本已经是2.?,大多数的配置在1.5和2.0是一样的,但也有一些配置不一样,比如redis】
【本次选用1.5,是因为有kafka和elasticSearch的部分。1.5的资料比较全】
【elasticSearch的版本升级非常快,boot不支持其最高版本】

应该指定SpringBoot父 Starter依赖项的版本号。 然后,对于其他启动器依赖项,不需要指定Spring Boot版本号。

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.7SpringBoot代码结构
Spring Boot没有任何代码布局可供使用。但是,有一些最佳实践可以帮助我们简化代码布局,本章中将详细讨论它们。
3.8默认包
没有任何包声明的类被视为默认包。 请注意,通常不建议使用默认包声明。 使用默认包时,Spring Boot将导致自动配置或组件扫描出现故障等问题。
注 - Java推荐的包声明命名约定是反向域名。 例如 - com.bw
3.9典型布局
Spring Boot应用程序的典型布局如下图所示 -

SpringBoot unit 2th,关于spring4的那些事,面试重点

Application.java文件应该声明main方法和@SpringBootApplication。 请遵守下面给出的代码以便更好地理解

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.10SpringBoot Bean和依赖注入

在Spring Boot中,可以使用Spring Framework来定义bean及其依赖注入。 @ComponentScan注释用于查找bean以及使用@Autowired注释注入的相应内容。
如果遵循Spring Boot典型布局,则无需为@ComponentScan注释指定任何参数。 所有组件类文件都自动注册到Spring Beans。
以下示例提供了有关自动连接Rest Template对象并为其创建Bean代码片段 -
https://www.yiibai.com/spring...
SpringBoot unit 2th,关于spring4的那些事,面试重点

以下代码显示主Spring Boot Application类文件中自动连接的Rest Template对象和Bean创建对象的代码

SpringBoot unit 2th,关于spring4的那些事,面试重点

3.11Spring Boot应用程序属性

应用程序属性用于支持在不同的环境中工作。 在本章中,将学习如何配置和指定Spring Boot应用程序的属性。
命令行属性

Spring Boot应用程序将命令行属性转换为Spring Boot环境属性。命令行属性优先于其他属性源。 默认情况下,Spring Boot使用8080端口号来启动Tomcat。接下来将学习如何使用命令行属性更改端口号。
步骤1 - 创建可执行JAR文件后,使用命令java -jar <JARFILE>运行它。
步骤2 - 使用下面给出的屏幕截图中给出的命令,使用命令行属性更改Spring Boot应用程序的端口号。

SpringBoot unit 2th,关于spring4的那些事,面试重点

注 - 可以使用分隔符 - 提供多个应用程序属性。

3.12属性文件

属性(properties)文件用于在单个文件中保留N个属性,以便在不同的环境中运行应用程序。 在Spring Boot中,属性保存在类路径下的application.properties文件中。
application.properties文件位于src/main/resources目录中。示例application.properties文件的代码如下

SpringBoot unit 2th,关于spring4的那些事,面试重点

请注意,在上面显示的代码中,Spring Boot应用程序demoservice在端口9090上启动。
3.13YAML文件
Spring Boot支持基于YAML的属性配置来运行应用程序。可以使用application.yml文件代替application.properties。 此YAML文件也应保留在类路径中。 application.yml文件示例如下。
SpringBoot unit 2th,关于spring4的那些事,面试重点

3.14外部化属性
可以将属性保存在不同的位置或路径中,而不是将属性文件保存在类路径下。 在运行JAR文件时,可以指定属性文件路径。 可以使用以下命令在运行JAR时指定属性文件的位置

SpringBoot unit 2th,关于spring4的那些事,面试重点
SpringBoot unit 2th,关于spring4的那些事,面试重点

使用@Value注解
@Value注释用于读取Java代码中的环境或应用程序属性值。读取属性值的语法如下所示
@Value("${property_key_name}")
请看下面的示例,它显示了如何使用@Value批注读取Java变量中的spring.application.name属性值的语法。
@Value("${spring.application.name}")
请遵守下面给出的代码以便更好地理解
SpringBoot unit 2th,关于spring4的那些事,面试重点

3.15Spring Boot活动配置文件
Spring Boot支持基于Spring活动配置文件的不同属性。 例如,可以保留两个单独的文件进行开发和生产,以运行Spring Boot应用程序。
application.properties中的Spring活动配置文件
下面来了解如何在application.properties 中使用Spring活动配置文件。 默认情况下,application.属性将用于运行Spring Boot应用程序。 如果想使用基于配置文件的属性,可以为每个配置文件保留单独的属性文件,如下所示 -
文件:application.properties
SpringBoot unit 2th,关于spring4的那些事,面试重点

文件:application-dev.properties
SpringBoot unit 2th,关于spring4的那些事,面试重点

文件:application-prod.properties
SpringBoot unit 2th,关于spring4的那些事,面试重点

在运行JAR文件时,需要根据每个属性文件指定spring活动配置文件。 默认情况下,Spring Boot应用程序使用application.properties 文件。 设置Spring活动文件的命令如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

在控制台日志中看到活动的配置文件名称,如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

现在,Tomcat已经开始使用端口9090(http),如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

可以设置生产活动配置文件,如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

在控制台日志中看到活动的配置文件名称,如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

现在,Tomcat开始使用4431端口(http),如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

application.yml的Spring活动配置文件
下面来了解如何为application.yml保留Spring活动配置文件。可以将Spring活动配置文件属性保留在单个application.yml文件中。无需使用像application.properties这样的单独文件。
以下是将Spring活动配置文件保留在application.yml文件中的示例代码。 请注意,分隔符(---)用于分隔application.yml文件中的每个配置文件。
SpringBoot unit 2th,关于spring4的那些事,面试重点

命令设置开发活动配置文件如下
SpringBoot unit 2th,关于spring4的那些事,面试重点

在控制台日志中看到活动的配置文件名称,如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

现在,Tomcat开始使用端口9090(http),如下所示
SpringBoot unit 2th,关于spring4的那些事,面试重点

设置生产活动配置文件的命令如下
SpringBoot unit 2th,关于spring4的那些事,面试重点

在控制台日志中看到活动的配置文件名称,如下所示

SpringBoot unit 2th,关于spring4的那些事,面试重点
SpringBoot unit 2th,关于spring4的那些事,面试重点

3.16Spring Boot Code Demo 这部分教学的重点部分,需要教师演示一遍,学生需要练习3编以上才能掌握,第一周的周考重点内容
3.16.1【boot3th part, following part】
Spring 传统xml的方式加入到boot项目中的方法
@ImportResource
SpringBoot unit 2th,关于spring4的那些事,面试重点

分析
--为什么要有Configuration注解
--Ssm项目中spring.Xml里加入另一个xml文件,该如何配置?
--在dubbo项目里,经常加入consumer.xml和provider.xml,使用的是什么方式加载这些xml的?
--ssm项目里<import resource=”mybatis.xml”></import>是什么意思?
--ssm项目是如何启动的,和servlet+jdbc的项目有什么区别?
--ssm web项目如何加载spring和springmvc的?
--web项目是直接管理mybatis的吗?
SpringBoot unit 2th,关于spring4的那些事,面试重点

这样spring IOC会读取这个xml文件,然后生成其对应的对象,testService2和testService3
测试代码如下:
SpringBoot unit 2th,关于spring4的那些事,面试重点

在Boot项目中一般不采用这种方式,但有的项目会是ssm和boot一起使用,那么这种方式就会经常使用,boot项目给使用xml的传统方式,预留了一个【@ImportResource注解类】

以下这种注入会不会报错?会报什么错?
SpringBoot unit 2th,关于spring4的那些事,面试重点

总结:本节需要对spring4 IOC/DI有深刻的理解

推荐spring in Action电子书

3.16.2 【boot5th @Value注解】
导入:
@Value是非常常用的注解,比如在使用RedisUtil工具类的时候。
我们需要读取一些我们自己定义的配置文件的信息,比如在页面有一个选择公司的下拉框,我希望把公司的信息写在properties里,那么我们需要在controller和service里读取出这些信息。
Example as below:
Companyname: neu
Companyname2: bw
Companyname3: toshiba
在页面做一个下拉框,显示公司的信息

使用起来也非常简单,首先搭建一个空的springboot项目
在yml文件里增加配置信息,如下
SpringBoot unit 2th,关于spring4的那些事,面试重点

然后编写类ConfigValueTYml如下图
SpringBoot unit 2th,关于spring4的那些事,面试重点

生成setter和getter方法
测试代码如下:
SpringBoot unit 2th,关于spring4的那些事,面试重点

【context是spring4容器】
Result as below:
SpringBoot unit 2th,关于spring4的那些事,面试重点

【思考题:如何把信息输出到页面上?】
【@value是boot的注解吗?】
【在controller和service里如何注入DI ConfigValueYml对象?】

先搭建一个空boot项目:
3.16.3【@ConfigurationProperties注解】
当项目的配置文件的内容不是很多时,可以方便的使用@value注解,但是当项目里的配置文件的内容非常多时,更多的时候,我们采用的是单独建立一个或多个properties文件
比如我们可以在resources里建立一个config.properties
Pic as below
SpringBoot unit 2th,关于spring4的那些事,面试重点

编写ConfigYml类,读取config.properties
SpringBoot unit 2th,关于spring4的那些事,面试重点

增加setter和getter方法
prefix代表前缀
PropertySource代表读取classpath下的config.properties文件
实际项目如果配置文件的内容非常非常多,那么只能采用这总方式,非常方便

Test code as below
SpringBoot unit 2th,关于spring4的那些事,面试重点

【在controller里和service里和jsp页面里如何使用?】
【测试显示结果?】

答案:
SpringBoot unit 2th,关于spring4的那些事,面试重点

3.16.4【@Scheduled spring定时器】
导入:
定时器也是一个非常常用的功能,而且是面试常问的技术点
需要大家重点掌握,这个知识点很小,之前大家学习过spring,应该使用过

搭建boot空项目,as unit One method
添加com.zz.unit package
新建 ConfigSchedule类 as below

每8秒运行一次

启动类上@EnableScheduling注解

运行结果如下

3.16.5【boot6th 下servlet使用】

导入:
传统的servlet在boot项目下如何使用?

新建一个空boot项目

UrlPatterns是访问地址

--response.getWrite().write(“ajax json”);是什么?面试经常问
--json如何使用

启动类:

必须用@ServletComponentScan扫描servlet所在的包
因为WebServlet不是spring的注解,是java ee的注解

总结:所以java ee的注解都要用ServletComponentScan扫描,否则在boot项目下不生效
那么Spring的注解为什么不用扫描?比如@Service,@Component,@Controller等等,

运行boot项目,看servlet的效果
Effect as below
3.16.6【boot6th 默认log】
Log日志是我们日考和周考,月考都常考的
Code as below

Pom不用任何改变
使用log demo as below

使用起来非常简单
运行结果

Properties code as below

logging.level.root=info,设置日志的级别为info,小于info级别的所有日志都可以显示
Logging的几种级别 info, debug, error等
Logging.File=日志保存的位置
本案例在d盘下xxx.Log文件里有日志信息。

3.16.7【boot7th 不使用boot项目默认的日志功能】
一般不常用,boot项目的特点就是简化配置文件的内容

在application.properties里

Logback.xml文件内容如下

--Pattern里是日志的格式
--我们学习的是boot项目如何使用log,并不是日志的配置文件的使用,所以由于时间有限,这里对配置文件不做过多的介绍了
Summary,
第二单元的内容比较多,如果spring基础不好的同学,一档要反复的练习上课演示的代码。跟着录屏,反复的敲3遍以上才能掌握。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这