`

一步一步升级spring配置4:使用SPEL和Util标签配置spring xml参数

阅读更多

 

1.原始做法: spring xml配置文件,参数直接混合配置

如下

 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://127.0.0.1/feilong" />
<property name="username" value="feilong_prod" />
<property name="password"><value><![CDATA[feilong]]></value></property>
<property name="maxActive" value="700" />
<property name="maxIdle" value="20" />
<property name="maxWait" value="3000" />
</bean>

 

缺点:参数和bean混在一起,不利于查找编辑发布

 

2.稍微改进,使用context:property-placeholder

 

新建  dataSource.properties

 

######################### dataSource info###################################
dataSource.driverClassName=org.postgresql.Driver
dataSource.url=jdbc:postgresql://10.8.12.207/db_converse
dataSource.username=user_converse
dataSource.password=user_converse1234

dataSource.maxActive=80
dataSource.maxIdle=20
dataSource.maxWait=3000

 

 

 

 

<context:property-placeholder location="classpath*:config/datasource.properties" />   
<!--dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${dataSource.driverClassName}" />
<property name="url" value="${dataSource.url}" />
<property name="username" value="${dataSource.username}" />
<property name="password" value="${dataSource.password}" />
<property name="maxActive" value="${dataSource.maxActive}" />
<property name="maxIdle" value="${dataSource.maxIdle}" />
<property name="maxWait" value="${dataSource.maxWait}" />
</bean>

 

 

缺点:这个问题困扰我很久,

就是,如果我有的bean 不需要外部参数配置,就想使用 ${} 这样的符号

 

比如

 

<bean id="Sku.findSkuRelationByCategory" class="loxia.dao.support.DynamicQueryHolder">
<constructor-arg>
<value>
<![CDATA[select
r.sku_id as sku_id,
r.sku_category_id as sku_category_id
from t_ma_sc_sku_relation r
where r.sku_id in(#foreach($num in [1..$skuCount]) #if($num == 1) :s${num} #else ,:s${num} #end #end)
and r.sku_category_id in(#foreach($num in [1..$categoryCount]) #if($num == 1) :c${num} #else ,:c${num} #end #end)
order by sku_category_id]]>
</value>
</constructor-arg>
</bean>

 

 

stackoverflow上面,国外的朋友给我解答,虽然我的英文很烂,但是外国人看懂了,开心http://stackoverflow.com/questions/10257448/contextproperty-placeholder-is-a-good-thing-but-i-do-not-want-some-bean-config

 

解决方案:

1).context:property-placeholder使用placeholderPrefixplaceholderSuffix属性

以前不知道这个属性,长见识了,这个方案不错,如果你的spring3.0以下的话,使用这个


2).不使用外部参数,但要用$符号的bean,可以使用SPEL 转义#{'$'}num}

这个方案可以解决问题,但是比较坑爹,我有很多这样的sql,都需要人工转义,太麻烦,抛弃

 

3.使用SPELUtil标签配置spring xml参数

SPEL spring 3.0新的特性

 

<util:properties id="p_dataSource" location="classpath:config/dataSource.properties"></util:properties>

 

<!--dataSource -->

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="#{p_dataSource['dataSource.driverClassName']}" />

<property name="url" value="#{p_dataSource['dataSource.url']}" />

<property name="username" value="#{p_dataSource['dataSource.username']}" />

<property name="password" value="#{p_dataSource['dataSource.password']}" />

<property name="maxActive" value="#{p_dataSource['dataSource.maxActive']}" />

<property name="maxIdle" value="#{p_dataSource['dataSource.maxIdle']}" />

<property name="maxWait" value="#{p_dataSource['dataSource.maxWait']}" />

</bean>

 

注意:不能配置成#{p_dataSource.dataSource.maxIdle},读不到这个属性,需要用 [] 方括号括起来

分享到:
评论

相关推荐

    Spring_SpEl表达式使用用例

    `P()`函数则用于访问属性路径,通常与XML配置文件中的`&lt;beans:property/&gt;`标签一起使用。 8. ** spel表达式在AOP中的应用** 在Spring AOP中,SpEL可用于定义切面的切入点表达式,如`execution(* ...

    spring4示例代码

    spring-1 演示了使用setter方式及构造器方式创建bean,util:list标签创建集合,p标签简化配置 和依赖注入, 以及bean的autowire和继承与依赖,以及bean的作用域。 spring-2 演示了外部配置文件的引入(connection)...

    day38 13-Spring的Bean的属性的注入:SpEL注入

    首先,SpEL提供了一种简洁的方式来访问和操作Bean的属性,它允许我们在配置中使用表达式来设置Bean的属性值。例如,我们可以使用`#{T(java.lang.Math).random()}`来注入一个随机数,或者`#{systemProperties['java....

    spring3-dtd

    在Spring 3版本中,DTD(Document Type Definition)被广泛使用来定义XML配置文件的结构和约束。DTD是一种元数据,它定义了XML文档的元素、属性以及它们之间的关系,确保了配置文件的合法性。 在Spring框架中,DTD...

    spring-3.1.0中文版api帮助文档

    - **配置参数管理**:介绍如何管理和读取外部配置文件中的参数。 **2.7 Spring受管Bean的作用范围** - **Bean作用域**:讲解Bean的生命周期和作用域管理,包括单例、原型等不同模式。 **2.8 Bean Validation集成...

    spring-4.3.1 jar包

    5. **spring-expression-4.3.1.RELEASE.jar**:这部分是Spring表达式语言(SpEL)的实现,提供了强大且灵活的在运行时评估对象和属性的表达式能力,常用于配置文件和AOP切点表达式。 6. **commons-logging-1.2.jar*...

    spring-expression-3.2.3.release.jar.zip

    SpEL表达式可以在XML配置文件、注解或者编程代码中使用,为程序的灵活性和可扩展性提供了强大的支持。 SpEL的核心特性包括: 1. **属性访问**:SpEL允许我们直接通过点号(.)来访问对象的属性,例如`person.name`...

    Spring3_权威开发指南

    - **基于XML方式使用**:演示如何在XML配置文件中使用SpEL。 - **基于Annotation注解使用**:展示了如何使用注解来使用SpEL。 - **SpEL语法速查**:提供了一些SpEL的基本语法示例。 #### 四、面向切面编程 - **...

    spring开发基本lib.rar

    例如,我们可以在XML配置中使用SpEL来决定bean的依赖关系,或者在AOP切点表达式中使用它来指定拦截哪些方法。 6. Spring AOP: Spring AOP模块实现了面向切面编程,允许我们在不修改原有代码的情况下,向应用程序...

    Spring实战之Bean定义中的SpEL表达式语言支持操作示例

    总结来说,Spring框架的SpEL是支持Spring Bean定义的一个强大工具,它允许开发者在XML配置文件或注解中使用表达式语言来操作数据和逻辑。通过上述示例,我们可以看到在实际的Spring应用中如何利用SpEL进行灵活配置。...

    spring3. 0 MVC EL

    8. **在配置中使用**:SpEL可以在Spring的XML配置中用于动态配置bean的属性,或者在`@Value`注解中用于注入运行时计算的值。 在Spring 3.0中,MVC和EL的结合使用,极大地提升了开发效率和代码质量。通过SpEL,...

    springboot-config01配置

    它可以从`application.properties`或`application.yml`文件中读取值,也可以使用SpEL(Spring Expression Language)表达式。 3. `@PropertySource`: 这个注解用于指定属性源,通常是从外部的properties文件中...

    spring 定时器

    下面将详细阐述Spring定时器的工作原理、配置方法以及使用场景。 1. **工作原理**: Spring定时器基于`java.util.concurrent.ScheduledExecutorService`接口,它是一个线程池服务,可以用来安排在未来某个时间点...

    Spring-mvc需要的全部jar包

    5. **spring-beans**: 包含了Bean工厂,它是Spring的核心,负责创建、配置和管理对象。 6. **spring-expression**: Spring Expression Language (SpEL) 提供了一种强大且灵活的方式来表达对象模型中的属性、方法...

    Spring3新特性

    从多个JAR包的划分可以看出,Spring采用了更为精细的模块化策略,使得开发者能够更容易地管理和使用特定的功能模块。此外,Spring3的构建系统及依赖管理引入了Apache Ivy这一强大的工具,同时也兼容了Maven,这不仅...

    Spring初步学习入门基础jar包以及commons-logging的jar

    5. **Spring Expression Language (SpEL)**: `spring-expression-4.3.6.RELEASE.jar`是Spring的表达式语言,提供了一种强大的方式来在运行时查询和操作对象图。它支持在配置元数据中表达复杂的逻辑,例如在bean的...

    spring ioc.jar

    总结来说,`spring ioc.jar`是Spring框架实现控制反转和依赖注入的核心,通过加载`applicationContext.xml`配置文件,Spring能够管理应用程序中的对象,建立对象之间的依赖关系,从而使开发者能更专注于业务逻辑,而...

    Spring如何装配各种集合类型的属性

    在Spring的XML配置文件中,我们可以使用`&lt;list&gt;`、`&lt;set&gt;`、`&lt;map&gt;`和`&lt;props&gt;`标签来装配集合类型的属性。例如,假设我们有一个`User`类,它包含一个`List&lt;User&gt;`类型的`friends`属性: ```xml ...

    spring所需的jar包

    2. `spring-beans.jar`:提供了bean工厂,实现依赖注入和配置管理,包括XML配置和基于注解的配置。 3. `spring-context.jar`:扩展了bean工厂,引入了ApplicationContext接口,提供了事件发布、国际化、资源加载等...

Global site tag (gtag.js) - Google Analytics