SpringBoot 优雅加载 yaml 属性的方法
SpringBoot 优雅加载 yaml 属性的方法
一共有三种
1. 第一种非常简单
1)在edu.tyut.bean包下写如下内容
EmailUser.kt
@Component
@ConsistentCopyVisibility
internal data class EmailUser internal constructor(
@Value(value = "\${email.user}")
internal val user: String,
@Value(value = "\${email.email}")
internal val email: String
)
2)在application.yml添加如下内容:
email:
user: zsh
email: 2905154639@qq.com
2. 第二种需要在启动类配置
1)在edu.tyut.bean包下写如下内容
EmailUser.kt
@ConfigurationProperties(prefix = "email")
@ConsistentCopyVisibility
internal data class EmailUser internal constructor(
internal val user: String,
internal val email: String
)
2)在启动类配置如下内容
package edu.tyut
import edu.tyut.bean.EmailUser
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication
@SpringBootApplication
@EnableConfigurationProperties(value = [EmailUser::class]) // <-
private class Application
internal fun main(args: Array<String>) {
runApplication<Application>(*args)
}
3)在application.yml添加如下内容:
email:
user: zsh
email: 2905154639@qq.com
3. 第三种较为复杂
1)在edu.tyut.bean包下写如下内容
EmailUser.kt
@ConfigurationProperties(prefix = "email")
@ConsistentCopyVisibility
internal data class EmailUser internal constructor(
internal val user: String,
internal val email: String
)
2)在启动类配置如下内容
package edu.tyut
import edu.tyut.bean.EmailUser
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.runApplication
@SpringBootApplication
@EnableConfigurationProperties(value = [EmailUser::class]) // <-
private class Application
internal fun main(args: Array<String>) {
runApplication<Application>(*args)
}
3)在email-config.yml添加如下内容:
email:
user: zsh
email: 2905154639@qq.com
4)在edu.tyut.processor包下新建如下:
EmailEnvironmentPostProcessor.kt
package edu.tyut.processor
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean
import org.springframework.boot.SpringApplication
import org.springframework.boot.env.EnvironmentPostProcessor
import org.springframework.core.env.ConfigurableEnvironment
import org.springframework.core.env.PropertiesPropertySource
import org.springframework.core.io.ClassPathResource
import java.util.Properties
internal class EmailEnvironmentPostProcessor : EnvironmentPostProcessor {
private val logger: Logger = LoggerFactory.getLogger(this.javaClass)
override fun postProcessEnvironment(
environment: ConfigurableEnvironment?,
application: SpringApplication?
) {
println("postProcessEnvironment...")
logger.info("EmailEnvironmentPostProcessEnvironment")
val resource = ClassPathResource("email-config.yml")
val factory = YamlPropertiesFactoryBean()
factory.setResources(resource)
factory.afterPropertiesSet()
factory.`object`?.let { properties: Properties ->
logger.info("properties: ${properties.propertyNames().toList()}")
val propertySource = PropertiesPropertySource("emailConfig", properties)
environment?.propertySources?.addLast(propertySource)
}
}
}
5)resources/META-INF/spring.factories文件下注册:
org.springframework.boot.env.EnvironmentPostProcessor=\
edu.tyut.processor.EmailEnvironmentPostProcessor
推荐第一种方式,非常简单

SpringBoot 优雅加载 yaml 属性的方法
浙公网安备 33010602011771号