Spring读取外部属性-properties
概述
在Spring中处理外部值最简常用的方法就是外部创建name.properties文件,并在其中声明变量值,供Java进行读取。比如数据源信息配置,Java固定属性位置等。读取的方式一般由三种:
- 通过Spring的Environment检索属性
- 通过占位符读取属性(Java和xml两种方式)
- 通过表达式装配(xml)
1. 通过Spring Envrionment检索属性
简单示例:
- 创建property.properties文件,并编写属性值:
name=this is properties
title=properties
num=100
- 创建目标Java类
PropertyImpl.java,包含property.properties中属性对应的成员变量:
private String title;
private String name;
public PropertyImpl(String ti, String na) {
// TODO Auto-generated constructor stub
title = ti;
name = na;
}
@Override
public void show() {
// TODO Auto-generated method stub
System.out.println("title:" + title + "\n" + "name:" + name);
}
- 创建Java配置类,显示声明Bean,并声明包含properties中声明属性的Spring Bean工厂@Configuration等价于xml中的beans,@ComponentScan自动扫描该包和子包添加注释的Java类注入到Bean工厂,@PropertySource Spring解析指定的properties文件属性:
@Bean
public Proterty property(){
String[] activSsize = env.getActiveProfiles();
for(int i = 0; i < activSsize.length; i++){
System.out.println("i=" + i + " || profile:" + activSsize[i]);
}
String[] defaultSize = env.getActiveProfiles();
for(int i = 0; i < defaultSize.length; i++){
System.out.println("i=" + i + " || profile:" + defaultSize[i]);
}
Integer num = env.getProperty("num", Integer.class, 30);
System.out.println("num=" + num);
num = env.getProperty("num1", Integer.class, 30);
System.out.println("num1=" + num);
return new PropertyImpl(env.getProperty("title"), env.getProperty("name"));
}
}
- 通过Java配置Spring形式读取properties文件属性值基本结束,下面通过junit进行测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=JavaConfiguration.class)
public class Main {
@Autowired
private Proterty proterty;
@Test
public void test(){
proterty.show();
}
}
- 对于environment包含的其它方法介绍:
- T getProterty(String key, Class type, T defaultValue)如果不存在,设定默认值
- T getProterty(String key, Class type)将key属性值转化为固定类对象
- String getProterty(String key, String defaultValue)读取属性值不存在,设置为默认值
- getRequiredProperty(String key)如果对应属性不存在,跑出异常
- constainsProperty(String key)检查属性是否存在
- getPropertyAsClass(String key, name.class)将属性值解析为类
- getActiveProfiles()
- getdefaultProfiles()
- acceptsProfiles()
2. 通过占位符获取属性值
- 首先,创建properties属性文件
property.proterties,property2.properties(加载多propeerties文件):
name=this is properties
title=properties
num=100
url=localhost:8080
drive=c3p0
usename=chen
password=abcd1234
- 创建对应读取属性值的Java类
XmlProperties.java
public class XmlProperties {
private String url;
private String drive;
private String usename;
private String password;
private String title;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDrive() {
return drive;
}
public void setDrive(String drive) {
this.drive = drive;
}
public String getUsename() {
return usename;
}
public void setUsename(String usename) {
this.usename = usename;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public void show(){
System.out.println("url:" + url + "\nderive:" + drive + "\nusename:" + usename +
"\npassword:" + password + "\ntitle:" + title);
}
}
- xml配置文件:创建
PropertyPlaceholderConfigurer Bean,并加载properties文件。
<bean id="propertyConfligurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>/com/tidas/spring/proterties/property2.properties</value>
<value>/com/tidas/spring/proterties/property.proterties</value>
</list>
</property>
</bean>
- 通过占位符读取属性值,这种也是在web开发中配置数据源最常用的方法
<bean id="xmlProperties" class="com.tidas.spring.property.XmlProperties">
<property name="url" value="${url}"/>
<property name="drive" value="${drive}"/>
<property name="usename" value="${usename}"/>
<property name="password" value="${password}"/>
<property name="title" value="${title}"/>
</bean>
- 当然,如果是通过javaconfigration进行配置Bean工厂的,也可以使用如下方法读取属性:
@Component
public class PropertyImpl implements Proterty {
private String title;
private String name;
public PropertyImpl(@Value("${title}") String ti, @Value("${name}") String na) {
// TODO Auto-generated constructor stub
title = ti;
name = na;
}
...
这种创建方式在自动扫描的时候注入场景中使用最为合适
Spring读取外部属性-properties的更多相关文章
- Spring读取外部的资源配置文件—@PropertySource和@Value实现资源文件配置
通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值: @PropertySource注解主要是让Spring的Environment接口读取属性配置文件用的,标识在@ ...
- Spring读取加密属性文件处理
引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...
- spring 使用外部属性文件
一.PropertyPlaceholderConfigurer spring提供的PropertyPlaceholderConfigurer实现类能够使Bean在配置时引用外部属性文件. Proper ...
- Spring读取加密属性文件处理--待整理
引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...
- Spring 使用外部属性文件配置
1.Spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将Bean的配置的部分内容 移到属性文件中.可以在Bean配置 ...
- Spring使用外部属性文件
一.在 Spring Config 文件中配置 Bean 时,有时候需要在 Bean 的配置里添加 系统部署的细节信息, 如文件路径,数据源配置信息.而这些部署细节实际上需要在配置文件外部来定义. 二 ...
- Spring 应用外部属性文件 配置 context 错误
在Spring配置文件中出现通配符的匹配很全面, 但无法找到元素 'context:property-placeholder' 的声明这个错误,其实主要是我们在引入命名空间时没有正确引入它的DTD解析 ...
- Spring_Bean的作用域---和使用外部属性文件
<!-- 使用 bean的scope属性来配置bean的作用域 singleton:默认值.容器初始时创建bean实例,在整个容器的生命周期内只创建这一个bean单例 prototype:原型的 ...
- Spring配置文件外部化配置及.properties的通用方法
摘要:本文深入探讨了配置化文件(即.properties)的普遍应用方式.包括了Spring.一般的.远程的三种使用方案. 关键词:.properties, Spring, Disconf, Java ...
随机推荐
- Linux useradd
在 linux 中,如果我们想添加一个用户,那么使用的命令如下: useradd [ 用户名 ] 实例如下: 那么添加密码如下: passwd [ 用户名 ] 实例如下: 然后输入密码,学过一点 ...
- Asp.Net Web API(二)
创建一个Web API项目 第一步,创建以下项目 当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页. 添加Model ...
- APP之构架自己的webapi框架
当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架的路由MvcRoute ...
- iOS自定义文字高度添加行间距
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000 } span.s1 { } span.s2 { c ...
- [array] leetcode-55. Jump Game - Medium
leetcode-55. Jump Game - Medium descrition Given an array of non-negative integers, you are initiall ...
- GVIM与模板——让FPGA开发变得更简单
还在使用FPGA开发环境自带的代码编辑器?还在逐个字母敲击冗长重复的代码?明德扬至简设计法让你快速提高代码编写效率!利用GVIM这一高效的编辑工具并添加自定义模板,通过简短的脚本命令即可自动生成所有常 ...
- 转:一篇讲线上优化查 CPU的脚本
原文链接:https://my.oschina.net/leejun2005/blog/1524687 摘要: 本文主要针对 Java 服务而言 0.背景 经常做后端服务开发的同学,或多或少都遇到 ...
- php-自动过滤、自动填充、自动验证
最近又学到了一些新技巧,和大家分享下. 第一.当一个表单有很大内容时,我们在表单处理页面接收这些表单的值的时候就会重复 接收,于是就有了自动过滤的解决之法(核心就是把数据表里需要的字段接收) 首先:我 ...
- 优化css选择器
1.css选择器效率排行从高到低如下: id选择器(#head) 类选择器(.content) 标签选择器(p,h1) 相邻选择器(h1+p) 子选择器(ul < li)
- Hello TensorFlow 二 (GPU)
官方说明:https://www.tensorflow.org/install/ 环境: 操作系统 :Windows 10 家庭中文版 处理器 : Intel(R) Core(TM) i7-7700 ...