在spring配置文件中引入properties文件--引出加载配置文件的对应方式
来源:互联网 发布:天津市软件学院 编辑:程序博客网 时间:2024/05/29 10:12
在Spring中允许把xml配置文件中的一些参数配置到properties中,例如像数据源中的属性配置,把数据源中的属性放到properties中更利于后期的修改和扩展。 Spring中此功能的核心是配置PropertyOverrideConfigurer属性覆盖器,目的是用来指定properties文件的位置,配置覆盖器有下面两种方法:
1、<context:property-placeholder location="classpath:jdbc.properties"/>2、<bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="location"><value>classpath:jdbc.properties</value></property></bean>
上面是指对一个properties文件的配置,如果有多个properties文件第一种配置在location的属性值相互逗号隔开,在第二种引入<list></list>来配置即可。 配置完PropertyOverrideConfigurer属性覆盖器后就可以把替换的内容用形如${key}el表达式的字符串来替换。如下:
<bean id="dbutil" class="com.cph.bean.DBUtil"><property name="name" value="${name}" /><property name="drivername" value="${drivername}" /><property name="url" value="${url}" /><property name="pwd" value="${pwd}" /></bean>
jdbc.properties文件如下:
name=scottdrivername=oracle:jdbc:driver:OracleDirverurl=jdbc:oracle:thin:@127.0.0.1:1521:hsppwd=tiger
开发一个测试类如下:
public class App1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub XmlBeanFactory xmlBeanFactory= new XmlBeanFactory( new ClassPathResource("ApplicationContext.xml")); DBUtil dbUtil=(DBUtil)xmlBeanFactory.getBean("dbutil2"); System.out.println(dbUtil.getDrivername()+" "+dbUtil.getName()); }}
此时输出的结果并不是我们想看到的:
oracle:jdbc:driver:OracleDirver scott
如是输出了:
${drivername} ${name}
为什么?从返回来的结果,觉得并没有去properties文件中读取value,而是把${xxx}当字符串了,我们检查一下配的properties路劲并没有错,并且如果是配置的路径错误,会报下面的错误,但它并没有报错(为了显示不是路劲问题故意配错的路径),说明不是路经问题:
java.io.FileNotFoundException: class path resource [//jdbc.properties] cannot be opened because it does not exist
配置PropertyOverrideConfigurer属性覆盖器和用${xxxx}取值也没有错,这个是spring开发文档给的。初看觉得已经进入死胡同了,但我们还忘记了一个可能会引起这个问题大地方就是spring中加载配置文件的方式。
在Spring中加载xml文件的配置文件的方式主要有如下几种:
1、XmlBeanFactory
2、ClassPathXmlApplicationContext
3、FileSystemXmlApplicationContext
4、XmlWebApplicationContext
加载这些容器的配置文件的xml有一下几种常见的方法:
1:引用资源用XmlBeanFactory(不能实现多个文件相互引用)
Resource resource = new ClassPathResource("appcontext.xml");BeanFactory factory = new XmlBeanFactory(resource);
从factory中获取相应资源文件中的bean,但是这种bean读不到引用了其他文件中的bean!
2:引用应用上下文用ClassPathXmlApplicationContext
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");ApplicationContext factory=new ClassPathXmlApplicationContext("conf/userConfig.xml"); // src/conf 目录下的 ApplicationContext factory=new ClassPathXmlApplicationContext("file:G:/Test/src/appcontext.xml");
3:用文件系统的路径引用应用上下文用
FileSystemXmlApplicationContextApplicationContext factory=new FileSystemXmlApplicationContext("src/applicationContext.xml"); ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:appcontext.xml");ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");ApplicationContext factory=new FileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");
4:Web工程定制的加载方法 XmlWebApplicationContext
ServletContext servletContext = request.getSession().getServletContext(); ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );
通过上面的对几种加载配置文件的方式我们可以看出XmlBeanFactory方式是不能不能获取其他文件的资源的,所以也就是这个原因造成我们无法得到我们想要的结果,把加载xml方式修改ClassPathXmlApplicationContext即可,问题解决
- 在spring配置文件中引入properties文件--引出加载配置文件的对应方式
- Spring 引入properties配置文件的方式
- spring 配置文件中 引入properties文件
- Spring配置文件加载properties文件
- 在Spring配置文件中使用properties文件
- maven项目在idea中spring配置文件引入xml文件和properties文件报错解决方案
- spring 配置文件引入properties
- spring 引入数据库配置(其他配置文件.properties)文件的两种方式
- Spring 3 中引入properties配置文件
- spring的配置文件在web.xml中加载的方式
- spring基于xml加载和读取properties配置文件的方式
- spring加载properties配置文件
- spring 中加载xml配置文件的方式.
- spring 中加载xml配置文件的方式.
- spring 中加载xml配置文件的方式
- Spring中加载XML配置文件的方式
- spring中加载xml配置文件的方式
- spring 中加载xml配置文件的方式
- CodeForces 554C 组合数学
- 统计学习方法(4)——贝叶斯分类算法
- php实现远程网络文件下载到服务器指定目录(方法一)
- 实体类中重写toString()方法便于输出显示和监控调试
- 浙大数据结构课后题-最大子列和
- 在spring配置文件中引入properties文件--引出加载配置文件的对应方式
- 6.Unity3D商业游戏源码研究-变身吧主公-SceneLogin
- 找出数组中的最大和第二大元素需要进行几次比较?
- Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null
- 华为nexus 6p,联想900等 android手机加载webview 显示空白解决方案
- Hibernate持久化类与主键生成策略
- arguments.callee与递归
- Dangling metacharacter
- linux 学习体验2