package io.dropwizard.db; import com.codahale.metrics.MetricRegistry; import io.dropwizard.util.Duration; import java.util.Map; import java.util.Optional; /** * Interface of a factory that produces JDBC data sources * backed by the connection pool. */ public interface PooledDataSourceFactory { /** * Whether ORM tools allowed to add comments to SQL queries. * * @return {@code true}, if allowed */ boolean isAutoCommentsEnabled(); /** * Returns the configuration properties for ORM tools. * * @return configuration properties as a map */ Map<String, String> getProperties(); /** * Returns the timeout for awaiting a response from the database * during connection health checks. * * @return the timeout as {@code Duration} */ Optional<Duration> getValidationQueryTimeout(); /** * Returns the timeout for awaiting a response from the database * during connection health checks. * * @return the timeout as {@code Duration} * @deprecated Use {@link #getValidationQueryTimeout()} */ @Deprecated Optional<Duration> getHealthCheckValidationTimeout(); /** * Returns the SQL query, which is being used for the database * connection health check. * * @return the SQL query as a string */ String getValidationQuery(); /** * Returns the SQL query, which is being used for the database * connection health check. * * @return the SQL query as a string * @deprecated Use {@link #getValidationQuery()} */ @Deprecated String getHealthCheckValidationQuery(); /** * Returns the Java class of the database driver. * * @return the JDBC driver class as a string */ String getDriverClass(); /** * Returns the JDBC connection URL. * * @return the JDBC connection URL as a string */ String getUrl(); /** * Configures the pool as a single connection pool. * It's useful for tools that use only one database connection, * such as database migrations. */ void asSingleConnectionPool(); /** * Builds a new JDBC data source backed by the connection pool * and managed by Dropwizard. * * @param metricRegistry the application metric registry * @param name name of the connection pool * @return a new JDBC data source as {@code ManagedDataSource} */ ManagedDataSource build(MetricRegistry metricRegistry, String name); }