springboot + dynamic hikari+Quartz+postgresql 整合
时间: 2023-07-02 07:19:17 浏览: 249
springboot与quartz框架整合
好的,针对你的问题,我可以给你提供一些思路和建议。
首先,你可以使用 Spring Boot 作为你整个应用的基础框架,它提供了丰富的功能和插件,使得整合 Quartz 和 PostgreSQL 变得更加简单。
其次,对于数据库连接池,你可以使用 HikariCP,它是一个非常轻量级的连接池实现,性能非常出色,适合用于高并发场景。
最后,对于 Quartz 的整合,你可以参考 Spring Boot 官方提供的 Quartz Starter,这个 Starter 已经将 Quartz 集成到了 Spring Boot 中,并提供了自动配置和一些默认的设置,使得整合变得更加简单。
下面是一个简单的示例,演示如何使用 Spring Boot、HikariCP 和 Quartz 整合 PostgreSQL:
1. 首先,在你的 pom.xml 中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
```
2. 在 application.properties 文件中添加以下配置:
```properties
spring.datasource.url=jdbc:postgresql://localhost:5432/mydatabase
spring.datasource.username=myusername
spring.datasource.password=mypassword
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.quartz.properties.org.quartz.jobStore.dataSource=myDataSource
spring.quartz.properties.org.quartz.dataSource.myDataSource.driver=org.postgresql.Driver
spring.quartz.properties.org.quartz.dataSource.myDataSource.URL=jdbc:postgresql://localhost:5432/mydatabase
spring.quartz.properties.org.quartz.dataSource.myDataSource.user=myusername
spring.quartz.properties.org.quartz.dataSource.myDataSource.password=mypassword
spring.quartz.properties.org.quartz.dataSource.myDataSource.maxConnections=10
```
3. 在你的代码中配置 Quartz:
```java
@Configuration
public class QuartzConfig {
@Autowired
private DataSource dataSource;
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setDataSource(dataSource);
schedulerFactoryBean.setApplicationContextSchedulerContextKey("applicationContext");
Properties quartzProperties = new Properties();
quartzProperties.setProperty("org.quartz.scheduler.instanceName", "QuartzScheduler");
quartzProperties.setProperty("org.quartz.scheduler.instanceId", "AUTO");
quartzProperties.setProperty("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
quartzProperties.setProperty("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
quartzProperties.setProperty("org.quartz.jobStore.useProperties", "true");
quartzProperties.setProperty("org.quartz.jobStore.dataSource", "myDataSource");
quartzProperties.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
quartzProperties.setProperty("org.quartz.jobStore.isClustered", "false");
quartzProperties.setProperty("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
quartzProperties.setProperty("org.quartz.threadPool.threadCount", "10");
quartzProperties.setProperty("org.quartz.threadPool.threadPriority", "5");
schedulerFactoryBean.setQuartzProperties(quartzProperties);
return schedulerFactoryBean;
}
@Bean
public JobDetail sampleJobDetail() {
return JobBuilder.newJob(SampleJob.class)
.withIdentity("sampleJob")
.usingJobData("name", "World")
.storeDurably()
.build();
}
@Bean
public Trigger sampleJobTrigger() {
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever();
return TriggerBuilder.newTrigger()
.forJob(sampleJobDetail())
.withIdentity("sampleTrigger")
.withSchedule(scheduleBuilder)
.build();
}
}
```
这个配置类定义了一个 SchedulerFactoryBean,它使用我们之前配置的数据源,并设置了 Quartz 的一些属性。同时,我们还定义了一个 SampleJob,它会每隔 10 秒钟执行一次,并输出一条日志信息。
4. 编写 SampleJob 类:
```java
public class SampleJob implements Job {
private static final Logger LOGGER = LoggerFactory.getLogger(SampleJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
LOGGER.info("Hello, {}!", context.getMergedJobDataMap().get("name"));
}
}
```
这个类实现了 Quartz 的 Job 接口,定义了一个 execute 方法,它会在每次调度时被执行。
5. 运行应用程序,你应该会看到类似如下的输出:
```
2021-10-14 15:31:00.001 INFO 25508 --- [pool-1-thread-1] o.s.s.quartz.SampleJob : Hello, World!
2021-10-14 15:31:10.002 INFO 25508 --- [pool-1-thread-1] o.s.s.quartz.SampleJob : Hello, World!
2021-10-14 15:31:20.001 INFO 25508 --- [pool-1-thread-1] o.s.s.quartz.SampleJob : Hello, World!
...
```
这个示例演示了如何使用 Spring Boot、HikariCP 和 Quartz 整合 PostgreSQL。当然,这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。
阅读全文