1

私のプロジェクトでは、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>
4

0 に答える 0