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 文件的内容如下所示

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

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

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

3.3创建一个可执行的JAR

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

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

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

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

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

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

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 文件中继承启动父级,如下所示。

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

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

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

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

3.10SpringBoot Bean和依赖注入

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

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

3.11Spring Boot应用程序属性

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

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

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

3.12属性文件

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

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

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


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

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

文件:application-dev.properties

文件:application-prod.properties

在运行JAR文件时,需要根据每个属性文件指定spring活动配置文件。 默认情况下,Spring Boot应用程序使用application.properties 文件。 设置Spring活动文件的命令如下所示

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

现在,Tomcat已经开始使用端口9090(http),如下所示

可以设置生产活动配置文件,如下所示

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

现在,Tomcat开始使用4431端口(http),如下所示

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

命令设置开发活动配置文件如下

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

现在,Tomcat开始使用端口9090(http),如下所示

设置生产活动配置文件的命令如下

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


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

分析
--为什么要有Configuration注解
--Ssm项目中spring.Xml里加入另一个xml文件,该如何配置?
--在dubbo项目里,经常加入consumer.xml和provider.xml,使用的是什么方式加载这些xml的?
--ssm项目里是什么意思?
--ssm项目是如何启动的,和servlet+jdbc的项目有什么区别?
--ssm web项目如何加载spring和springmvc的?
--web项目是直接管理mybatis的吗?

这样spring IOC会读取这个xml文件,然后生成其对应的对象,testService2和testService3
测试代码如下:

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

以下这种注入会不会报错?会报什么错?

总结:本节需要对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文件里增加配置信息,如下

然后编写类ConfigValueTYml如下图

生成setter和getter方法
测试代码如下:

【context是spring4容器】
Result as below:

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

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

编写ConfigYml类,读取config.properties

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

Test code as below

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

答案:

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遍以上才能掌握。

你可能感兴趣的:(spring,springboot)