Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
DEMO
spring-boot
Commits
37466310
Commit
37466310
authored
Sep 01, 2019
by
Phillip Webb
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2.1.x'
Closes gh-18085
parents
caa4c165
0cfcbcba
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
73 additions
and
9 deletions
+73
-9
QuartzAutoConfiguration.java
...rk/boot/autoconfigure/quartz/QuartzAutoConfiguration.java
+41
-9
QuartzAutoConfigurationTests.java
...ot/autoconfigure/quartz/QuartzAutoConfigurationTests.java
+32
-0
No files found.
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration.java
View file @
37466310
...
...
@@ -21,6 +21,7 @@ import java.util.Properties;
import
javax.sql.DataSource
;
import
liquibase.integration.spring.SpringLiquibase
;
import
org.quartz.Calendar
;
import
org.quartz.JobDetail
;
import
org.quartz.Scheduler
;
...
...
@@ -30,11 +31,15 @@ import org.springframework.beans.factory.ObjectProvider;
import
org.springframework.boot.autoconfigure.AbstractDependsOnBeanFactoryPostProcessor
;
import
org.springframework.boot.autoconfigure.AutoConfigureAfter
;
import
org.springframework.boot.autoconfigure.EnableAutoConfiguration
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate
;
import
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
;
import
org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration
;
import
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.ApplicationContext
;
...
...
@@ -56,7 +61,8 @@ import org.springframework.transaction.PlatformTransactionManager;
@Configuration
(
proxyBeanMethods
=
false
)
@ConditionalOnClass
({
Scheduler
.
class
,
SchedulerFactoryBean
.
class
,
PlatformTransactionManager
.
class
})
@EnableConfigurationProperties
(
QuartzProperties
.
class
)
@AutoConfigureAfter
({
DataSourceAutoConfiguration
.
class
,
HibernateJpaAutoConfiguration
.
class
})
@AutoConfigureAfter
({
DataSourceAutoConfiguration
.
class
,
HibernateJpaAutoConfiguration
.
class
,
LiquibaseAutoConfiguration
.
class
,
FlywayAutoConfiguration
.
class
})
public
class
QuartzAutoConfiguration
{
@Bean
...
...
@@ -123,22 +129,48 @@ public class QuartzAutoConfiguration {
QuartzProperties
properties
)
{
DataSource
dataSourceToUse
=
getDataSource
(
dataSource
,
quartzDataSource
);
return
new
QuartzDataSourceInitializer
(
dataSourceToUse
,
resourceLoader
,
properties
);
}
@Bean
public
static
DataSourceInitializerSchedulerDependencyPostProcessor
dataSourceInitializerSchedulerDependencyPostProcessor
()
{
return
new
DataSourceInitializerSchedulerDependencyPostProcessor
();
}
private
static
class
DataSourceInitializerSchedulerDependencyPostProcessor
extends
AbstractDependsOnBeanFactoryPostProcessor
{
/**
* Additional configuration to ensure that {@link SchedulerFactoryBean} and
* {@link Scheduler} beans depend on the {@link QuartzDataSourceInitializer}
* bean(s).
*/
@Configuration
(
proxyBeanMethods
=
false
)
static
class
QuartzSchedulerDependencyConfiguration
{
@Bean
public
static
SchedulerDependsOnBeanFactoryPostProcessor
quartzSchedulerDataSourceInitializerDependsOnBeanFactoryPostProcessor
()
{
return
new
SchedulerDependsOnBeanFactoryPostProcessor
(
QuartzDataSourceInitializer
.
class
);
}
@Bean
@ConditionalOnBean
(
FlywayMigrationInitializer
.
class
)
public
static
SchedulerDependsOnBeanFactoryPostProcessor
quartzSchedulerFilywayDependsOnBeanFactoryPostProcessor
()
{
return
new
SchedulerDependsOnBeanFactoryPostProcessor
(
FlywayMigrationInitializer
.
class
);
}
DataSourceInitializerSchedulerDependencyPostProcessor
()
{
super
(
Scheduler
.
class
,
SchedulerFactoryBean
.
class
,
"quartzDataSourceInitializer"
);
@Bean
@ConditionalOnBean
(
SpringLiquibase
.
class
)
public
static
SchedulerDependsOnBeanFactoryPostProcessor
quartzSchedulerLiquibaseDependsOnBeanFactoryPostProcessor
()
{
return
new
SchedulerDependsOnBeanFactoryPostProcessor
(
SpringLiquibase
.
class
);
}
}
}
/**
* {@link AbstractDependsOnBeanFactoryPostProcessor} for Quartz {@link Scheduler} and
* {@link SchedulerFactoryBean}.
*/
private
static
class
SchedulerDependsOnBeanFactoryPostProcessor
extends
AbstractDependsOnBeanFactoryPostProcessor
{
SchedulerDependsOnBeanFactoryPostProcessor
(
Class
<?>...
dependencyTypes
)
{
super
(
Scheduler
.
class
,
SchedulerFactoryBean
.
class
,
dependencyTypes
);
}
}
}
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/quartz/QuartzAutoConfigurationTests.java
View file @
37466310
...
...
@@ -16,12 +16,16 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
quartz
;
import
java.io.InputStream
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.util.concurrent.Executor
;
import
javax.sql.DataSource
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.junit.jupiter.api.io.TempDir
;
import
org.quartz.Calendar
;
import
org.quartz.JobBuilder
;
import
org.quartz.JobDetail
;
...
...
@@ -39,9 +43,11 @@ import org.quartz.simpl.RAMJobStore;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.AutoConfigurations
;
import
org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceProperties
;
import
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
;
import
org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration
;
import
org.springframework.boot.test.context.assertj.AssertableApplicationContext
;
import
org.springframework.boot.test.context.runner.ApplicationContextRunner
;
import
org.springframework.boot.test.context.runner.ContextConsumer
;
...
...
@@ -52,6 +58,7 @@ import org.springframework.context.annotation.Configuration;
import
org.springframework.context.annotation.Import
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.core.env.Environment
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.scheduling.quartz.LocalDataSourceJobStore
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
...
...
@@ -240,6 +247,31 @@ class QuartzAutoConfigurationTests {
});
}
@Test
void
withLiquibase
()
{
this
.
contextRunner
.
withUserConfiguration
(
QuartzJobsConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
DataSourceAutoConfiguration
.
class
,
DataSourceTransactionManagerAutoConfiguration
.
class
,
LiquibaseAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.quartz.job-store-type=jdbc"
,
"spring.quartz.jdbc.initialize-schema=never"
,
"spring.liquibase.change-log=classpath:org/quartz/impl/jdbcjobstore/liquibase.quartz.init.xml"
)
.
run
(
assertDataSourceJobStore
(
"dataSource"
));
}
@Test
void
withFlyway
(
@TempDir
Path
flywayLocation
)
throws
Exception
{
ClassPathResource
tablesResource
=
new
ClassPathResource
(
"org/quartz/impl/jdbcjobstore/tables_h2.sql"
);
try
(
InputStream
stream
=
tablesResource
.
getInputStream
())
{
Files
.
copy
(
stream
,
flywayLocation
.
resolve
(
"V2__quartz.sql"
));
}
this
.
contextRunner
.
withUserConfiguration
(
QuartzJobsConfiguration
.
class
)
.
withConfiguration
(
AutoConfigurations
.
of
(
DataSourceAutoConfiguration
.
class
,
DataSourceTransactionManagerAutoConfiguration
.
class
,
FlywayAutoConfiguration
.
class
))
.
withPropertyValues
(
"spring.quartz.job-store-type=jdbc"
,
"spring.quartz.jdbc.initialize-schema=never"
,
"spring.flyway.locations=filesystem:"
+
flywayLocation
,
"spring.flyway.baseline-on-migrate=true"
)
.
run
(
assertDataSourceJobStore
(
"dataSource"
));
}
@Test
void
schedulerNameWithDedicatedProperty
()
{
this
.
contextRunner
.
withPropertyValues
(
"spring.quartz.scheduler-name=testScheduler"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment