下面是关于springboot中.yml文件参数的读取方式的完整攻略。
1.参数的读取方式
在springboot中,我们可以使用yml文件作为配置文件,然后通过SpringBoot提供的@ConfigurationProperties注解将其中的配置值读取到Java对象中。yml文件中支持的数据类型包括字符串、数字、布尔等基本类型,以及对象类型等。
在yml文件中,我们可以使用冒号来分隔键值对,使用缩进来表示层次结构。下面是一个简单的例子。
server:
port: 8080
path: /api
session:
timeout: 10m
在上面的例子中,我们定义了一个server对象,它包括端口号、路径和会话超时时间等属性。
要读取yml文件中的参数值,我们可以定义一个Java对象,使用@ConfigurationProperties注解来声明它,然后将该对象注入到Spring容器中即可。下面是示例代码。
@Configuration
@ConfigurationProperties(prefix = "server")
public class ServerConfig {
private int port;
private String path;
private Duration sessionTimeout;
// 省略getter和setter方法
}
在上面的代码中,我们定义了一个ServerConfig对象,并使用@ConfigurationProperties注解将它与yml文件中的server对象关联起来。prefix参数用来指定yml文件中的键值对前缀,这里指定为server,即读取以server开头的键值对。
注意,在这里我们使用了Duration类型来表示时间间隔。它支持各种时间单位,比如秒、分钟、小时等,以及数字和字母等方式表示时间。例如,10m就表示10分钟。
2. 示例说明
下面我们就通过两个示例来详细说明yml文件参数的读取方式。
示例1
首先,我们有一个yml文件,内容如下。
myapp:
name: "myapp"
version: "1.0"
description: "This is a demo application."
我们的目标是将其中的配置值读取到一个Java对象中,代码如下。
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {
private String name;
private String version;
private String description;
// 省略getter和setter方法
}
在上面的代码中,我们使用@ConfigurationProperties注解将MyAppConfig类与yml文件中的myapp对象关联起来,prefix参数指定为myapp。
在Spring容器中注入该对象,代码如下。
@Configuration
public class AppConfig {
@Bean
@ConfigurationProperties(prefix = "myapp")
public MyAppConfig myAppConfig() {
return new MyAppConfig();
}
}
在上面的代码中,我们使用@Bean注解将MyAppConfig对象注入到Spring容器中,并使用@ConfigurationProperties注解将它与yml文件中的myapp对象关联起来,prefix参数也是指定为myapp。这样,在MyAppConfig中的属性就可以自动地从yml文件中读取相应的配置值了。
示例2
现在,我们有一个更加复杂的yml文件,内容如下。
myapp:
name: "myapp"
version: "1.0"
description: "This is a demo application."
database:
host: "localhost"
port: 3306
username: "root"
password: "root"
logging:
level:
root: "INFO"
org:
springframework: "DEBUG"
hibernate: "WARN"
我们的目标是将其中的配置值读取到多个Java对象中,并支持级联属性的读取。
首先,我们定义一个MyAppConfig对象,用来读取myapp对象中的配置值,代码如下。
@ConfigurationProperties(prefix = "myapp")
public class MyAppConfig {
private String name;
private String version;
private String description;
private DatabaseConfig database;
// 省略getter和setter方法
}
在上面的代码中,我们新增了一个DatabaseConfig类型的属性,用来读取myapp对象下的database对象的配置值。
接下来,我们定义一个DatabaseConfig对象,用来读取database对象中的配置值,代码如下。
public class DatabaseConfig {
private String host;
private int port;
private String username;
private String password;
// 省略getter和setter方法
}
在上面的代码中,我们定义了一个DatabaseConfig对象,并提供了相应的属性方法。这里的属性名称需要与yml文件中的键值对名称一一对应。
最后,我们定义一个LoggingConfig对象,用来读取logging对象中的配置值,代码如下。
@ConfigurationProperties(prefix = "logging")
public class LoggingConfig {
private LevelConfig level;
// 省略getter和setter方法
}
在上面的代码中,我们新增了一个LevelConfig类型的属性,用来读取logging对象下的level对象的配置值。
最后,我们在Spring容器中注入这三个对象,代码如下。
@Configuration
public class AppConfig {
@Bean
@ConfigurationProperties(prefix = "myapp")
public MyAppConfig myAppConfig() {
return new MyAppConfig();
}
@Bean
public DatabaseConfig databaseConfig() {
return myAppConfig().getDatabase();
}
@Bean
@ConfigurationProperties(prefix = "logging")
public LoggingConfig loggingConfig() {
return new LoggingConfig();
}
}
在上面的代码中,我们分别使用@Bean注解注入MyAppConfig、DatabaseConfig和LoggingConfig三个对象。注意,在DatabaseConfig中,我们通过myAppConfig().getDatabase()方法获取了MyAppConfig对象中的database属性,实现了级联属性的读取。
综上所述,通过以上两个示例,我们详细讲解了在springboot中.yml文件参数的读取方式的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot中.yml文件参数的读取方式 - Python技术站