2011-10-15 53 views
1

我正在存儲我在數據庫中使用速度的模板,並且我將它配置爲從數據庫中讀取模板。從數據庫讀取模板 - VelocityEngine

我的bean定義是:

<bean id="velocityEngineBasedOnDB" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
    <property name="velocityProperties"> 
     <map> 
      <entry key="resource.loader" value="ds"/> 
      <entry key="ds.resource.loader.class" value="org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader"/> 
      <entry key="ds.resource.loader.resource.table" value="tb_velocity_template"/> 
      <entry key="ds.resource.loader.resource.keycolumn" value="id_template"/> 
      <entry key="ds.resource.loader.resource.templatecolumn" value="template_definition"/> 
      <entry key="ds.resource.loader.resource.datasource" value-ref="dataSource"/> 
     </map> 
    </property> 
</bean> 

但我得到了java.lang.ClassCastException: 'resource.datasource' 不映射到一個String對象。

那麼我如何配置數據源爲字符串?

回答

0

你必須配置另一個id爲「datasource」的bean,這將允許Spring實例化一個從java.sql.Datasource繼承的類的實例。它可能是一個OracleDataSource,例如,如果你的數據庫是Oracle。

0

你應該設置ds.resource.loader.instance REF一個Spring bean,如:

<bean id="resourceLoader" 
    class="xx.common.mail.MongoDataSourceResourceLoader" 
    p:mongoTemplate-ref="mongoTemplate"/> 

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
<property name="velocityProperties"> 
    <map> 
     <entry key="resource.loader" value="ds"/> 
     <entry key="ds.resource.loader.instance" value-ref="resourceLoader"/> 
    </map> 
</property> 

0
<entry key="ds.resource.loader.resource.datasource" value-ref="dataSource"/> 

值裁判不工作對我來說

變化value =「datasource」並嘗試。

可能是在更高版本中添加了value-ref支持(如果有的話)。 我使用速度1.7

1

對我的作品

<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean"> 
    <property name="velocityProperties"> 
     <map> 
      <entry key="resource.loader" value="ds"/> 
      <!--<entry key="ds.resource.loader.class" value="org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader"/>--><!--should be left out--> 
      <entry key="ds.resource.loader.resource.table" value="templates" /> 
      <entry key="ds.resource.loader.resource.keycolumn" value="tid" /> 
      <entry key="ds.resource.loader.resource.templatecolumn" value="template" /> 
      <entry key="ds.resource.loader.resource.timestampcolumn" value="updated" /> 
      <entry key="ds.resource.loader.instance" value-ref="dataSourceLoader" /> 
      <entry key="ds.resource.loader.cache" value="true" /> 
     </map> 
    </property> 

</bean> 

數據源裝載機:

<bean id="dataSourceLoader" class="org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader"> <property name="dataSource" ref="myDataSource"/><!-- myDataSource is a com.mchange.v2.c3p0.ComboPooledDataSource type--> </bean> 
+0

和dataSourceLoader是:**的 <! - myDataSource是一個com.mchange.v2.c3p0。 ComboPooledDataSource類型 - > ** – Maribel

+0

謝謝,這個在Velocity 1.7上完美運行。 – Petar

0
<!-- myDataSource is a com.mchange.v2.c3p0.ComboPooledDataSource type--> 
<bean id="dataSourceLoader" class="org.apache.velocity.runtime.resource.loader.DataSourceResourceLoader"> 
     <property name="dataSource" ref="myDataSource"/> 
</bean>