如题,本文主要罗列一些在使用 Spring Boot 的过程中,大家可能不太知道的点。
@SpringBootApplication
注解开启了 Spring 组件扫描和 Spring Boot 的主动配置功能。org.springframework.boot:spring-boot-maven-plugin
构建插件的主要功能是把项目打包成一个可执行的超级 JAR,包括把应用程序的所有依赖打入 JAR 文件内,并为 JAR 添加一个描述文件,其中的内容能让你用java -jar
命令来运行应用程序。spring-boot-starter-parent
作为上一级依赖,就能够利用 Maven 的依赖管理功能,继承很多常用库的依赖版本,在你声明依赖时就不用再去指定版本号了。spring-boot-autoconfigure
的 JAR 文件,其中包含了很多配置类。而这些配置类上,都加了@Conditional
注解,即条件注解,引入条件化配置。java:comp/env
里的 JNDI 属性;
- JVM 系统属性;
- 操作系统环境变量;
- 随机生成的带random.*
前缀的属性(在设置其他属性时,可以引用它们,比如${random.long}
);
- 应用程序以外的application.properties
或者application.yml
文件;
- 打包在应用程序内的application.properties
或者application.yml
文件;
- 通过@PropertySource
标注的属性源;
- 默认属性。application.properties
和application.yml
文件能够放在以下四个位置,优先级从高到低排序:
- 外置,相对于应用程序运行目录的/config
子目录里;
- 外置,在应用程序运行的目录里;
- 内置,在config
包内;
- 内置,在Classpath
根目录。application.properties
和application.yml
文件时,那么application.yml
里的属性会覆盖application.properties
里的属性。INFO
级别输出到控制台。如果你想要切换日志实现,如Log4j
或者Log4j2
,那么你只需要修改依赖,引入对应该实现的起步依赖,同时排除掉Logback
即可。DataSource
Bean 是一个连接池,如果Classpath
里有 Tomcat 的连接池DataSource
,那么就会使用这个连接池;否则,Spring Boot 会在Classpath
里查找以下连接池:@ConfigurationProperties
注解,从技术上来讲,仅使用它是不会生效的,除非先向 Spring 配置类添加@EnableConfigurationProperties
注解。但通常无需这么做,因为 Spring Boot 自动配置后面的全部配置类都已经添加了@EnableConfigurationProperties
注解。因此,除非你完全不用自动配置(那怎么可能?),否则就无需显式地添加@EnableConfigurationProperties
注解。i.loveU
这个属性和i.love_u
以及i.love-u
都是等价的。error
的视图,如果找不到就用默认的白标错误视图。如果我们使用了不同的视图解析器,则命名略有差别,如:View
接口的 Bean,其 ID 为error
,由 Spring 的BeanNameViewResolver
所解析;error.html
的 Thymeleaf 模板;error.ftl
的 FreeMarker模板;error.vm
的 Velocity模板;error.jsp
的 JSP 模板。SpringJUnit4ClassRunner
可以在基于 JUnit 的应用程序测试里加载 Spring 应用程序上下文。@SpringApplicationConfiguration
替代@ConntextConfiguration
注解。MockMvcBuilders
,该类提供了两个静态方法:standaloneSetup()
和webAppContextSetup()
。两者的主要区别在于,standaloneSetup()
希望你手工初始化并注入你要测试的控制器,而webAppContextSetup()
则基于一个WebApplicationContext
的实例,通常由 Spring 加载。@WebIntegrationTest
注解,可以声明你不仅希望 Spring Boot 为测试创建应用程序上下文,还要启动一个嵌入式的 Servlet 容器。@WebIntegrationTest
的value
属性接受一个String
数组,数组中的每项都是键值对,形如name=value
,用来设置测试中使用的属性。@WebIntegrationTest
还提供了一个randomPort
属性,其值为布尔型,表示让服务器在随机端口上启动。server.port
属性设置为 0,也可以让 Spring Boot 选择一个随机的可用端口。org.springframework.boot:spring-boot-starter-actuator
依赖,可以启用 Spring Boot 的 Actuator 端点,用于监控项目的运行情况。/beans
端点,可以获取上下文里每个 Bean 的情况,包括其 Java 类型以及注入的其他 Bean。/metrics
端点,可以获取应用程序的度量信息,比如内存使用量和 HTTP 请求计数等。/trace
端点,可以获取应用程序所有 Web 请求的详细信息,包括请求方法、路径、时间戳以及请求和响应的头信息。/dump
端点,可以生成当前线程活动的快照。/shutdown
端点,可以关闭当前运行的程序,默认为未启用状态,可以通过endpoints.shutdown.enabled=true
属性开启。org.springframework.boot:spring-boot-starter-remote-shell
依赖,可以启用 Spring Boot 集成的 CRaSH,是一种能嵌入任意 Java 应用程序的 shell 脚本。开启 shell 功能后,其用户名是user
,密码本身是随机生成的,每次运行应用程序时都会有所变化,会将其写入到日志中,监听2000
端口号。PublicMetrics
接口,可以提供自己需要的度量信息。该接口定义了一个metrics
方法,返回一个Metric
对象的集合。/trace
端点报告的跟踪信息都存储在内存仓库里,100 个条目封顶。一旦仓库满了,就开始移除条目,给新的条目腾出空间。为了避免这个问题,我们可以声明自己的InMemoryTraceRepository
Bean,将它的容量调制 100 以上。HealthIndicator
接口,并实现其health()
方法。management.context-path
属性设置端点的上下文路径。默认情况下,这个属性是空的,所以 Actuator 的端点路径都是相对于根路径的。版权声明:本文的内容主要来自于《Spring Boot 实战》这本书,感兴趣的同学可以自行购买,阅读。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。