5.10 外在化应用参数的配置
在开发企业应用期间,或者在将企业应用部署到生产环境时,应用依赖的很多参数信息往往需要调整,比如LDAP连接、RDBMS JDBC连接信息。对这类信息进行外在化管理显得格外重要。PropertyPlaceholderConfigurer和PropertyOverrideConfigurer对象,它们正是担负着外在化配置应用参数的重任。
本节将结合beanfactorypostprocessordemo项目展开对它们的讨论。
5.10.1 <context:property-placeholder/>元素
PropertyPlaceholderConfigurer实现了BeanFactoryPostProcessor接口,它能够对<bean/>中的属性值进行外在化管理。开发者可以提供单独的属性文件来管理相关属性。比如,存在如下属性文件,摘自userinfo.properties。
db.username=scott
db.password=tiger
如下内容摘自propertyplaceholderconfigurer.xml。正常情况下,在userInfo的定义中不会出现${db.username}、${db.password}等类似信息,这里采用PropertyPlaceholderConfigurer管理username和password属性的取值。DI容器实例化userInfo前,PropertyPlaceholderConfigurer会修改userInfo的元数据信息(<bean/>定义),它会用userinfo.properties中db.username对应的scott值替换${db.username}、db.password对应的tiger值替换${db.password}。最终,DI容器在实例化userInfo时,UserInfo便会得到新的属性值,而不是${db.username}、${db.password}等类似信息。
-
<bean id=
"propertyPlaceholderConfigurer"
-
class
="org.springframework.beans.factory.config.
-
PropertyPlaceholderConfigurer">
-
<property name=
"locations"
>
-
<list>
-
<value>userinfo.properties</value>
-
</list>
-
</property>
-
</bean>
-
-
<bean name=
"userInfo"
class
=
"test.UserInfo"
>
-
<property name=
"username"
value=
"${db.username}"
/>
-
<property name=
"password"
value=
"${db.password}"
/>
-
</bean>
通过运行并分析PropertyPlaceholderConfigurerDemo示例应用,开发者能够深入理解PropertyPlaceholderConfigurer。为简化PropertyPlaceholderConfigurer的使用,Spring提供了<context:property-placeholder/>元素。下面给出了配置示例,启用它后,开发者便不用配置PropertyPlaceholderConfigurer对象了。
-
<context:property-placeholder location=
"userinfo.properties"
/>
PropertyPlaceholderConfigurer内置的功能非常丰富,如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找。通过启用systemPropertiesMode和searchSystemEnvironment属性,开发者能够控制这一行为。
分享到:
相关推荐
在Spring框架中,`<context:property-placeholder>`是用于加载和解析属性文件的一个标签,它允许我们在XML配置或Java配置中使用占位符 `${...}` 来引用属性文件中的值。这样做的好处是,我们可以将敏感信息如数据库...
15. <context:property-placeholder location="classpath:/hibernate.properties" /> 16. 17. <bean id="sessionFactory" 18. class="org.springframework.orm.hibernate3.annotation....
<context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" ...
`context`命名空间下的 `<context:component-scan>`、`<context:property-placeholder>`等元素,用于扫描组件、加载外部属性文件,增强了Spring的应用范围和灵活性。 "cache"模块则提供了缓存抽象,支持如 EhCache...
在Spring的老版本中,通常使用`<context:property-placeholder>`或`<util:properties>`元素来加载属性文件。例如: ```xml <!-- 使用 context:property-placeholder --> <beans xmlns=...
这里通过`<context:property-placeholder>`加载了`dbconfig.properties`中的配置项,确保了数据库连接参数的外部化管理。 ```xml <context:property-placeholder location="classpath:dbconfig.properties"/> ...
<context:property-placeholder location="classpath:jdbc.properties" /> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name=...
<context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value...
7. **基于Properties和YAML文件装载外部化配置**:`<context:property-placeholder>`和`<context:property-override>`用于加载和覆盖属性值,而YAML文件提供了更友好的格式来组织配置数据。 8. **基于Extensible ...
在`applicationContext.xml`中通过`<context:property-placeholder>`标签来指定`properties`文件的位置。例如,我们需要引入两个文件:`jdbc.properties`和`res.properties`,可以这样配置: ```xml <!-- 引入 jdbc...
例如,在 `<context:property-placeholder>` 中,ContextNamespaceHandler 将解析 `location` 属性,并将其转换为 PropertySourcesPlaceholderConfigurer BeanDefinition 对象。 BeanDefinitionParser 解析 bean ...
4. **配置JdbcTemplate**: 要使用`JdbcTemplate`,首先需要配置数据源(`DataSource`),这可以通过`<context:property-placeholder>`和`<bean>`元素完成。数据源配置包括数据库连接的URL、用户名、密码等信息。接着...
例如,通过 `<context:property-placeholder>` 可以加载属性文件: ```xml <context:property-placeholder location="classpath:database.properties"/> ``` 综上所述,`applicationContext.xml` 在 Spring 3.1 中...
3. ** Context `.xsd`**:扩展了基本的Bean配置,引入了上下文相关的功能,如`<context:component-scan>`用于自动发现和注册bean,以及`<context:property-placeholder>`用于处理属性占位符。 4. ** JDBC `.xsd`**...
- `<context:property-placeholder>`: 引用外部属性文件。 - `<mvc:resources>`: 配置静态资源路径。 - `<tx:advice>`: 配置事务通知。 - `<tx:annotation-driven>`: 开启基于注解的事务管理。 - `<tx:jta-...
此外,`<context:property-placeholder>`则可以用来加载属性文件,方便在配置中引用环境变量。 Spring 3.0引入了AOP(Aspect-Oriented Programming,面向切面编程)的增强,`aop.xsd`定义了与切面相关的配置元素,...
<context:property-placeholder location="classpath:config/jdbc.properties"/> <!-- 配置第一个数据源 --> <bean name="dataSource" class=...
8. `<context:property-placeholder>`:加载属性文件,使你可以在配置中使用占位符 `${...}`。 9. `<import>`:引入其他XML配置文件,允许配置模块化。 10. `<bean>`的`init-method`和`destroy-method`属性:指定...
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" ...