zoukankan      html  css  js  c++  java
  • Spring读取配置文件的方式总结

    一、基于XML配置的方式

    1.使用 PropertyPlaceholderConfigurer

    - 在 applicationContext.xml 中配置:

    <context:property-placeholder location="classpath*:db.properties"/>

    或者:

    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath*:db.properties" ></property>
    </bean>

    - 之后就可以在代码中访问了:

    @Component
    public class TestComponent {
        @Value("${jdbc.url}")
        private String url;
    }

    2.使用 PropertiesFactoryBean

    - 注册 bean

    <bean id="dbProperties"
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
      <property name="locations">
        <list>
          <value>classpath*:db.properties</value>
        </list>
      </property>
    </bean>

    - 使用

    private String url;
    
    @Resource(name = "dbProperties")
    private Properties properties;
    
    @PostConstruct
    public void init() {
        url = properties.getProperty("jdbc.url");
    }

    3.使用 ResourceBundleMessageSource

    - 注册 bean

    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:db.properties</value>
            </list>
        </property>
    </bean>

    - 访问
    可以使用如下方法来访问:

    ((ApplicationContext)context).getMessage("jdbc.url", null, null);

    或者:

    @Component
    public class BeanTester {
        @Autowired
        private MessageSource messageSource;
    
        public void execute(){
            String url = this.messageSource.getMessage("jdbc.url", null, null);
        }
    }

    二、基于Java配置的方式

    1.使用 PropertySource

        1.1通过 Environment 来获取

    @Configuration
    // 另有 PropertySources 包含多个 @PropertySource 来配置多个配置文件
    @PropertySource("classpath:db.properties")
    public class PropertySource {
        @Autowired
        Environment env;
    
        public void execute() {
            // 你可以按照如下的方式获取属性值
            String url = this.env.getProperty("jdbc.url");
        }
    }

        1.2通过 PropertySourcesPlaceholderConfigurer 来获取

    @Configuration
    @PropertySource("classpath:db.properties")
    public class PropertySource {
        @Bean
        public static PropertySourcesPlaceholderConfigurer placeHolderConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    }

    调用:

    @Component
    public class TestComponent {
        @Value("${jdbc.url}")
        private String url;
    }

    2.使用 PropertiesFactoryBean

    - 注册 bean:

    @Bean
    public PropertiesFactoryBean propertiesFactoryBean() {
        PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
        // 可以配置多个配置文件,也可以使用setLocation值设置单个配置文件
        Resource[] resources = new ClassPathResource[]{new ClassPathResource("db.properties")};
        propertiesFactoryBean.setLocations(resources);
        return propertiesFactoryBean;
    }

    - 使用:

    @Component
    public class BeanTester {
        private String url;
    
        @Resource(name = "propertiesFactoryBean")
        private Properties properties;
    
        @PostConstruct
        public void init() {
            // 取到jdbc.url对应的值并赋给了全局变量url
            url = properties.getProperty("jdbc.url");
        }
    }

    三、SpringBoot

    1. application.xml (或.yml) 中有如下配置内容:

    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test

    1.1 可以直接通过 @Value 注解获取:

    @SpringBootApplication
    @RestController
    public class Applaction {
        @Value("${spring.datasource.url}")
        private String url;
    }

    1.2可以通过 Environment 来获取:

    @SpringBootApplication
    @RestController
    public class Applaction {
        @Autowired
        private Environment env;
    
        public void test() {
            // 获取配置文件中的属性
            env.getProperty("spring.datasource.url");
        }
    }

    2.如果是用户自定义的配置文件,我们可以使用 @ConfigurationProperties 注解来获取:

    如你在resources/resources下有一个配置文件 author.properties:

    author.name=EricChan
    author.sex=male

    我们可以通过 @ConfigurationProperties 来将 properties 属性和一个 Bean 及其属性关联,从而实现类型安全的配置:

    @Getter
    @Setter
    @ToString @Component @PropertySource(value
    = "classpath:resources/author.properties", encoding = "UTF-8") @ConfigurationProperties public class Author { private String name; private String sex; }

    之后我们就可以通过将该 Bean 注入到其他需要使用的地方就可以获取了,比如:

    @RestController
    public class TestController {
        public final Author author;
        
        // 将该 bean 注入进来
        public TestController(final Author author) {
            this.author = author;
        }
    
        public void test() {
            System.out.println(author);
        }
    }

    还有种通过注册监听器的方式可以来实现,实现 ApplicationListener<ApplicationStartedEvent>,但觉得该方式比较麻烦,不太实用,在这里暂不做介绍,有兴趣的可以自己百度谷歌就行了。

  • 相关阅读:
    Jenkins系列——使用SonarQube进行代码质量检查
    HTTP1.0工作原理
    Jenkins系列——使用checkstyle进行代码规范检查
    Jenkins系列——定时构建
    Hadoop环境搭建
    eclipse3.4+对的处理插件(附SVN插件安装实例)
    MD5
    RedHat6.5更新软件源
    ubuntu软件推荐
    disconf系列【2】——解决zk部署情况为空的问题
  • 原文地址:https://www.cnblogs.com/chansblogs/p/9577931.html
Copyright © 2011-2022 走看看