2016-12-27 10 views
0

ローカルホストでアプリケーションを実行すると問題が発生します。私のアプリケーションは、春のWeb MVCで構築し、データベースへの接続パスとして@Autowired DataSourceを使用するTomcatベースのアプリケーションです。それに私はJavaクォーツで動作するアプリの機能があります。Java Quartz + Spring WEBはデータソースをロードできません

DataJdbc1.class:

@Repository 
public class DataJdbc1 implements Data { 

    @Autowired 
    public DataSource dataSource1; 
    public JdbcTemplate jdbc1; 

    @Autowired 
    public DataSource dataSource2; 
    public JdbcTemplate jdbc2; 

    public void setDataSource1(DataSource dataSource1) { 
    this.dataSource1 = dataSource1; 
    } 

    public void setDataSource2(DataSource dataSource2) { 
    this.dataSource2 = dataSource2; 
    } 
} 

アプリケーションのcontext.xml:

<bean id="dataSource1" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/xxx" /> 
</bean> 
<bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource1" /> 
</bean> 

<bean id="dataSource2" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="java:comp/env/jdbc/xxx2" /> 
</bean> 
<bean id="transactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource2" /> 
</bean> 

CopyTableCustomerHandleJob.class

public class CopyTableCustomerHandleJob extends QuartzJobBean{ 

@Autowired 
QuartzServicesFactoryDao quartzServicesFactoryDao; 

@Override 
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { 
    // TODO Auto-generated method stub 
    try { 
     quartzServicesFactoryDao = new QuartzServicesFactoryDaoImpl(); 
     quartzServicesFactoryDao.getCopyTableCustomerHandle(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

石英のcontext.xml:

<!-- job --> 
<bean name="copyTableCustomerHandleJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
<property name="jobClass" value="crm.spring.main.quartz.CopyTableCustomerHandleJob"/> 
<property name="jobDataMap"> 
    <map> 
     <entry key="quartzServicesFactoryDao" value-ref="quartzServicesFactoryDao"/> 
    </map> 
</property> 
<property name="durability" value="true" /> 
その後

<!-- trigger --> 
<bean id="copyTableCustomerHandleJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
<property name="jobDetail" ref="copyTableCustomerHandleJob"/> 
<property name="cronExpression" value="0 0/1 * * * ?"/> 
</bean> 

<!-- SchedulerFactoryBean --> 
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
<property name="jobDetails"> 
    <list> 
     <ref bean="copyTableCustomerHandleJob" /> 
    </list> 
</property> 
<property name="triggers"> 
<list> 
    <ref bean="copyTableCustomerHandleJobTrigger" /> 
</list> 
</property> 
</bean> 

、私は仕事のクラス、トリガークラス、schedulefactoryで春のWEB MVC内部その石英アプリケーションを構築することを決定すると、残念ながら石英のcontext.xmlを作成し、この石英アプリケーションを実行すると、私は問題を抱えている、I Quartzアプリケーションを実行するたびにDataSourceプロパティを初期化することはできません。しかし、奇妙なことに私がspring webMVC RequestMapping DataSourceで石英アプリケーションメソッドを呼び出そうとしていると、それは正常に初期化されました。

stackoverflowメンバーの誰も私と同様の問題に直面していたのですか?私の問題を解決するためにどのような解決策を講じなければならないのか。どうもありがとうございました。

+0

代わりにsprings quartzモジュールを使用する必要があります。 – ScanQR

答えて

0

Quartzジョブは、Springではなく、Quartzによって作成されます。だから、SpringBeanJobFactoryを使って、springを使って自動的にquartzジョブをautowireすることができます。

次のURLはあなたに役立ちます。チェックアウトしてください。

https://stackoverflow.com/a/15211030/7119031

関連する問題