Skip to content

Commit 6888a9c

Browse files
authored
Preserve java configuration when provided (#279)
1 parent 8ef4c60 commit 6888a9c

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

core/src/main/scala-2/fly4s/data/Fly4sConfig.scala

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package fly4s.data
33
import cats.data.NonEmptyList
44
import com.geirolz.macros.fluent.copy.FluentCopy
55
import fly4s.data.Fly4sConfigDefaults.*
6+
import org.flywaydb.core.api.configuration.Configuration
67

78
import java.nio.charset.Charset
89

@@ -51,6 +52,7 @@ case class Fly4sConfig(
5152
skipDefaultCallbacks: Boolean = defaultSkipDefaultCallbacks,
5253
skipDefaultResolvers: Boolean = defaultSkipDefaultResolvers,
5354
// --- mima after 1.0.0 ---
54-
loggers: List[LoggerType] = defaultLoggers
55+
loggers: List[LoggerType] = defaultLoggers,
56+
baseJavaConfig: Option[Configuration] = None
5557
) extends Fly4sConfigContract
5658
object Fly4sConfig extends Fly4sConfigBuilder

core/src/main/scala-3/fly4s/data/Fly4sConfig.scala

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package fly4s.data
22

33
import cats.data.NonEmptyList
44
import fly4s.data.Fly4sConfigDefaults.*
5-
import fly4s.data.*
5+
import org.flywaydb.core.api.configuration.Configuration
66

77
import java.nio.charset.Charset
88

@@ -50,7 +50,8 @@ case class Fly4sConfig(
5050
skipDefaultCallbacks: Boolean = defaultSkipDefaultCallbacks,
5151
skipDefaultResolvers: Boolean = defaultSkipDefaultResolvers,
5252
// --- mima after 1.0.0 ---
53-
loggers: List[LoggerType] = defaultLoggers
53+
loggers: List[LoggerType] = defaultLoggers,
54+
baseJavaConfig: Option[Configuration] = None
5455
) extends Fly4sConfigContract
5556
object Fly4sConfig extends Fly4sConfigBuilder:
5657

core/src/main/scala/fly4s/Fly4s.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ object Fly4s extends AllInstances {
203203
)(implicit F: Async[F]): Resource[F, Fly4s[F]] = {
204204

205205
val acquireFly4s = for {
206-
c1 <- Fly4sConfig.toJava(config, classLoader).liftTo[F]
206+
c1 <- Fly4sConfig.toJavaF[F](config, classLoader)
207207
c2 <- F.delay(Flyway.configure(classLoader).configuration(c1))
208208
fly4s <- fromJavaConfig[F](mapFlywayConfig(c2))
209209
} yield fly4s
@@ -242,7 +242,7 @@ object Fly4s extends AllInstances {
242242
for {
243243
currentJConfig <- F.pure(flyway.getConfiguration)
244244
classLoader = currentJConfig.getClassLoader
245-
c <- Fly4sConfig.toJava(newConfig, classLoader).liftTo[F]
245+
c <- Fly4sConfig.toJavaF[F](newConfig, classLoader)
246246
jConfig <- F.delay {
247247

248248
val newJConfig = new FluentConfiguration(classLoader)

core/src/main/scala/fly4s/data/Fly4sConfigBuilder.scala

+18-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package fly4s.data
22

3+
import cats.MonadThrow
34
import cats.data.NonEmptyList
45
import org.flywaydb.core.api.configuration.{Configuration, FluentConfiguration}
56

@@ -8,6 +9,7 @@ import scala.jdk.CollectionConverters.{MapHasAsJava, MapHasAsScala}
89
import scala.util.Try
910

1011
private[fly4s] trait Fly4sConfigContract {
12+
val baseJavaConfig: Option[Configuration]
1113
val connectRetries: Int
1214
val initSql: Option[String]
1315
val defaultSchemaName: Option[String]
@@ -115,6 +117,7 @@ private[fly4s] trait Fly4sConfigBuilder {
115117

116118
def fromJava(c: Configuration): Fly4sConfig =
117119
new Fly4sConfig(
120+
baseJavaConfig = Some(c),
118121
// ---------- connection ----------
119122
connectRetries = c.getConnectRetries,
120123
initSql = Option(c.getInitSql),
@@ -161,12 +164,25 @@ private[fly4s] trait Fly4sConfigBuilder {
161164
skipDefaultResolvers = c.isSkipDefaultResolvers
162165
)
163166

167+
@deprecated("Use toJavaF[Try] instead, this will be removed in the future versions.", "1.0.1")
164168
def toJava(
165169
c: Fly4sConfig,
166170
classLoader: ClassLoader = Thread.currentThread.getContextClassLoader
167-
): Try[Configuration] = Try {
171+
): Try[Configuration] = toJavaF[Try](c, classLoader)
172+
173+
// TODO Remove this method in the future to `toJava`
174+
def toJavaF[F[_]: MonadThrow](
175+
c: Fly4sConfig,
176+
classLoader: ClassLoader = Thread.currentThread.getContextClassLoader
177+
): F[Configuration] = MonadThrow[F].catchNonFatal {
178+
179+
val fluentConfiguration: FluentConfiguration = c.baseJavaConfig match {
180+
case Some(jconf) => new FluentConfiguration(classLoader).configuration(jconf)
181+
case None => new FluentConfiguration(classLoader)
182+
}
183+
168184
// ---------- connection ----------
169-
new FluentConfiguration(classLoader)
185+
fluentConfiguration
170186
.connectRetries(c.connectRetries)
171187
.initSql(c.initSql.orNull)
172188
.defaultSchema(c.defaultSchemaName.orNull)

0 commit comments

Comments
 (0)