SpringBoot Starter机制和资源文件的读取

SpringBoot Starter

他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。

SpringBoot Starter帮我们做了什么

我们先来回忆一下,在我们没有用SprinBoot的时候 是如何搭建一个Spring Web项目的?

1、pom文件中引入相关jar包,包括spring、springmvc、mysql-connector-java、log4j、等等相关jar ...

2、配置web.xml,Listener配置、Filter配置、Servlet配置、log4j配置、error配置 ...

3、配置数据库连接、配置spring事务

4、配置视图解析器

5、开启注解、自动扫描功能

6、配置完成后部署tomcat、启动调试

......

整个项目搭建好了,但半天甚至一天的时间过去了….

SpringBoot Starter起步依赖

我们来创建一个SpringBoot项目 看它到底做了什么?

在pom.xml文件如引入相关jar包:

SpringBoot Starter机制和资源文件的读取

spring-boot-starter-web包自动帮我们引入了web模块开发需要的相关jar包,spring-boot-starter-jpa帮我们引入了操作数据库相关的jar包。

SpringBoot Starter机制和资源文件的读取

从图中可以看到spring-boot-starter-web是把Web相关的jar包整合在一起了。这样就便于引入和管理。因此stater机制帮我们完成了项目起步所需要的的相关jar包。

SpringBoot读取资源文件

我们在开发SpringBoot项目的时候都会在application.properties文件中配置数据库的连接,如下图:

SpringBoot Starter机制和资源文件的读取

那么SpringBoot是如何读取yml或者properites配置文件中的属性来创建数据源的?

在DataSourceAutoConfiguration类里面,我们注意到使用了EnableConfigurationProperties这个注解。

SpringBoot Starter机制和资源文件的读取

DataSourceProperties中封装了数据源的各个属性,且使用了注解ConfigurationProperties指定了配置文件的前缀。

SpringBoot Starter机制和资源文件的读取

这就是为什么在application.properties文件中要配置spring.datasource的前缀属性

@EnableConfigurationProperties与@ConfigurationProperties这两个注解有什么用呢?我们先看一个例子:

SpringBoot Starter机制和资源文件的读取

application.properties文件中配置如下:

SpringBoot Starter机制和资源文件的读取

运行main函数:

SpringBoot Starter机制和资源文件的读取

从运行结果可以看出@ConfigurationProperties@EnableConfigurationPropertie的作用就是:

@ConfigurationProperties注解的作用是把yml或者properties配置文件转化为对应bean。

@EnableConfigurationProperties注解的作用是使@ConfigurationProperties注解生效。如果只配置@ConfigurationProperties注解,在spring容器中是获取不到yml或者properties配置文件转化的bean的。

通过这种方式,把yml或者properties配置参数转化为了对应的bean

那此时如果我要读取我自己的配置的数据又如何处理呢?我们在项目中新建一个mail.properties配置文件,内容如下:

SpringBoot Starter机制和资源文件的读取

新建一个MailProperties的类:

SpringBoot Starter机制和资源文件的读取

写一个测试类执行:

SpringBoot Starter机制和资源文件的读取

通过@ConfigurationProperties(prefix = "mail")@PropertySource("classpath:/mail.properties")就可以读取我们自己定义的资源文件了


分享到:


相關文章: