5.1 微调自动配置
5.1 微调自动配置
在我们深入研究配置属性之前,有必要确定在
- Bean wiring —— 它声明应用程序组件将在
Spring 应用程序上下文中作为bean 创建,以及它们应该如何相互注入。 - Property injection —— 在
Spring 应用程序上下文中设置bean 的值。
在
@Bean
public DataSource dataSource() {
return new EmbeddedDataSourceBuilder()
.setType(H2)
.addScript("taco_schema.sql")
.addScripts("user_data.sql", "ingredient_data.sql")
.build();
}
这里的
如果
但是,如果希望将
5.1.1 理解Spring 环境抽象
-
JVM 系统属性 -
操作系统环境变量
-
命令行参数
-
应用程序属性配置文件
然后,它将这些属性聚合到单一的源中,从这个源中可以注入
图
通过
server.port=9090
就我个人而言,我更喜欢在设置配置属性时使用
server:
port: 9090
如果希望在外部配置该属性,还可以在启动应用程序时使用命令行参数指定端口:
$ java -jar tacocloud-0.0.5-SNAPSHOT.jar --server.port=9090
如果想让应用程序总是在一个特定的端口上启动,可以把它设置为一个操作系统环境变量:
$ export SERVER_PORT=9090
注意,在将属性设置为环境变量时,命名风格略有不同,以适应操作系统对环境变量名称的限制。
正如我所说的,有几种设置配置属性的方法。当我们讲到第
在本章中不可能测试所有可用的配置属性。尽管如此,让我们来看看一些可能经常遇到的最有用的配置属性。我们将从几个属性开始,这些属性允许你调整自动配置的数据源。
5.1.2 配置数据源
此时,
虽然可以显式地配置
spring:
datasource:
url: jdbc:mysql://localhost/tacocloud
username: tacodb
password: tacopassword
虽然需要将适当的
spring:
datasource:
schema:
- order-schema.sql
- ingredient-schema.sql
- tao-schema.sql
- user-schema.sql
data:
- ingredients.sql
可能显式数据源配置不是你的风格。相反,你可能更喜欢在
spring:
datasource:
jndi-name: java:/comp/env/jdbc/tacoCloudDS
如果设置了
5.1.3 配置嵌入式服务器
已经看到如何通过设置
server:
port: 0
尽管正在显式地设置
但是底层服务器不仅仅是一个端口。需要对底层容器做的最常见的事情之一是将其设置为处理
$ keytool -keystore mykeys.jks -genkey -alias tomcat -keyalg RSA
你将会被问到几个关于你的名字和公司的问题,这些问题大部分都是无关紧要的。但当被要求输入密码时,记住你的密码。对于本例,我选择
接下来,需要设置一些属性,用于在嵌入式服务器中启用
server:
port: 8443
ssl:
key-store: file:///path/to/mykeys.jks
key-store-password: letmein
key-password: letmein
在这里file://
classpath:
有了这些属性,应用程序应该侦听端口
5.1.4 配置日志
大多数应用程序都提供某种形式的日志记录。即使应用程序没有直接记录任何内容,应用程序使用的库也肯定会记录它们的活动。
默认情况下,
要完全控制日志配置,可以在类路径的根目录(在
<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>
<logger name="root" level="INFO"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
除了用于日志的模式外,
注意:
logback.xml 中包含的具体内容超出了本书的范围。有关更多信息,请参阅Logback 的文档。
对日志配置最常见的更改是更改日志级别,可能还会指定应该写入日志的文件。使用
要设置日志记录级别,需要创建以
logging:
level:
root: WARN
org:
springframework:
security: DEBUG
另外,可以将
logging:
level:
root: WARN
org:
springframework.security: DEBUG
现在,假设希望将日志条目写入位于
logging:
path: /var/logs/
file: TacoCloud.log
level:
root: WARN
org:
springframework:
security: DEBUG
假设应用程序对
5.1.5 使用特殊的属性值
在设置属性时,不限于将它们的值声明为硬编码的字符串和数值。相反,可以从其他配置属性派生它们的值。
例如,假设(不管出于什么原因)想要设置一个名为${}
占位符标记:
greeting:
welcome: ${spring.application.name}
你甚至可以把这个占位符嵌入到其他文本中:
greeting:
welcome: You are using ${spring.application.name}
正如你所看到的,使用配置属性配置