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>,但觉得该方式比较麻烦,不太实用,在这里暂不做介绍,有兴趣的可以自己百度谷歌就行了。
Spring读取配置文件的方式总结的更多相关文章
- 关于spring读取配置文件的两种方式
很多时候我们把需要随时调整的参数需要放在配置文件中单独进行读取,这就是软编码,相对于硬编码,软编码可以避免频繁修改类文件,频繁编译,必要时只需要用文本编辑器打开配置文件更改参数就行.但没有使用框架之前 ...
- java web路径和spring读取配置文件
此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...
- Spring 读取配置文件(一)
注册 @Configuration 标识的类,spring 读取配置文件的时候该类会被自动装载 package cn.com.receive;import org.springframework.be ...
- python读取配置文件的方式
python读取配置文件的方式 1.从config.ini中读取,后缀无所谓,文件名字也无所谓,不过config.ini是常用写法,所谓见名知意 config.ini内容: [global] ip = ...
- Spring 读取配置文件(二)
Spring 读取配置文件并调用 bean package cn.com.test.receive; import org.springframework.beans.factory.annotati ...
- Java读取配置文件的方式
Java读取配置文件的方式-笔记 1 取当前启动文件夹下的配置文件 一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...
- Spring读取配置文件,获取bean的几种方式
BeanFactory有很多实现类,通常使用 org.springframework.beans.factory.xml.XmlBeanFactory类.但对于大部分J2EE应用而言,推荐使 用App ...
- Spring读取配置文件的几种方式
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; imp ...
- Spring读取配置文件 @Value
最近在学习Spring如何读取配置文件,记录下方便自己也方便别人: 大致分为两类吧,一种的思路是利用Spring的beanFactoryPostProcessor读取配置文件内容到内存中,也就是应用程 ...
随机推荐
- Delphi~通过程序窗体句柄获取程序路径
http://www.cnblogs.com/Jesses/articles/1636323.html 引用PsAPI var h:HWND; pid: Cardinal; pHandle: T ...
- postprocessing stack v2
用了v2和unity2017.3.0f有兼容性问题 在assetbundle的情况下 CopyStd这个shader打不进去 在assetbundle的menafest里面有列但是shader.fin ...
- 增强学习--Sarsa算法
Sarsa算法 实例代码 import numpy as np import random from collections import defaultdict from environment i ...
- Node.js meitulu图片批量下载爬虫1.04版
//====================================================== // https://www.meitulu.com图片批量下载Node.js爬虫1. ...
- 使用Python发送电子邮件
使用python发送邮件并不难,这里使用的是SMTP协议. Python标准库中内置了smtplib,使用它发送邮件只需提供邮件内容与发送者的凭证即可. 代码如下: # coding:utf-8 im ...
- Unity3D在WebPlayer模式下的异常上报探索
原地址:http://www.cnblogs.com/hisiqi/archive/2013/07/21/3203527.html 我们知道,Unity3D在WebPlayer的发布模式下是沙箱环境中 ...
- Django——如何使用Template以及如何向template传递变量
如何使用模板系统 在Python代码中使用Django模板的最基本方式如下: 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Temp ...
- paypal - 支付所遇到的问题,编码等等
1.ipn支付方式编码问题,paypal默认编码为 gb2312,需要登录paypal后台,进入用户信息设置>销售工具>更多销售工具>paypal按钮编码设置>更多选项,全部修 ...
- Andrew Ng机器学习课程6
Andrew Ng机器学习课程6 说明 在前面尾随者台大机器学习基石课程和机器学习技法课程的设置,对机器学习所涉及到的大部分的知识有了一个较为全面的了解,可是对于没有动手敲代码并加以使用的情况,基本上 ...
- Data truncation: Data too long for column
是字符集问题引起的,用show full fields from + 表名就可以看出你的列的编码格式把它改成GBK或者GB2312.uTF-8.如果还不行的话,把你表的编码格式也改成上面的编码格式,我 ...