2011-07-07 23 views
1

私は、Spring 3.0.0でQuartz 1.8.5を使用しようとしています(Quartz2.0も同じ問題を試しました)。 しかし、私はQuartzスケジューラ、トリガ、ジョブにSpringのユーティリティラッパーを使用したくないのですが... コンテナのないスタンドアロンのJavaアプリのように、私のアプリケーションからこれらのオブジェクトをプログラムですべて作成したいと思います。 、そして、は、SpringのQuartzスケジューラを初期化できません。

org.quartz.scheduler.instanceName: NotificationsScheduler 
org.quartz.scheduler.instanceId: AUTO 
org.quartz.scheduler.skipUpdateCheck: true 

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount: 3 
org.quartz.threadPool.threadPriority: 5 

org.quartz.jobStore.misfireThreshold: 60000 

org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate 
org.quartz.jobStore.useProperties: false 
org.quartz.jobStore.dataSource: qzDS 
org.quartz.jobStore.tablePrefix: QRTZ_ 
org.quartz.jobStore.isClustered: false 

org.quartz.dataSource.qzDS.driver: com.mysql.jdbc.Driver 
org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/myschema 
org.quartz.dataSource.qzDS.user: myuser 
org.quartz.dataSource.qzDS.password: mypwd 
org.quartz.dataSource.qzDS.maxConnections: 5 

私が持っている:理由から、私は ダイナミックトリガーとJobDetailsの要件を持っている主な理由は...

だから、私はJobStoreTXを定義し、クラスパス上で私のquartz.propertiesを持っていますシンプルなInitializerクラス(Quartzディストリビューションのexample1とほぼ同じ) 同じ例から未修正HelloJob使用している:

public class NotificationInitializer { 

public void init(){ 
try { 
    SchedulerFactory schdFact = new StdSchedulerFactory("quartz.properties"); 
    Scheduler schd = schdFact.getScheduler(); 
    schd.start(); 

    JobDetail jd = new JobDetail("hellojob", Scheduler.DEFAULT_GROUP, HelloJob.class); 
    Trigger t = TriggerUtils.makeImmediateTrigger(2, 1000); 
    t.setStartTime(new Date()); 

    schd.scheduleJob(jd, t); 
    // wait long enough so that the scheduler as an opportunity to run 
    .......... 

    schd.shutdown(true); 
    } catch (SchedulerException e) { 
    ..... 
    } 
} 
} 

をそして私はまた、このクラスを呼び出す単純なユニットテストがあります。

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "classpath:spring/applicationContext.xml") 
public class NotificationInitializerTest { 
    private final static Logger logger = LoggerFactory 
     .getLogger(NotificationInitializerTest.class); 

    @BeforeClass 
    public static void setupClass() { 
     PropertyConfigurator.configure(Loader 
     .getResource("spring/log4j.properties")); 
     PropertyConfigurator.configure(Loader 
      .getResource("spring/quartz.properties")); 
    } 


    @Test 
    public void testInit() { 
     NotificationInitializer ni = new NotificationInitializer(); 
     ni.init(); 
     logger.info("NotificationInitializer.init() finished OK"); 
    } 

} 

をそして、私はこのユニットテストを実行したときに私は次のエラーを取得する - 以下の完全なスタックトレースを参照してください。org.springframework.beans.factory.BeanCreationException:によって引き起こさ

を名前でBeanを作成 エラー「org.springframework.jdbc.datasource.init.DataSour ceInitializer# 0 ': initメソッドの呼び出しに失敗しました。ネストされた例外はcom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: クエリが空です

何が問題になったのでしょうか?

また、私は今のところJobStoreTXを設定しています - それが正常に動作することを確認するには ですが、結局私はJobStoreCMT toplug intoSpringのトランザクション管理を使いたいと思います。 スケジューラのためのSpringのラッパーとすべてのトリガ定義をハードコードするために、私はそれを行うための良いドキュメントや例を見つけることができませんでした。

ありがとう! マリーナ

java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDeendencies (DependencyInjectionTestExecutionListener.java:109) 
    at org.springframework.test.context.support.Dependenc yInjectionTestExecutionListener.prepareTestInstanc e(DependencyInjectionTestExecutionListener.java:75) 
    at org.springframework.test.context.TestContextManage r.prepareTestInstance(TestContextManager.java:333) 
    at org.springframework.test.context.junit4.SpringJUni t4ClassRunner.createTest(SpringJUnit4ClassRunner.j ava:220) 
    at 
    ..... 

Caused by: org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'org.springframework.jdbc.datasource.init.DataSour ceInitializer#0': Invocation of init method failed; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ception: Query was empty 
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1401) 
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.doCreateBean(AbstractAu towireCapableBeanFactory.java:512) 
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:450) 
    at org.springframework.beans.factory.support.Abstract BeanFactory$1.getObject(AbstractBeanFactory.java:2 90) 
    at org.springframework.beans.factory.support.DefaultS ingletonBeanRegistry.getSingleton(DefaultSingleton BeanRegistry.java:222) 
    at org.springframework.beans.factory.support.Abstract BeanFactory.doGetBean(AbstractBeanFactory.java:287) 
    at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:189) 
    at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:557) 
    at org.springframework.context.support.AbstractApplic ationContext.finishBeanFactoryInitialization(Abstr actApplicationContext.java:842) 
    at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:416) 
    at org.springframework.test.context.support.AbstractG enericContextLoader.loadContext(AbstractGenericCon textLoader.java:84) 
    at org.springframework.test.context.support.AbstractG enericContextLoader.loadContext(AbstractGenericCon textLoader.java:1) 
    at org.springframework.test.context.TestContext.loadA pplicationContext(TestContext.java:280) 
    at org.springframework.test.context.TestContext.getAp plicationContext(TestContext.java:304) 
    ... 25 more 

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ception: Query was empty 
    at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:40 6) 
    at com.mysql.jdbc.Util.getInstance(Util.java:381) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLErro r.java:1030) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLErro r.java:956) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:3491) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:3423) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:19 36) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :2060) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionIm pl.java:2536) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(Stateme ntImpl.java:1564) 
    at com.mysql.jdbc.StatementImpl.executeUpdate(Stateme ntImpl.java:1485) 
    at org.apache.commons.dbcp.DelegatingStatement.execut eUpdate(DelegatingStatement.java:228) 
    at org.springframework.jdbc.datasource.init.ResourceD atabasePopulator.executeSqlScript(ResourceDatabase Populator.java:157) 
    at org.springframework.jdbc.datasource.init.ResourceD atabasePopulator.populate(ResourceDatabasePopulato r.java:110) 
    at org.springframework.jdbc.datasource.init.DataSourc eInitializer.afterPropertiesSet(DataSourceInitiali zer.java:69) 
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1460) 
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.initializeBean(Abstract AutowireCapableBeanFactory.java:1398) 
    ... 
+0

Spring Beanの設定を投稿できますか?春のアプリケーションコンテキストの読み込み中にスクリプトを使用してクォーツのDBを初期化していますか? – blob

+0

はい、それが理由でした!下の私のより詳細な答えを見てください...ありがとう! – Marina

答えて

0

のみの推測:あなたは接続検証クエリーを指定する必要があるかどうかを確認してください。何かのように validationQuery="select 1"

+0

ありがとう、ラルフ、私は試した - と同じエラーが... – Marina

2

@blob:あなたがターゲットになっています。 (なぜなら、エラーメッセージが示唆されたように...)NotificationInitializerが初期化されなかった理由を理解しようと時間を費やした結果、私は春の設定からQuartz DB初期化スクリプトを削除しようとしました。

<jdbc:initialize-database data-source="dataSource" 
    enabled="${database.initschema}"> 
    <jdbc:script location="${database.schemaLoc}" /> 
    <jdbc:script location="${database.seedLoc}" /> 
    <!-- <jdbc:script location="classpath:db/tables_mysql_innodb_1.8.5.sql" /> --> 
</jdbc:initialize-database> 

は、私はちょうど私がクォーツのためにこのようにDBテーブルを作成することはできませんなぜ私はまだ理解していない、今:) ...春のエラーメッセージが、もう少し具体的だった

を望む - 同じスクリプトをDB上で直接実行するとうまく動作します。たぶん春のスタートアップアクションの変わったシーケンス?この方法ならば、テスト、すべての

は最初java.net.InetAddress.getLocalHost()

おかげで、 マリーナ

1

は、私は最近、私のために働いた後、(私は、Mac OS Xの下でJava7を使用していた)、あまりにもこの問題に出くわしました作品は、それはのような例外をスローした場合:

Caused by: java.net.UnknownHostException: leo-mbp: nodename nor servname provided, or not known 
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901) 
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293) 
    at java.net.InetAddress.getLocalHost(InetAddress.java:1469) 

それを回避するために、以下を実行します。

scutil --set HostName "localhost" 

ご希望の場合はお手数ですが、

0

quartz.propertiesファイルの "org.quartz.scheduler.instanceId"をAUTOから10に変更すると、私の仕事に役立ちました。

関連する問題