从数据库中读取模板 - VelocityEngine

时间:2011-10-15 10:24:28

标签: spring

我将我使用的模板存储在数据库中,我想把它配置为从数据库中读取模板。

我的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对象。

那么我如何将数据源配置为字符串?

5 个答案:

答案 0 :(得分:1)

为我工作

             

FileInputStream

数据源加载器:

<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>

答案 1 :(得分:0)

您必须配置另一个ID为“datasource”的bean,这将允许Spring实例化一个继承自java.sql.Datasource的类的实例。它可能是OracleDataSource,例如,如果您的数据库是Oracle。

答案 2 :(得分: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>

答案 3 :(得分:0)

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

value-ref 对我不起作用

更改为 value =“datasource”并尝试。

可能会在更高版本(如果有)中添加value-ref支持。 我正在使用Velocity 1.7

答案 4 :(得分: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>