Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to configure quartz scheduler with spring-style properties file in Tomcat?

I have a web application on Apache Tomcat. The web application uses the Quartz Scheduler. I load the quartz.properties from the classpath with the -D switch which contains the following properties:

quartz.jndi=java:comp/env/something
org.quartz.dataSource.myJndiName.jndiURL=${quartz.jndi}

But it isn't working. Maybe, the ${quartz.jndi} only works in Spring Context with the PropertyPlaceholderConfigurer bean? Is it possible to load this properties file in Spring for the Quartz Scheduler?

like image 612
user1083862 Avatar asked Jan 27 '26 01:01

user1083862


2 Answers

Over a year later I know, but hopefully useful to somebody: you can accomplish this by setting the properties inside your Spring context xml:

<bean name="schedulerFactory" depends-on="flyway" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="quartzProperties">
        <map>
            <entry key="org.quartz.threadPool.class" value="org.quartz.simpl.SimpleThreadPool" />
            <entry key="org.quartz.jobStore.useProperties" value="true" />
            <entry key="org.quartz.jobStore.class" value="org.quartz.impl.jdbcjobstore.JobStoreTX" />
            <entry key="org.quartz.jobStore.driverDelegateClass" value="org.quartz.impl.jdbcjobstore.StdJDBCDelegate" />
            <entry key="org.quartz.jobStore.tablePrefix" value="QRTZ_" />
            <entry key="org.quartz.jobStore.dataSource"  value="qzDS" />
            <entry key="org.quartz.dataSource.qzDS.jndiURL" value="java:comp/env/jdbc/${jndi.dataSource}"/>
        </map>
    </property>
    <property name="applicationContextSchedulerContextKey">
        <value>applicationContext</value>
    </property>
</bean>

Notice I've put most of the JobStore-related properties in here as they seem to need to be in the same place. There is still some other configuration in the usual quartz.properties file.

like image 86
TomL Avatar answered Jan 28 '26 19:01

TomL


You can set the configLocation in your SchedulerFactoryBean:

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="configLocation" value="classpath:quartz.properties" />
    [...]
</bean>
like image 42
J.P. Armstrong Avatar answered Jan 28 '26 19:01

J.P. Armstrong



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!