2012-02-03 171 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