2016-03-29 25 views
0

Spring 3.2とQuartz 1.8の使用。次のように私はorg.springframework.scheduling.quartz.JobDetailBeanを設定した:Springの設定:TypeMismatchException

<bean id="a" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="com.MyJob" />   
    ...   
</bean> 

私はJOBCLASSは、Beanインスタンスを参照するように、私は豆の上にいくつかのプロパティを設定することができるよう、この設定を変更したい:

<bean id="b" class"com.MyJob"> 
    <constructor-arg name="arg" value="1"/> 
</bean> 
<bean id="a" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" ref="b" />   
    ...   
</bean> 

この設定でアプリを起動すると、私は

org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'com.MyJob' to required type 'java.lang.Class' for property 'jobClass'. 

なぜですか?私は、jobClassプロパティがインスタンスではなくクラスを必要とするためだと思います。どうすればそれを回避できますか?

答えて

0

解決策が見つかりました。いくつかのプロパティをjobDataAsMapに注入し、setDataAsMapはsetClassにjobClassを注入します(またはjobClass内のJobExecutionContext.jobDetailからプログラムで取得できます)。

<bean id="a" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="com.MyJob" />   
    <property name="jobDataAsMap"> 
     <map> 
      <entry key="propA" value="10" /> 
      <entry key="propB" value="3" />    
      </map> 
    </property>  
</bean>