2011-10-15 42 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>