细粒度的自动配置
在Spring中有两种不同(但相关)的配置
- bean装配:声明在Spring应用上下文中创建哪些应用组件以及它们之间如何互相注入的配置。
- 属性注入:设置Spring应用上下文中bean的值的配置。
Spring中环境的抽象
Spring的环境抽象是各种配置属性的一站式服务。它抽取了原始的属性,这样需要这些属性的bean就可以从Spring本身中获取了。Spring环境会拉取多个属性源,包括:
- JVM系统属性;
- 操作系统环境变量;
- 命令行参数;
- 应用属性配置文件。
它会将这些属性聚合到一个源中,通过这个源可以注入到Spring的bean中。
Spring Boot自动配置的bean都可以通过Spring环境提取的属性进行配置。
配置Servlet容器的端口号
server:
port: 8081
如果将端口号设置为0,服务器并不会真的在端口0上启动。相反,它会任选一个可用的端口。在我们运行自动化集成测试的时候,这会非常有用,因为这样能够保证并发运行的测试不会与硬编码的端口号冲突。如果不关心应用在哪个端口启动,那么这种配置方式也非常有用,因为此时应用将会变成通过服务注册中心来进行查找的微服务。
配置数据源
spring:
datasource:
url: jdbc:h2:mem:testdb
driver-class-name: org.h2.Driver
username: sa
password: sa
jpa:
database-platform: org.hibernate.dialect.H2Dialect
Spring Boot在自动化配置DataSource bean的时候,会使用该连接。如果在类路径中存在Tomcat的JDBC连接池,DataSource将使用该连接池。否则,Spring Boot将会在类路径下尝试查找并使用如下的连接池实现:
- HikariCP
- Commons DBCP 2
配置日志
默认情况下,Spring Boot通过Logback配置日志,日志会以INFO级别写入到控制台中。
为了完全控制日志的配置,我们可以在类路径的根目录下(在src/main/resources中)创建一个logback.xml文件。
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF -->
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
在日志配置方面,你可能遇到的常见变更就是修改日志级别。借助Spring Boot的配置属性功能,我们不用创建logback.xml文件就能完成这些变更。
logging:
level:
root: INFO
org.springframework.security: DEBUG
使用profile进行配置
定义特定profile相关的属性的一种方式就是创建另外一个YAML或属性文件,其中只包含用于生产环境的属性。文件的名称要遵守如下的约定:application-{profile名}.yml或 application-{profile名}.properties。然后,我们就可以在这里声明适用于该profile的配置属性了。
在application.yml中进行激活
spring:
profiles:
active:
- dev
使用profile条件化地创建bean
@Profile注解可以将某些bean设置为仅适用于给定的profile。
@Bean
@Profile("dev")
public CommandLineRunner dataLoader(IngredientRepository repo) {
//do something...
}