Spring Boot @PropertySource 加载指定配置文件、@ImportResource 导入Spring 配置文件

目录

@PropertySource 加载 properties 配置文件

@PropertySource 加载 yml 配置文件

@ImportResource 导入Spring 配置文件


@PropertySource 加载 properties 配置文件

1、通过《Spring Boot  @ConfigurationProperties 、@Value 注值》知道使用“@Value”与“@ConfigurationProperties”可以从全局配置文件“application.properties”或者“application.yml”中取值,然后为需要的属性赋值。

2、当应用比较大的时候,如果所有的内容都当在一个配置文件中,就会显得比较臃肿,同时也不太好理解和维护,此时可以将一个文件拆分为多个,使用 @PropertySource 注解加载指定的配置文件

3、下面演示使用 @PropertySource 注解 加载类路径下的 user.properties 配置文件,为 User.java POJO 对象的属性赋值。

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * @author wangmaoxiong
 * Created by Administrator on 2018/7/11 0011.
 * 用户···实体
 * @ConfigurationProperties 表示 告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;
 * prefix = "user" 表示 将配置文件中 key 为 user 的下面所有的属性与本类属性进行一一映射注入值,如果配置文件中
 * 不存在 "user" 的 key,则不会为 POJO 注入值,属性值仍然为默认值
 * 

* @Component 将本来标识为一个 Spring 组件,因为只有是容器中的组件,容器才会为 @ConfigurationProperties 提供此注入功能 * @PropertySource (value = { " classpath : user.properties " }) 指明加载类路径下的哪个配置文件来注入值 */ @PropertySource(value = {"classpath:user.properties"}) @Component @ConfigurationProperties(prefix = "user") public class User { private Integer id; private String lastName; private Integer age; private Date birthday; private List colorList; private Map cityMap; private Dog dog; //省略 getter、setter 、toString 方法没粘贴 }

/**
 * @author wangmaoxiong
 * Created by Administrator on 2018/7/11 0011.
 * 狗 实体类-----------普通 Java Bean。 
 * 被依赖项可以不加 @ConfigurationProperties 注解,但是必须提供 getter、setter 方法
 */
public class Dog {
    private Integer id;
    private String name;
    private Integer age;
    //省略 getter、setter 、toString 方法
}

4、在类路径下提供 user.properties 配置文件如下(.yml 文件也是同理):

user.id=111
user.lastName=张无忌
user.age=120
user.birthday=2018/07/11
user.colorList=red,yellow,green,blacnk
user.cityMap.mapK1=长沙市
user.cityMap.mapK2=深圳市
user.dog.id=7523
user.dog.name=狗不理
user.dog.age=3

5、测试运行:

import com.wmx.yuanyuan.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
@RunWith(SpringRunner.class)
@SpringBootTest
public class YuanyuanApplicationTests {
    /**
     * 因为 POJO类 使用了 Component 注解,就是 Spring 一个组件,交由了 Spring 容器注入值
     * 所以使用 @Autowired 或者 @Resource,DI 注入在取值即可
     */
    @Resource
    private User user;
    @Test
    public void contextLoads() {
        System.out.println("------------------------------********************--------------------------------------------");
        System.out.println("·······················" + user);
    }
}

@PropertySource 加载 yml 配置文件

1、在上面 properties 的基础上修改如下:

@PropertySource(value = {"classpath:user.yml"}, factory = PropertySourceFactory.class)

2、然后提供用于处理 yml 配置文件的属性资源工程如下:

import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource;
import java.io.IOException;
import java.util.List;
/**
 * 用于  @PropertySource 加载 yml 配置文件.
 *
 * @author wangmaoxiong
 * @version 1.0
 * @date 2020/5/25 20:45
 */
public class PropertySourceFactory extends DefaultPropertySourceFactory {
    @Override
    public PropertySource createPropertySource(String name, EncodedResource resource) throws IOException {
        if (resource == null) {
            return super.createPropertySource(name, resource);
        }
        List> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
        return sources.get(0);
    }
}

@ImportResource 导入Spring 配置文件

1、@ImportResource 注解用来导入 Spring 的配置文件,如核心配置文件 "beans.xml",从而让配置文件里面的内容生效;

2、如果应用中仍然想采用以前 xml 文件的配置方式,如 "beans.xml" ,则使用 “@ImportResource” 注解轻松搞定。

3、将 @ImportResource 标注在一个配置类上,通常直接放置在应用启动类上,和 @SpringBootApplication 一起即可。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
/**
 * 应用启动类
 *
 * @ImportResource 必须放置在配置类上,通常放在启动类即可,用 value 指明导入类路径下的那个 Spring 配置文件
 */
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class CocoApplication {
    public static void main(String[] args) {
        SpringApplication.run(CocoApplication.class, args);
    }
}

4、然后就可以在类路径下提供原始的 beans.xml 配置文件:




    
    

5、启动应用控制台会打印:loading XML bean definitions from class path resource [beans. xml] 表示加载成功。

 

你可能感兴趣的:(Spring,Boot)