第二单元 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 <JARFILE> 运行 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 <JARFILE> 运行它。
步骤 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 项目里 <import resource=”mybatis.xml”></import> 是什么意思?
–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 遍以上才能掌握。