手动执行与@ConfigurationProperties相当的处理

我想手动编写与Spring Boot的@ConfigurationProperties类似的自动读取配置文件值的机制。

例如,假设现在有一个名为kafka.properties的文件,我想将其加载到org.springframework.boot.autoconfigure.kafka.KafkaProperties中。

spring.kafka.bootstrap-servers=localhost:32770
spring.kafka.consumer.group-id=java-consumer-group
@ConfigurationProperties(prefix = "spring.kafka")
public class KafkaProperties {
  ...

要执行这个操作,可以使用MapConfigurationPropertySource作为Map的配置源(Properties继承自Hashtable)。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Properties;

import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.boot.context.properties.source.ConfigurationPropertySource;
import org.springframework.boot.context.properties.source.MapConfigurationPropertySource;

public class HogeMain {
    public static void main(String[] args) throws IOException {
        Properties properties = new Properties();
        properties.load(Files.newInputStream(Paths.get("kafka.properties")));

        ConfigurationPropertySource source= new MapConfigurationPropertySource(properties);
        Binder binder = new Binder(source);

        KafkaProperties kafkaProperties = binder.bind("spring.kafka", KafkaProperties.class).get();
    }
}

在使用YAML时,可以通过YamlPropertiesFactoryBean获取Properties,并将其传递。

YamlPropertiesFactoryBean y = new YamlPropertiesFactoryBean();
y.setResources(new ClassPathResource("hoge.yml"));
Properties object = y.getObject();

请看下面的参考。

    https://stackoverflow.com/questions/26940583/can-i-manually-load-configurationproperties-without-the-spring-appcontext/39774535
广告
将在 10 秒后关闭
bannerAds