2012-02-03 155 views
0

我可以使用Spring EL实质上从属性文件中提取超时值并在处理Spring Transactions/AOP时将其转换为整数?春季AOP交易 - 属性超时?

下面是代码

<tx:advice id="GlobalDataTxAdvice" transaction-manager="GlobalDataTransactionManager"> 
    <tx:attributes> 
     <tx:method name="get*" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
     <tx:method name="find*" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
     <tx:method name="search*" read-only="true" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
     <tx:method name="*" timeout="${service.jta.timeout:60}"/> 
    </tx:attributes> 
</tx:advice> 

所以我想默认的事务超时时间为60秒,或者让超时(int值),以从属性占位符文件来拉动。

但是,当我部署此我得到:

weblogic.application.ModuleException:org.xml.sax.SAXParseException:CVC-数据类型-valid.1.2.1:“$ {service.jta.timeout: 60}'不是'整数'的有效值。

回答

0

试试这个

<util:properties id="contextProperties" location="classpath:context.properties"/> 

<tx:advice id="GlobalDataTxAdvice" transaction-manager="GlobalDataTransactionManager"> 
    <tx:attributes> 
    <tx:method name="get*" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
    <tx:method name="find*" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
    <tx:method name="search*" read-only="true" no-rollback-for="javax.persistence.NoResultException,javax.persistence.NonUniqueResultException,org.springframework.dao.EmptyResultDataAccessException"/> 
    <tx:method name="*" timeout="#{ T(Integer).valueOf(contextProperties['timeout']?: 60)}"/> 
    </tx:attributes> 
</tx:advice> 

MoreInfo:link

+0

感谢您的帮助。在部署中,我得到相同类型的错误:weblogic.application.ModuleException :: org.xml.sax.SAXParseException:cvc-datatype-valid.1.2.1:'#{T(Integer).valueOf(contextProperties ['timeout' ] ?: 60)}'不是'整数'的有效值。 – 2012-02-06 20:39:07

+0

如果我再次读取异常,看起来会发生这种情况,因为在部署Spring Context文件的解析过程中,必须对Spring TX Schema使用验证,并且timeout属性定义为xs:integer,并且不能是任何非数字的。 – 2012-02-06 21:00:18

+0

您是否使用Spring 3.0+,因为SpEL是在3中引入的,您应该得到类似SpelParseException的错误 – Ravi 2012-02-06 22:43:17