私のプロジェクトでは、Velocity Engine を使用して、ユーザー アクションとジョブ トリガーでメールを送信しています。
ユーザーのアクションで送信されるメールはまったく問題ありませんが、ジョブによって送信されるメールは空のコンテンツで受信されることがあります。これは非常にランダムであり、何らかの原因と関連付けることはできないようです。これが発生した場合、エラー ログはありません。(NullLogChute プロパティを追加する前に、Velocity could not be initialized エラーが 1 回発生しました。これで例外が解決されるとのことでしたが、ログに例外が記録されないようにするだけでした。メールの内容はまだ空です。 ) 助けてください!
以前の例外:
ERROR 2012-07-29 05:00:00,219 com.myProject.util.VelocityUtil - Velocity could not be initialized!
java.lang.RuntimeException: Velocity could not be initialized!
..
..
Caused by: org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.AvalonLogChute with the current runtime configuration.
Spring サーブレット xml で速度構成プロパティを設定しています。
<bean id="velocityUtil" class="com.myProject.util.VelocityUtil" >
<property name="velocityConfiguration">
<props>
<prop key="resource.loader">class</prop>
<prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop>
<prop key="runtime.log.logsystem.class">org.apache.velocity.runtime.log.NullLogChute</prop>
</props>
</property>
Spring サーブレットで設定された Quartz プロパティ:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="applicationContextSchedulerContextKey"><value>applicationContext</value></property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">Quartz</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.scheduler.rmi.export">false</prop>
<prop key="org.quartz.scheduler.rmi.proxy">false</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">1</prop>
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.tablePrefix">EES.QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.MSSQLDelegate</prop>
</props>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="triggers">
<list>
<ref bean="Mod1CronTrigger" />
<ref bean="Mod2CronTrigger" />
<ref bean="Mod3CronTrigger" />
<ref bean="Mod4CronTrigger" />
<ref bean="Mod5CronTrigger" />
<ref bean="Mod6CronTrigger" />
</list>
</property>
</bean>
の各トリガーは<list>
、jobDetail と CronExpression を定義します。例えば、
<bean id="Mod1CronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="Mod1Job"/>
<property name="cronExpression" value="0 30 3 1/1 * ? *"/>
</bean>
と
<bean name="Mod1Job" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.myProject.jobs.Mod1Job" />
<property name="name" value="Mod1Job" />
</bean>