第二单元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课程导入
一、SpringBoot有灵活的配置方式
二、实际开发中选择一种简单使用的配置方式便可
三、兼容传统的spring配置方式
3.2建立项目html
pom.xml 文件的内容以下所示java
Spring Boot提供了许多Starters来在类路径中添加jar。 例如,要编写Rest Endpoint,须要在类路径中添加spring-boot-starter-web依赖项。请遵照下面显示的代码以便更好地理解 -
【编写web项目必须有的starter web】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类文件将以下面的代码所示 -ajax
3.3建立一个可执行的JARredis
建立一个可执行的JAR文件,在命令提示符下使用Maven和Gradle命令运行Spring Boot应用程序,以下所示 -
使用maven命令mvn clean install,以下所示 -spring
执行命令后,能够在命令提示符下看到 BUILD SUCCESS 的消息,以下所示 -json
用Java运行Hello World
建立可执行JAR文件后,能够在如下目录中找到它。对于Maven,能够在目标目录下找到JAR文件,以下所示segmentfault
如今,使用命令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遍以上才能掌握。