Spring Boot 2.0 Quartz - Use non-primary datasource

This is a bug in spring-boot. As a workaround, I removed spring.quartz.job-store-type property and then configured DataSource and PlatformTransactionManager in customizer. Refer below updated code:

@Configuration
public class SchedulerConfig 
{
    private DataSource dataSource;

    private PlatformTransactionManager transactionManager;

    @Autowired
    public SchedulerConfig(@Qualifier("schedulerDataSource") DataSource dataSource, @Qualifier("schedulerTransactionManager") PlatformTransactionManager transactionManager) 
    {
        this.dataSource = dataSource;
        this.transactionManager = transactionManager;
    }

    @Bean
    public SchedulerFactoryBeanCustomizer schedulerFactoryBeanCustomizer() 
    {
        return bean -> 
        {
            bean.setDataSource(dataSource);
            bean.setTransactionManager(transactionManager);
        };
    }
}

You could customise the datasource by building the SchedulerFactoryBean yourself:

@Bean
public SchedulerFactoryBean schedulerFactory() {
    SchedulerFactoryBean bean = new SchedulerFactoryBean();
    bean.setDataSource(schedulerDataSource());
    return bean;
}

Or, in Spring Boot 2, you can use a SchedulerFactoryBeanCustomizer. This will allow you customise the bean instantiated by the autoconfigurer, which may be less work.

@Configuration
public class SchedulerConfig {
    DataSource dataSource;

    @Autowired
    public SchedulerConfig(@Qualifier("scheduler.datasource") DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Bean
    public SchedulerFactoryBeanCustomizer schedulerFactoryBeanCustomizer()
    {
        return bean -> bean.setDataSource(dataSource);
    }
}