一、基于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>,但觉得该方式比较麻烦,不太实用,在这里暂不做介绍,有兴趣的可以自己百度谷歌就行了。

Spring读取配置文件的方式总结的更多相关文章

  1. 关于spring读取配置文件的两种方式

    很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...

  2. java web路径和spring读取配置文件

    此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...

  3. Spring 读取配置文件(一)

    注册 @Configuration 标识的类,spring 读取配置文件的时候该类会被自动装载 package cn.com.receive;import org.springframework.be ...

  4. python读取配置文件的方式

    python读取配置文件的方式 1.从config.ini中读取,后缀无所谓,文件名字也无所谓,不过config.ini是常用写法,所谓见名知意 config.ini内容: [global] ip = ...

  5. Spring 读取配置文件(二)

    Spring 读取配置文件并调用 bean package cn.com.test.receive; import org.springframework.beans.factory.annotati ...

  6. Java读取配置文件的方式

    Java读取配置文件的方式-笔记 1       取当前启动文件夹下的配置文件   一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...

  7. Spring读取配置文件,获取bean的几种方式

    BeanFactory有很多实现类,通常使用 org.springframework.beans.factory.xml.XmlBeanFactory类.但对于大部分J2EE应用而言,推荐使 用App ...

  8. Spring读取配置文件的几种方式

    import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; imp ...

  9. Spring读取配置文件 @Value

    最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...

随机推荐

  1. Yii2系列教程六:集成编辑器

    上一篇文章我们实现了简单的用户权限管理,至于更先进的RBAC,我后面会单独出一篇文章来说说.在这一篇文章当中,我主要想写的是在Yii2中集成一个编辑器,因为在我们的实际开发当中,一个简单的textar ...

  2. 《深入理解Java虚拟机》笔记3

    垃圾收集算法 (1)标记清除 根据根搜索确定对象是否已死,已死对象标记,然后一起清除. 这个其实不算什么算法,最正常想法应该就是这样.但是,缺点 是效率不高,如果有很多不连续的小对象需要回收,会花好多 ...

  3. 手写一个死锁Demo

    相互持有对方锁,导致死锁 package jesse.test04; public class DeadLockSample extends Thread{ private String first; ...

  4. sqls

    ALTER TABLE `shh_data`.`topic_floor` ADD COLUMN `updated_date` DATETIME NULL AFTER `publish_date`,AD ...

  5. UVALive 3971 Assemble(模拟 + 二分)

    UVALive 3971 题意:有b块钱.想要组装一台电脑,给出n个配件的种类,名字,价格,品质因子.若各种类配件各买一个,总价格<=b,求最差品质配件的最大品质因子. 思路: 求最大的最小值一 ...

  6. C语言-求最大值

    #include<stdio.h> void main() {int a,b,c,d; scanf("%d,%d,%d",&a,&b,&c); ...

  7. Apache 使用gzip、deflate 压缩页面加快网站访问速度

    Apache 使用gzip 压缩页面加快网站访问速度 介绍: 网页压缩来进一步提升网页的浏览速度,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少.   原理 ...

  8. mui 事件绑定(on)

    除了可以使用addEventListener()方法监听某个特定元素上的事件外, 也可以使用.on()方法实现批量元素的事件绑定. 示例: 点击新闻列表,获取当前列表项的id,并将该id传给新闻详情页 ...

  9. atitit.MyEclipse10 中添加svn插件故障排除

    atitit.MyEclipse10 中添加svn插件故障排除 删除\configuration \org.eclipse.update 不行... 二. 在configuration下的config ...

  10. Zabbix触发器函数(取前后差值)

    获取最新值last zabbix触发器方法last用于获取item最新值或者第几个值以及某个时间的哪一个值. Last (most recent) T value is > N Last (mo ...