在Spring Boot中,如何将yml节加载为java.util.Properties

Nir*_*jan 6 java spring spring-boot

在我的spring boot应用程序中,我具有以下配置:

server:
  host: a.com
  port: 5922
  enable-log: true
Run Code Online (Sandbox Code Playgroud)

我想将以上内容阅读为java.util.Properties。我试着把以下课程:

@ConfigurationProperties(prefix = "server")
public class ServerConfig {
  private Properties serverProps;
  // ... Getter/setter
}
Run Code Online (Sandbox Code Playgroud)

引导配置文件如下所示:

@Configuration
@ComponentScan("com.demo")
@EnableAspectJAutoProxy(proxyTargetClass = true)
@EnableConfigurationProperties({ServerConfig.class})
@Profile({"dev"})
public class TestAppConfiguration {
}

@EnableAutoConfiguration
@SpringBootApplication
public class TestAppInitializer {
  public static void main(final String[] args) {
    SpringApplication.run(TestAppInitializer.class, args);
  }
}
Run Code Online (Sandbox Code Playgroud)

单元测试班:

@SpringApplicationConfiguration(classes = {TestAppInitializer.class})
@ActiveProfiles("dev")
public class ServerConfigTest extends AbstractTestNGSpringContextTests {
  @Autowired
  private ServerConfig serverConfig;

  @Test
  public void printDetails() {
    logger.debug("ServerConfig.properties --> {}", serverConfig.getProperties());
  }
}
Run Code Online (Sandbox Code Playgroud)

输出为 ServerConfig.properties --> null

我不确定为什么会这样。我想到的唯一想法是,下面的配置参数server基本上是扁平字符串。我有什么办法可以将它们读为Properties

小智 5

@Bean({"kaptchaProperties"})
@ConfigurationProperties(prefix = "custom.kaptcha")
public Properties getProperties() {
    return new Properties();
}
Run Code Online (Sandbox Code Playgroud)


lub*_*nac 2

AFAIK,您无法java.util.Properties使用注释将它们加载到其中@ConfigurationProperties

你需要创建这个:

@Component
@ConfigurationProperties(prefix = "server")
public class ServerConfig {
  private String host;
  private String port;
  private String enableLog;
  // ... Getter/setter
}
Run Code Online (Sandbox Code Playgroud)