加载 resources下自定义 yml
需要重写 接口。PropertySourceFactory
YamlPropertySourceFactory.java
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.env.PropertiesPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import org.springframework.lang.Nullable;
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(@Nullable String name, EncodedResource resource) throws IOException {
Properties propertiesFromYaml = loadYamlIntoProperties(resource);
String sourceName = name != null ? name : resource.getResource().getFilename();
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
}
private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
try {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
} catch (IllegalStateException e) {
// for ignoreResourceNotFound
Throwable cause = e.getCause();
if (cause instanceof FileNotFoundException)
throw (FileNotFoundException) e.getCause();
throw e;
}
}
}
blog.yml
foo:
bar: baz
YMLConfig.java
import lombok.Data;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@Data
@ToString
@PropertySource(factory = YamlPropertySourceFactory.class, value = "classpath:blog.yml")
public class YMLConfig {
@Value("${foo.bar}")
private String bar;
}
加载 application.yml
import lombok.Data;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
@Data
@ToString
public class YMLConfig {
@Value("${foo.bar}")
private String bar;
}
加载 自定义 yml.properties
yml.properties
foo.bar=sdfsafa
PropertiesConfig .java
import lombok.Data;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@Data
@ToString
@PropertySource("classpath:yml.properties")
public class PropertiesConfig {
@Value("${foo.bar}")
private String bar;
}
test.java 测试类
test.java
import com.mchange.v2.cfg.PropertiesConfig;
import com.ruoyi.project.tool.gen.util.YMLConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class test {
@Autowired
YMLConfig ymlConfig;
@Test
public void getYML(){
System.out.println("config:"+ymlConfig.toString());
System.out.println(ymlConfig.getBar());
}
@Autowired
PropertiesConfig propertiesConfig;
@Test
public void getProperties(){
System.out.println("config:"+propertiesConfig.toString());
System.out.println(propertiesConfig.getBar());
}
}