11package com .github .sideeffffect .quartz
22
3+ import cats .MonadThrow
34import cats .effect .std .Dispatcher
45import cats .effect .syntax .all ._
56import cats .effect .{Async , MonadCancelThrow , Resource , Sync }
@@ -24,11 +25,11 @@ import scala.io.Source
2425import scala .jdk .CollectionConverters ._
2526import scala .util .chaining ._
2627
27- private class SchedulerQuartz [A : Encoder : Decoder , F [_]: Sync ](
28+ private class SchedulerQuartz [A : Encoder : Decoder , F [_]: MonadThrow , G [_] : Sync ](
2829 underlying : org.quartz.Scheduler ,
2930 action : A => F [Unit ],
3031 dispatcher : Dispatcher [F ],
31- ) extends com.github.sideeffffect.quartz.Scheduler [A , F ]
32+ ) extends com.github.sideeffffect.quartz.Scheduler [A , G ]
3233 with Job {
3334
3435 def executeF (context : JobExecutionContext ): F [Unit ] = for {
@@ -38,14 +39,14 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
3839
3940 override def execute (context : JobExecutionContext ): Unit = dispatcher.unsafeRunSync(executeF(context))
4041
41- override def scheduleJob (name : String , group : String , jobData : A , cronExpression : String ): F [Unit ] = scheduleJob(
42+ override def scheduleJob (name : String , group : String , jobData : A , cronExpression : String ): G [Unit ] = scheduleJob(
4243 name,
4344 group,
4445 jobData,
4546 _.withSchedule(CronScheduleBuilder .cronSchedule(cronExpression).withMisfireHandlingInstructionFireAndProceed),
4647 ).void
4748
48- override def scheduleJob (name : String , group : String , jobData : A , instant : Instant ): F [Unit ] = scheduleJob(
49+ override def scheduleJob (name : String , group : String , jobData : A , instant : Instant ): G [Unit ] = scheduleJob(
4950 name,
5051 group,
5152 jobData,
@@ -58,10 +59,10 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
5859 group : String ,
5960 jobData : A ,
6061 configure : TriggerBuilder [Trigger ] => TriggerBuilder [? <: Trigger ],
61- ): F [java.util.Date ] = Sync [F ].blocking {
62+ ): G [java.util.Date ] = Sync [G ].blocking {
6263 val jobKey = JobKey .jobKey(name, group)
6364 val jobDetail = JobBuilder
64- .newJob(classOf [SchedulerQuartz [A , F ]])
65+ .newJob(classOf [SchedulerQuartz [A , F , G ]])
6566 .withIdentity(jobKey)
6667 .usingJobData(jobDataMapKey, jobData.asJson.spaces2SortKeys)
6768 .requestRecovery(true )
@@ -78,11 +79,11 @@ private class SchedulerQuartz[A: Encoder: Decoder, F[_]: Sync](
7879 underlying.scheduleJob(jobDetail, trigger)
7980 }
8081
81- override def checkExists (name : String , group : String ): F [Boolean ] = Sync [F ].blocking {
82+ override def checkExists (name : String , group : String ): G [Boolean ] = Sync [G ].blocking {
8283 underlying.checkExists(JobKey .jobKey(name, group))
8384 }
8485
85- override def deleteJob (name : String , group : String ): F [Boolean ] = Sync [F ].blocking {
86+ override def deleteJob (name : String , group : String ): G [Boolean ] = Sync [G ].blocking {
8687 underlying.deleteJob(JobKey .jobKey(name, group))
8788 }
8889}
@@ -142,11 +143,11 @@ object SchedulerQuartz {
142143 )
143144 """ .query[Boolean ].unique.transact(transactor)
144145
145- def make [A : Encoder : Decoder , F [_]: Async , DS <: DataSource ](
146+ def make [A : Encoder : Decoder , DS <: DataSource , F [_]: Async , G [_] : Sync ](
146147 transactor : Transactor .Aux [F , DS ],
147148 dbInitScriptName : Option [String ] = None ,
148149 customQuartzConfig : Map [String , String ] = Map (),
149- )(action : A => F [Unit ]): Resource [F , com.github.sideeffffect.quartz.Scheduler [A , F ]] = for {
150+ )(action : A => F [Unit ]): Resource [F , com.github.sideeffffect.quartz.Scheduler [A , G ]] = for {
150151 dispatcher <- Dispatcher .parallel[F ](await = true )
151152
152153 quartzConfig0 = defaultQuartzConfig ++ customQuartzConfig
@@ -156,7 +157,7 @@ object SchedulerQuartz {
156157 dbIsInitialized <- isDbInitialized(transactor, quartzConfig(tablePrefixKey)).toResource
157158 _ <- Async [F ].unlessA(dbIsInitialized)(dbInitScriptName.traverse(dbInit(transactor))).toResource
158159
159- scheduler <- Resource [F , SchedulerQuartz [A , F ]](Sync [F ].blocking {
160+ scheduler <- Resource [F , SchedulerQuartz [A , F , G ]](Sync [F ].blocking {
160161 DBConnectionManager
161162 .getInstance()
162163 .addConnectionProvider(
@@ -171,7 +172,7 @@ object SchedulerQuartz {
171172 val props = { val p = new Properties (); p.putAll(quartzConfig.asJava); p }
172173 val schedulerFactory = new StdSchedulerFactory (props)
173174 val scheduler = schedulerFactory.getScheduler()
174- val schedulerQuartz = new SchedulerQuartz [A , F ](scheduler, action, dispatcher)
175+ val schedulerQuartz = new SchedulerQuartz [A , F , G ](scheduler, action, dispatcher)
175176 scheduler.setJobFactory((_ : TriggerFiredBundle , _ : org.quartz.Scheduler ) => schedulerQuartz)
176177 scheduler.start()
177178 (
0 commit comments