提问人:dynamo 提问时间:8/9/2023 更新时间:8/10/2023 访问量:39
找不到资源 - 无法找到具有 Velocity 的资源
resource not found - unable to find resource with velocity
问:
不确定为什么我会收到此错误 - 我看不到我的配置出了什么问题。
对要使用的文件的引用位于 notification.properties 文件中,该文件在我的配置中引用:
类路径:com/app/application/notification/notifications
我的应用程序运行良好,并在Notificaitons.properties文件中查找New.User.Password.Template=en/NewUserPassword.html
我已经调试了它,它发现“en/newuserpassword.html”很好,但它找不到实际文件本身。
我已经检查过,文件肯定在那里 - 完全匹配,但就是找不到它:
resources/com/app/application/notification/template/en/newuserpassword.html
org.apache.velocity.exception.ResourceNotFoundException:找不到资源“en/newuserpassword.html” 在 org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:474) 在 org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:352) 在 org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533) 在 org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:343) 在 org.apache.velocity.app.VelocityEngine.mergeTemplate(VelocityEngine.java:320)
<bean id="notificationResolver" class="com..application.notification.resolver.VelocityNotificationResolver">
<constructor-arg>
<bean class="com.amor.hcplus.application.util.spring.context.TypeConvertingReloadableResourceBundleMessageSource">
<property name="cacheSeconds" value="60" />
<property name="basenames">
<list>
<value>classpath:com/app/application/notification/notifications</value>
<value>WEB-INF/spring/i18n/enums</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
<constructor-arg ref="velocityProperties"/>
</bean>
</constructor-arg>
</bean>
我有一个类似的设置来审核消息,它工作正常,并且找到了模板
<bean id="auditMessageResolver" class="com.amor.hcplus.application.audit.domain.VelocityAuditMessageResolver">
<constructor-arg>
<bean class="com.application.util.spring.context.TypeConvertingReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>WEB-INF/spring/i18n/enums</value>
<value>classpath:com/app/application/audit/auditing</value>
</list>
</property>
</bean>
</constructor-arg>
<constructor-arg>
<bean id="velocityEngine" class="org.apache.velocity.app.VelocityEngine">
<constructor-arg ref="velocityProperties"/>
</bean>
</constructor-arg>
</bean>
答:
如果您的模板位于类路径上,则为com/app/application/notification/template/en/newuserpassword.html
你要求速度找到en/newuserpassword.html
那么你的模板位置应该是com/app/application/notification/template
而不是com/app/application/notification/notifications
评论
这对我来说是一个愚蠢的错误,但希望它能向将来阅读本文的任何人强调问题。
我的 Notificaitons 配置引用了指向审计模板的速度属性。这太明显了,我什至没有注意到它。
<util:properties id="velocityPropertiesNotifications">
<prop key="resource.loader">file</prop>
<prop key="file.resource.loader.class">org.apache.velocity.runtime.resource.loader.FileResourceLoader</prop>
<prop key="file.resource.loader.cache">true</prop>
<prop key="file.resource.loader.path">C:/Program Files/Apache Software Foundation/Tomcat 9.0_Tomcat9.0.76/webapps/my-app/WEB-INF/classes/com/application/notification/templates</prop>
</util:properties>
我刚刚添加了一个新属性,该属性指向存储模板的正确目录 - 这解决了未找到错误。
评论