Class DatabaseConfig

  • Direct Known Subclasses:
    ServerConfig

    public class DatabaseConfig
    extends Object
    The configuration used for creating a Database.

    Used to programmatically construct an Database and optionally register it with the DB singleton.

    If you just use DB thout this programmatic configuration Ebean will read the application.properties file and take the configuration from there. This usually includes searching the class path and automatically registering any entity classes and listeners etc.

    
    
     DatabaseConfig config = new DatabaseConfig();
    
     // read the ebean.properties and load
     // those settings into this DatabaseConfig object
     config.loadFromProperties();
    
     // explicitly register the entity beans to avoid classpath scanning
     config.addClass(Customer.class);
     config.addClass(User.class);
    
     Database db = DatabaseFactory.create(config);
    
     

    Note that DatabaseConfigProvider provides a standard Java ServiceLoader mechanism that can be used to apply configuration to the DatabaseConfig.

    Author:
    emcgreal, rbygrave
    See Also:
    DatabaseFactory
    • Constructor Detail

      • DatabaseConfig

        public DatabaseConfig()
        Construct a Database Configuration for programmatically creating an Database.
    • Method Detail

      • getClock

        public Clock getClock()
        Get the clock used for setting the timestamps (e.g. @UpdatedTimestamp) on objects.
      • setClock

        public void setClock​(Clock clock)
        Set the clock used for setting the timestamps (e.g. @UpdatedTimestamp) on objects.
      • getSlowQueryMillis

        public long getSlowQueryMillis()
        Return the slow query time in millis.
      • setSlowQueryMillis

        public void setSlowQueryMillis​(long slowQueryMillis)
        Set the slow query time in millis.
      • setDefaultOrderById

        @Deprecated
        public void setDefaultOrderById​(boolean defaultOrderById)
        Deprecated.
        Deprecated - look to have explicit order by. Sets the default orderById setting for queries.
      • isDefaultOrderById

        public boolean isDefaultOrderById()
        Returns the default orderById setting for queries.
      • putServiceObject

        public void putServiceObject​(String key,
                                     Object configObject)
        Put a service object into configuration such that it can be passed to a plugin.

        For example, put IgniteConfiguration in to be passed to the Ignite plugin.

      • putServiceObject

        public void putServiceObject​(Object configObject)
        Put a service object into configuration such that it can be passed to a plugin.
        
        
           JedisPool jedisPool = ..
        
           config.putServiceObject(jedisPool);
        
         
      • getServiceObject

        public <P> P getServiceObject​(Class<P> cls)
        Used by plugins to obtain service objects.
        
        
           JedisPool jedisPool = config.getServiceObject(JedisPool.class);
        
         
        Parameters:
        cls - The type of the service object to obtain
        Returns:
        The service object given the class type
      • getJsonFactory

        public com.fasterxml.jackson.core.JsonFactory getJsonFactory()
        Return the Jackson JsonFactory to use.

        If not set a default implementation will be used.

      • setJsonFactory

        public void setJsonFactory​(com.fasterxml.jackson.core.JsonFactory jsonFactory)
        Set the Jackson JsonFactory to use.

        If not set a default implementation will be used.

      • setJsonInclude

        public void setJsonInclude​(JsonConfig.Include jsonInclude)
        Set the JSON include mode used when writing JSON.

        Set to NON_NULL or NON_EMPTY to suppress nulls or null and empty collections respectively.

      • getName

        public String getName()
        Return the name of the Database.
      • setName

        public void setName​(String name)
        Set the name of the Database.
      • getContainerConfig

        public ContainerConfig getContainerConfig()
        Return the container / clustering configuration.

        The container holds all the Database instances and provides clustering communication services to all the Database instances.

      • setContainerConfig

        public void setContainerConfig​(ContainerConfig containerConfig)
        Set the container / clustering configuration.

        The container holds all the Database instances and provides clustering communication services to all the Database instances.

      • isRegister

        public boolean isRegister()
        Return true if this server should be registered with the Ebean singleton when it is created.

        By default this is set to true.

      • setRegister

        public void setRegister​(boolean register)
        Set to false if you do not want this server to be registered with the Ebean singleton when it is created.

        By default this is set to true.

      • isDefaultServer

        public boolean isDefaultServer()
        Return true if this server should be registered as the "default" server with the Ebean singleton.

        This is only used when setRegister(boolean) is also true.

      • setDefaultServer

        public void setDefaultServer​(boolean defaultServer)
        Set false if you do not want this Database to be registered as the "default" database with the DB singleton.

        This is only used when setRegister(boolean) is also true.

      • getCurrentUserProvider

        public CurrentUserProvider getCurrentUserProvider()
        Return the CurrentUserProvider. This is used to populate @WhoCreated, @WhoModified and support other audit features (who executed a query etc).
      • setCurrentUserProvider

        public void setCurrentUserProvider​(CurrentUserProvider currentUserProvider)
        Set the CurrentUserProvider. This is used to populate @WhoCreated, @WhoModified and support other audit features (who executed a query etc).
      • setTenantPartitionColumn

        public void setTenantPartitionColumn​(String tenantPartitionColumn)
        Set the column name used for TenantMode.PARTITION.
      • getPersistBatch

        public io.ebean.annotation.PersistBatch getPersistBatch()
        Return the PersistBatch mode to use by default at the transaction level.

        When INSERT or ALL is used then save(), delete() etc do not execute immediately but instead go into a JDBC batch execute buffer that is flushed. The buffer is flushed if a query is executed, transaction ends or the batch size is meet.

      • setPersistBatch

        public void setPersistBatch​(io.ebean.annotation.PersistBatch persistBatch)
        Set the JDBC batch mode to use at the transaction level.

        When INSERT or ALL is used then save(), delete() etc do not execute immediately but instead go into a JDBC batch execute buffer that is flushed. The buffer is flushed if a query is executed, transaction ends or the batch size is meet.

      • getPersistBatchOnCascade

        public io.ebean.annotation.PersistBatch getPersistBatchOnCascade()
        Return the JDBC batch mode to use per save(), delete(), insert() or update() request.

        This makes sense when a save() or delete() cascades and executes multiple child statements. The best case for this is when saving a master/parent bean this cascade inserts many detail/child beans.

        This only takes effect when the persistBatch mode at the transaction level does not take effect.

      • setPersistBatchOnCascade

        public void setPersistBatchOnCascade​(io.ebean.annotation.PersistBatch persistBatchOnCascade)
        Set the JDBC batch mode to use per save(), delete(), insert() or update() request.

        This makes sense when a save() or delete() etc cascades and executes multiple child statements. The best caase for this is when saving a master/parent bean this cascade inserts many detail/child beans.

        This only takes effect when the persistBatch mode at the transaction level does not take effect.

      • setPersistBatching

        public void setPersistBatching​(boolean persistBatching)
        Deprecated, please migrate to using setPersistBatch().

        Set to true if you what to use JDBC batching for persisting and deleting beans.

        With this Ebean will batch up persist requests and use the JDBC batch api. This is a performance optimisation designed to reduce the network chatter.

        When true this is equivalent to setPersistBatch(PersistBatch.ALL) or when false to setPersistBatch(PersistBatch.NONE)

      • getPersistBatchSize

        public int getPersistBatchSize()
        Return the batch size used for JDBC batching. This defaults to 20.
      • setPersistBatchSize

        public void setPersistBatchSize​(int persistBatchSize)
        Set the batch size used for JDBC batching. If unset this defaults to 20.

        You can also set the batch size on the transaction.

        See Also:
        Transaction.setBatchSize(int)
      • getQueryBatchSize

        public int getQueryBatchSize()
        Gets the query batch size. This defaults to 100.
        Returns:
        the query batch size
      • setQueryBatchSize

        public void setQueryBatchSize​(int queryBatchSize)
        Sets the query batch size. This defaults to 100.
        Parameters:
        queryBatchSize - the new query batch size
      • setDefaultEnumType

        public void setDefaultEnumType​(javax.persistence.EnumType defaultEnumType)
      • isDisableLazyLoading

        public boolean isDisableLazyLoading()
        Return true if lazy loading is disabled on queries by default.
      • getLazyLoadBatchSize

        public int getLazyLoadBatchSize()
        Return the default batch size for lazy loading of beans and collections.
      • setLazyLoadBatchSize

        public void setLazyLoadBatchSize​(int lazyLoadBatchSize)
        Set the default batch size for lazy loading.

        This is the number of beans or collections loaded when lazy loading is invoked by default.

        The default value is for this is 10 (load 10 beans or collections).

        You can explicitly control the lazy loading batch size for a given join on a query using +lazy(batchSize) or JoinConfig.

      • setDatabaseSequenceBatchSize

        public void setDatabaseSequenceBatchSize​(int databaseSequenceBatchSize)
        Set the number of sequences to fetch/preallocate when using DB sequences.

        This is a performance optimisation to reduce the number times Ebean requests a sequence to be used as an Id for a bean (aka reduce network chatter).

      • getJdbcFetchSizeFindList

        public int getJdbcFetchSizeFindList()
        Return the default JDBC fetchSize hint for findList queries.
      • setJdbcFetchSizeFindList

        public void setJdbcFetchSizeFindList​(int jdbcFetchSizeFindList)
        Set the default JDBC fetchSize hint for findList queries.
      • getJdbcFetchSizeFindEach

        public int getJdbcFetchSizeFindEach()
        Return the default JDBC fetchSize hint for findEach/findEachWhile queries.
      • setJdbcFetchSizeFindEach

        public void setJdbcFetchSizeFindEach​(int jdbcFetchSizeFindEach)
        Set the default JDBC fetchSize hint for findEach/findEachWhile queries.
      • getChangeLogPrepare

        public ChangeLogPrepare getChangeLogPrepare()
        Return the ChangeLogPrepare.

        This is used to set user context information to the ChangeSet in the foreground thread prior to the logging occurring in a background thread.

      • setChangeLogPrepare

        public void setChangeLogPrepare​(ChangeLogPrepare changeLogPrepare)
        Set the ChangeLogPrepare.

        This is used to set user context information to the ChangeSet in the foreground thread prior to the logging occurring in a background thread.

      • setChangeLogListener

        public void setChangeLogListener​(ChangeLogListener changeLogListener)
        Set the ChangeLogListener which actually performs the logging of change sets in the background.
      • getChangeLogRegister

        public ChangeLogRegister getChangeLogRegister()
        Return the ChangeLogRegister which controls which ChangeLogFilter is used for each bean type and in this way provide fine grained control over which persist requests are included in the change log.
      • setChangeLogRegister

        public void setChangeLogRegister​(ChangeLogRegister changeLogRegister)
        Set the ChangeLogRegister which controls which ChangeLogFilter is used for each bean type and in this way provide fine grained control over which persist requests are included in the change log.
      • isChangeLogIncludeInserts

        public boolean isChangeLogIncludeInserts()
        Return true if inserts should be included in the change log by default.
      • setChangeLogIncludeInserts

        public void setChangeLogIncludeInserts​(boolean changeLogIncludeInserts)
        Set if inserts should be included in the change log by default.
      • isChangeLogAsync

        public boolean isChangeLogAsync()
        Return true (default) if the changelog should be written async.
      • setChangeLogAsync

        public void setChangeLogAsync​(boolean changeLogAsync)
        Sets if the changelog should be written async (default = true).
      • setReadAuditLogger

        public void setReadAuditLogger​(ReadAuditLogger readAuditLogger)
        Set the ReadAuditLogger to use. If not set the default implementation is used which logs the read events in JSON format to a standard named SLF4J logger (which can be configured in say logback to log to a separate log file).
      • setReadAuditPrepare

        public void setReadAuditPrepare​(ReadAuditPrepare readAuditPrepare)
        Set the ReadAuditPrepare to use.

        It is expected that an implementation is used that read user context information (user id, user ip address etc) and sets it on the ReadEvent bean before it is sent to the ReadAuditLogger.

      • setDbSchema

        public void setDbSchema​(String dbSchema)
        Set the DB schema to use. This specifies to use this schema for:
        • Running Database migrations - Create and use the DB schema
        • Testing DDL - Create-all.sql DDL execution creates and uses schema
        • Testing Docker - Set default schema on connection URL
      • setGeometrySRID

        public void setGeometrySRID​(int geometrySRID)
        Set the Geometry SRID.
      • getDataTimeZone

        public String getDataTimeZone()
        Return the time zone to use when reading/writing Timestamps via JDBC.

        When set a Calendar object is used in JDBC calls when reading/writing Timestamp objects.

      • setDataTimeZone

        public void setDataTimeZone​(String dataTimeZone)
        Set the time zone to use when reading/writing Timestamps via JDBC.
      • getAsOfViewSuffix

        public String getAsOfViewSuffix()
        Return the suffix appended to the base table to derive the view that contains the union of the base table and the history table in order to support asOf queries.
      • setAsOfViewSuffix

        public void setAsOfViewSuffix​(String asOfViewSuffix)
        Set the suffix appended to the base table to derive the view that contains the union of the base table and the history table in order to support asOf queries.
      • getAsOfSysPeriod

        public String getAsOfSysPeriod()
        Return the database column used to support history and 'As of' queries. This column is a timestamp range or equivalent.
      • setAsOfSysPeriod

        public void setAsOfSysPeriod​(String asOfSysPeriod)
        Set the database column used to support history and 'As of' queries. This column is a timestamp range or equivalent.
      • isUseJtaTransactionManager

        public boolean isUseJtaTransactionManager()
        Return true if we are running in a JTA Transaction manager.
      • setUseJtaTransactionManager

        public void setUseJtaTransactionManager​(boolean useJtaTransactionManager)
        Set to true if we are running in a JTA Transaction manager.
      • isEagerFetchLobs

        public boolean isEagerFetchLobs()
        Return true if LOB's should default to fetch eager. By default this is set to false and LOB's must be explicitly fetched.
      • setEagerFetchLobs

        public void setEagerFetchLobs​(boolean eagerFetchLobs)
        Set to true if you want LOB's to be fetch eager by default. By default this is set to false and LOB's must be explicitly fetched.
      • getMaxCallStack

        public int getMaxCallStack()
        Return the max call stack to use for origin location.
      • setMaxCallStack

        public void setMaxCallStack​(int maxCallStack)
        Set the max call stack to use for origin location.
      • setTransactionRollbackOnChecked

        public void setTransactionRollbackOnChecked​(boolean transactionRollbackOnChecked)
        Set to true if transactions should by default rollback on checked exceptions.
      • getBackgroundExecutorShutdownSecs

        public int getBackgroundExecutorShutdownSecs()
        Return the Background executor shutdown seconds. This is the time allowed for the pool to shutdown nicely before it is forced shutdown.
      • setBackgroundExecutorShutdownSecs

        public void setBackgroundExecutorShutdownSecs​(int backgroundExecutorShutdownSecs)
        Set the Background executor shutdown seconds. This is the time allowed for the pool to shutdown nicely before it is forced shutdown.
      • getCacheMaxSize

        public int getCacheMaxSize()
        Return the L2 cache default max size.
      • setCacheMaxSize

        public void setCacheMaxSize​(int cacheMaxSize)
        Set the L2 cache default max size.
      • getCacheMaxIdleTime

        public int getCacheMaxIdleTime()
        Return the L2 cache default max idle time in seconds.
      • setCacheMaxIdleTime

        public void setCacheMaxIdleTime​(int cacheMaxIdleTime)
        Set the L2 cache default max idle time in seconds.
      • getCacheMaxTimeToLive

        public int getCacheMaxTimeToLive()
        Return the L2 cache default max time to live in seconds.
      • setCacheMaxTimeToLive

        public void setCacheMaxTimeToLive​(int cacheMaxTimeToLive)
        Set the L2 cache default max time to live in seconds.
      • getQueryCacheMaxSize

        public int getQueryCacheMaxSize()
        Return the L2 query cache default max size.
      • setQueryCacheMaxSize

        public void setQueryCacheMaxSize​(int queryCacheMaxSize)
        Set the L2 query cache default max size.
      • getQueryCacheMaxIdleTime

        public int getQueryCacheMaxIdleTime()
        Return the L2 query cache default max idle time in seconds.
      • setQueryCacheMaxIdleTime

        public void setQueryCacheMaxIdleTime​(int queryCacheMaxIdleTime)
        Set the L2 query cache default max idle time in seconds.
      • getQueryCacheMaxTimeToLive

        public int getQueryCacheMaxTimeToLive()
        Return the L2 query cache default max time to live in seconds.
      • setQueryCacheMaxTimeToLive

        public void setQueryCacheMaxTimeToLive​(int queryCacheMaxTimeToLive)
        Set the L2 query cache default max time to live in seconds.
      • setNamingConvention

        public void setNamingConvention​(NamingConvention namingConvention)
        Set the NamingConvention.

        If none is set the default UnderscoreNamingConvention is used.

      • isAllQuotedIdentifiers

        public boolean isAllQuotedIdentifiers()
        Return true if all DB column and table names should use quoted identifiers.
      • setAllQuotedIdentifiers

        public void setAllQuotedIdentifiers​(boolean allQuotedIdentifiers)
        Set to true if all DB column and table names should use quoted identifiers.
      • isDocStoreOnly

        public boolean isDocStoreOnly()
        Return true if this Database is a Document store only instance (has no JDBC DB).
      • setDocStoreOnly

        public void setDocStoreOnly​(boolean docStoreOnly)
        Set to true if this Database is Document store only instance (has no JDBC DB).
      • setReadOnlyDataSource

        public void setReadOnlyDataSource​(DataSource readOnlyDataSource)
        Set the read only DataSource.

        Note that the DataSource is expected to use AutoCommit true mode avoiding the need for explicit commit (or rollback).

        This read only DataSource will be used for implicit query only transactions. It is not used if the transaction is created explicitly or if the query is an update or delete query.

      • getDataSourceConfig

        public io.ebean.datasource.DataSourceConfig getDataSourceConfig()
        Return the configuration to build a DataSource using Ebean's own DataSource implementation.
      • setDataSourceConfig

        public void setDataSourceConfig​(io.ebean.datasource.DataSourceConfig dataSourceConfig)
        Set the configuration required to build a DataSource using Ebean's own DataSource implementation.
      • isAutoReadOnlyDataSource

        public boolean isAutoReadOnlyDataSource()
        Return true if Ebean should create a DataSource for use with implicit read only transactions.
      • setAutoReadOnlyDataSource

        public void setAutoReadOnlyDataSource​(boolean autoReadOnlyDataSource)
        Set to true if Ebean should create a DataSource for use with implicit read only transactions.
      • getReadOnlyDataSourceConfig

        public io.ebean.datasource.DataSourceConfig getReadOnlyDataSourceConfig()
        Return the configuration for the read only DataSource.

        This is only used if autoReadOnlyDataSource is true.

        The driver, url, username and password default to the configuration for the main DataSource if they are not set on this configuration. This means there is actually no need to set any configuration here and we only set configuration for url, username and password etc if it is different from the main DataSource.

      • setReadOnlyDataSourceConfig

        public void setReadOnlyDataSourceConfig​(io.ebean.datasource.DataSourceConfig readOnlyDataSourceConfig)
        Set the configuration for the read only DataSource.
      • setDataSourceJndiName

        public void setDataSourceJndiName​(String dataSourceJndiName)
        Set the JNDI name of the DataSource to use.

        By default a prefix of "java:comp/env/jdbc/" is used to lookup the DataSource. This prefix is not used if dataSourceJndiName starts with "java:".

      • getDatabaseBooleanTrue

        public String getDatabaseBooleanTrue()
        Return a value used to represent TRUE in the database.

        This is used for databases that do not support boolean natively.

        The value returned is either a Integer or a String (e.g. "1", or "T").

      • setDatabaseBooleanTrue

        public void setDatabaseBooleanTrue​(String databaseTrue)
        Set the value to represent TRUE in the database.

        This is used for databases that do not support boolean natively.

        The value set is either a Integer or a String (e.g. "1", or "T").

      • getDatabaseBooleanFalse

        public String getDatabaseBooleanFalse()
        Return a value used to represent FALSE in the database.

        This is used for databases that do not support boolean natively.

        The value returned is either a Integer or a String (e.g. "0", or "F").

      • setDatabaseBooleanFalse

        public void setDatabaseBooleanFalse​(String databaseFalse)
        Set the value to represent FALSE in the database.

        This is used for databases that do not support boolean natively.

        The value set is either a Integer or a String (e.g. "0", or "F").

      • getDatabaseSequenceBatchSize

        public int getDatabaseSequenceBatchSize()
        Return the number of DB sequence values that should be preallocated.
      • setDatabaseSequenceBatch

        public void setDatabaseSequenceBatch​(int databaseSequenceBatchSize)
        Set the number of DB sequence values that should be preallocated and cached by Ebean.

        This is only used for DB's that use sequences and is a performance optimisation. This reduces the number of times Ebean needs to get a sequence value from the Database reducing network chatter.

        By default this value is 10 so when we need another Id (and don't have one in our cache) Ebean will fetch 10 id's from the database. Note that when the cache drops to have full (which is 5 by default) Ebean will fetch another batch of Id's in a background thread.

      • getDatabasePlatformName

        public String getDatabasePlatformName()
        Return the database platform name (can be null).

        If null then the platform is determined automatically via the JDBC driver information.

      • setDatabasePlatformName

        public void setDatabasePlatformName​(String databasePlatformName)
        Explicitly set the database platform name

        If none is set then the platform is determined automatically via the JDBC driver information.

        This can be used when the Database Platform can not be automatically detected from the JDBC driver (possibly 3rd party JDBC driver). It is also useful when you want to do offline DDL generation for a database platform that you don't have access to.

        Values are oracle, h2, postgres, mysql, sqlserver16, sqlserver17.

      • setDatabasePlatform

        public void setDatabasePlatform​(DatabasePlatform databasePlatform)
        Explicitly set the database platform to use.

        If none is set then the platform is determined via the databasePlatformName or automatically via the JDBC driver information.

      • getIdType

        public IdType getIdType()
        Return the preferred DB platform IdType.
      • setIdType

        public void setIdType​(IdType idType)
        Set the preferred DB platform IdType.
      • setEncryptKeyManager

        public void setEncryptKeyManager​(EncryptKeyManager encryptKeyManager)
        Set the EncryptKeyManager.

        This is required when you want to use encrypted properties.

        You can also set this in ebean.proprerties:

        
         # set via ebean.properties
         ebean.encryptKeyManager=org.avaje.tests.basic.encrypt.BasicEncyptKeyManager
         
      • getEncryptDeployManager

        public EncryptDeployManager getEncryptDeployManager()
        Return the EncryptDeployManager.

        This is optionally used to programmatically define which columns are encrypted instead of using the Encrypted Annotation.

      • setEncryptDeployManager

        public void setEncryptDeployManager​(EncryptDeployManager encryptDeployManager)
        Set the EncryptDeployManager.

        This is optionally used to programmatically define which columns are encrypted instead of using the Encrypted Annotation.

      • getEncryptor

        public Encryptor getEncryptor()
        Return the Encryptor used to encrypt data on the java client side (as opposed to DB encryption functions).
      • setEncryptor

        public void setEncryptor​(Encryptor encryptor)
        Set the Encryptor used to encrypt data on the java client side (as opposed to DB encryption functions).

        Ebean has a default implementation that it will use if you do not set your own Encryptor implementation.

      • isDbOffline

        public boolean isDbOffline()
        Return true if the Database instance should be created in offline mode.
      • setDbOffline

        public void setDbOffline​(boolean dbOffline)
        Set to true if the Database instance should be created in offline mode.

        Typically used to create an Database instance for DDL Migration generation without requiring a real DataSource / Database to connect to.

      • getDbEncrypt

        public DbEncrypt getDbEncrypt()
        Return the DbEncrypt used to encrypt and decrypt properties.

        Note that if this is not set then the DbPlatform may already have a DbEncrypt set and that will be used.

      • setDbEncrypt

        public void setDbEncrypt​(DbEncrypt dbEncrypt)
        Set the DbEncrypt used to encrypt and decrypt properties.

        Note that if this is not set then the DbPlatform may already have a DbEncrypt set (H2, MySql, Postgres and Oracle platforms have a DbEncrypt)

      • setPlatformConfig

        public void setPlatformConfig​(PlatformConfig platformConfig)
        Set the configuration for DB platform (such as UUID and custom mappings).
      • isLocalTimeWithNanos

        public boolean isLocalTimeWithNanos()
        Return true if LocalTime should be persisted with nanos precision.
      • setLocalTimeWithNanos

        public void setLocalTimeWithNanos​(boolean localTimeWithNanos)
        Set to true if LocalTime should be persisted with nanos precision.

        Otherwise it is persisted using java.sql.Time which is seconds precision.

      • isDurationWithNanos

        public boolean isDurationWithNanos()
        Return true if Duration should be persisted with nanos precision (SQL DECIMAL).

        Otherwise it is persisted with second precision (SQL INTEGER).

      • setDurationWithNanos

        public void setDurationWithNanos​(boolean durationWithNanos)
        Set to true if Duration should be persisted with nanos precision (SQL DECIMAL).

        Otherwise it is persisted with second precision (SQL INTEGER).

      • setRunMigration

        public void setRunMigration​(boolean runMigration)
        Set to true to run DB migrations on server start.

        This is the same as config.getMigrationConfig().setRunMigration(). We have added this method here as it is often the only thing we need to configure for migrations.

      • isRunMigration

        public boolean isRunMigration()
        Return true if the DB migration should run on server start.
      • setDdlGenerate

        public void setDdlGenerate​(boolean ddlGenerate)
        Set to true to generate the "create all" DDL on startup.

        Typically we want this on when we are running tests locally (and often using H2) and we want to create the full DB schema from scratch to run tests.

      • setDdlRun

        public void setDdlRun​(boolean ddlRun)
        Set to true to run the generated "create all DDL" on startup.

        Typically we want this on when we are running tests locally (and often using H2) and we want to create the full DB schema from scratch to run tests.

      • setDdlExtra

        public void setDdlExtra​(boolean ddlExtra)
        Set to false if you not want to run the extra-ddl.xml scripts. (default = true)

        Typically we want this on when we are running tests.

      • isDdlCreateOnly

        public boolean isDdlCreateOnly()
        Return true if the "drop all ddl" should be skipped.

        Typically we want to do this when using H2 (in memory) as our test database and the drop statements are not required so skipping the drop table statements etc makes it faster with less noise in the logs.

      • setDdlCreateOnly

        public void setDdlCreateOnly​(boolean ddlCreateOnly)
        Set to true if the "drop all ddl" should be skipped.

        Typically we want to do this when using H2 (in memory) as our test database and the drop statements are not required so skipping the drop table statements etc makes it faster with less noise in the logs.

      • getDdlSeedSql

        public String getDdlSeedSql()
        Return SQL script to execute after the "create all" DDL has been run.

        Typically this is a sql script that inserts test seed data when running tests. Place a sql script in src/test/resources that inserts test seed data.

      • setDdlSeedSql

        public void setDdlSeedSql​(String ddlSeedSql)
        Set a SQL script to execute after the "create all" DDL has been run.

        Typically this is a sql script that inserts test seed data when running tests. Place a sql script in src/test/resources that inserts test seed data.

      • getDdlInitSql

        public String getDdlInitSql()
        Return a SQL script to execute before the "create all" DDL has been run.
      • setDdlInitSql

        public void setDdlInitSql​(String ddlInitSql)
        Set a SQL script to execute before the "create all" DDL has been run.
      • isDdlGenerate

        public boolean isDdlGenerate()
        Return true if the DDL should be generated.
      • isDdlRun

        public boolean isDdlRun()
        Return true if the DDL should be run.
      • isDdlExtra

        public boolean isDdlExtra()
        Return true, if extra-ddl.xml should be executed.
      • setDdlHeader

        public void setDdlHeader​(String ddlHeader)
        Set the header to use with DDL generation.
      • getDdlHeader

        public String getDdlHeader()
        Return the header to use with DDL generation.
      • isDdlStrictMode

        public boolean isDdlStrictMode()
        Return true if strict mode is used which includes a check that non-null columns have a default value.
      • setDdlStrictMode

        public void setDdlStrictMode​(boolean ddlStrictMode)
        Set to false to turn off strict mode allowing non-null columns to not have a default value.
      • getDdlPlaceholders

        public String getDdlPlaceholders()
        Return a comma and equals delimited placeholders that are substituted in DDL scripts.
      • setDdlPlaceholders

        public void setDdlPlaceholders​(String ddlPlaceholders)
        Set a comma and equals delimited placeholders that are substituted in DDL scripts.
      • isDisableClasspathSearch

        public boolean isDisableClasspathSearch()
        Return true if the class path search should be disabled.
      • setDisableClasspathSearch

        public void setDisableClasspathSearch​(boolean disableClasspathSearch)
        Set to true to disable the class path search even for the case where no entity bean classes have been registered. This can be used to start an Database instance just to use the SQL functions such as SqlQuery, SqlUpdate etc.
      • getJodaLocalTimeMode

        public String getJodaLocalTimeMode()
        Return the mode to use for Joda LocalTime support 'normal' or 'utc'.
      • setJodaLocalTimeMode

        public void setJodaLocalTimeMode​(String jodaLocalTimeMode)
        Set the mode to use for Joda LocalTime support 'normal' or 'utc'.
      • addClass

        public void addClass​(Class<?> cls)
        Programmatically add classes (typically entities) that this server should use.

        The class can be an Entity, Embedded type, ScalarType, BeanPersistListener, BeanFinder or BeanPersistController.

        If no classes are specified then the classes are found automatically via searching the class path.

        Alternatively the classes can be added via setClasses(List).

        Parameters:
        cls - the entity type (or other type) that should be registered by this database.
      • addAll

        public void addAll​(List<Class<?>> classList)
        Register all the classes (typically entity classes).
      • addPackage

        public void addPackage​(String packageName)
        Add a package to search for entities via class path search.

        This is only used if classes have not been explicitly specified.

      • getPackages

        public List<StringgetPackages()
        Return packages to search for entities via class path search.

        This is only used if classes have not been explicitly specified.

      • setPackages

        public void setPackages​(List<String> packages)
        Set packages to search for entities via class path search.

        This is only used if classes have not been explicitly specified.

      • setClasses

        public void setClasses​(List<Class<?>> classes)
        Set the list of classes (entities, listeners, scalarTypes etc) that should be used for this database.

        If no classes are specified then the classes are found automatically via searching the class path.

        Alternatively the classes can contain added via addClass(Class).

      • getClasses

        public List<Class<?>> getClasses()
        Return the classes registered for this database. Typically this includes entities and perhaps listeners.
      • isSkipCacheAfterWrite

        public boolean isSkipCacheAfterWrite()
        Return true if L2 bean cache should be skipped once writes have occurred on a transaction.

        This defaults to true and means that for "find by id" and "find by natural key" queries that normally hit L2 bean cache automatically will not do so after a write/persist on the transaction.

        
        
           // assume Customer has L2 bean caching enabled ...
        
           try (Transaction transaction = DB.beginTransaction()) {
        
             // this uses L2 bean cache as the transaction
             // ... is considered "query only" at this point
             Customer.find.byId(42);
        
             // transaction no longer "query only" once
             // ... a bean has been saved etc
             DB.save(someBean);
        
             // will NOT use L2 bean cache as the transaction
             // ... is no longer considered "query only"
             Customer.find.byId(55);
        
        
        
             // explicit control - please use L2 bean cache
        
             transaction.setSkipCache(false);
             Customer.find.byId(77); // hit the l2 bean cache
        
        
             // explicit control - please don't use L2 bean cache
        
             transaction.setSkipCache(true);
             Customer.find.byId(99); // skips l2 bean cache
        
           }
        
         
        See Also:
        Transaction.setSkipCache(boolean)
      • setSkipCacheAfterWrite

        public void setSkipCacheAfterWrite​(boolean skipCacheAfterWrite)
        Set to false when we still want to hit the cache after a write has occurred on a transaction.
      • isUpdateAllPropertiesInBatch

        public boolean isUpdateAllPropertiesInBatch()
        Returns true if updates in JDBC batch default to include all properties by default.
      • addCustomMapping

        public void addCustomMapping​(DbType type,
                                     String columnDefinition,
                                     io.ebean.annotation.Platform platform)
        Add a custom type mapping.

        
        
           // set the default mapping for BigDecimal.class/decimal
           config.addCustomMapping(DbType.DECIMAL, "decimal(18,6)");
        
           // set the default mapping for String.class/varchar but only for Postgres
           config.addCustomMapping(DbType.VARCHAR, "text", Platform.POSTGRES);
        
         
        Parameters:
        type - The DB type this mapping should apply to
        columnDefinition - The column definition that should be used
        platform - Optionally specify the platform this mapping should apply to.
      • addCustomMapping

        public void addCustomMapping​(DbType type,
                                     String columnDefinition)
        Add a custom type mapping that applies to all platforms.

        
        
           // set the default mapping for BigDecimal/decimal
           config.addCustomMapping(DbType.DECIMAL, "decimal(18,6)");
        
           // set the default mapping for String/varchar
           config.addCustomMapping(DbType.VARCHAR, "text");
        
         
        Parameters:
        type - The DB type this mapping should apply to
        columnDefinition - The column definition that should be used
      • add

        public void add​(IdGenerator idGenerator)
        Register a customer IdGenerator instance.
      • add

        public void add​(BeanPostLoad postLoad)
        Register a BeanPostLoad instance.

        Note alternatively you can use setPostLoaders(List) to set all the BeanPostLoad instances.

      • getClassLoadConfig

        public ClassLoadConfig getClassLoadConfig()
        Return the ClassLoadConfig which is used to detect Joda, Java8 types etc and also create new instances of plugins given a className.
      • setClassLoadConfig

        public void setClassLoadConfig​(ClassLoadConfig classLoadConfig)
        Set the ClassLoadConfig which is used to detect Joda, Java8 types etc and also create new instances of plugins given a className.
      • serviceLoad

        public <T> ServiceLoader<T> serviceLoad​(Class<T> spiService)
        Return the service loader using the classLoader defined in ClassLoadConfig.
      • service

        public <T> T service​(Class<T> spiService)
        Return the first service using the service loader (or null).
      • loadFromProperties

        public void loadFromProperties()
        Load settings from ebean.properties.
      • getProperties

        public Properties getProperties()
        Return the properties that we used for configuration and were set via a call to loadFromProperties().
      • appliedPersistBatchOnCascade

        public io.ebean.annotation.PersistBatch appliedPersistBatchOnCascade()
        Return the PersistBatch mode to use for 'batchOnCascade' taking into account if the database platform supports getGeneratedKeys in batch mode.
      • getObjectMapper

        public Object getObjectMapper()
        Return the Jackson ObjectMapper.

        Note that this is not strongly typed as Jackson ObjectMapper is an optional dependency.

      • setObjectMapper

        public void setObjectMapper​(Object objectMapper)
        Set the Jackson ObjectMapper.

        Note that this is not strongly typed as Jackson ObjectMapper is an optional dependency.

      • isExpressionEqualsWithNullAsNoop

        public boolean isExpressionEqualsWithNullAsNoop()
        Return true if eq("someProperty", null) should to generate "1=1" rather than "is null" sql expression.
      • setExpressionEqualsWithNullAsNoop

        public void setExpressionEqualsWithNullAsNoop​(boolean expressionEqualsWithNullAsNoop)
        Set to true if you want eq("someProperty", null) to generate "1=1" rather than "is null" sql expression.

        Setting this to true has the effect that eq(propertyName, value), ieq(propertyName, value) and ne(propertyName, value) have no effect when the value is null. The expression factory adds a NoopExpression which will add "1=1" into the SQL rather than "is null".

      • isExpressionNativeIlike

        public boolean isExpressionNativeIlike()
        Return true if native ILIKE expression should be used if supported by the database platform (e.g. Postgres).
      • setExpressionNativeIlike

        public void setExpressionNativeIlike​(boolean expressionNativeIlike)
        Set to true to use native ILIKE expression if supported by the database platform (e.g. Postgres).
      • setEnabledL2Regions

        public void setEnabledL2Regions​(String enabledL2Regions)
        Set the enabled L2 cache regions (comma delimited).
      • isDisableL2Cache

        public boolean isDisableL2Cache()
        Return true if L2 cache is disabled.
      • setDisableL2Cache

        public void setDisableL2Cache​(boolean disableL2Cache)
        Set to true to disable L2 caching. Typically useful in performance testing.
      • isLocalOnlyL2Cache

        public boolean isLocalOnlyL2Cache()
        Return true to use local only L2 cache. Effectively ignore l2 cache plugin like ebean-redis etc.
      • setLocalOnlyL2Cache

        public void setLocalOnlyL2Cache​(boolean localOnlyL2Cache)
        Force the use of local only L2 cache. Effectively ignore l2 cache plugin like ebean-redis etc.
      • isUseValidationNotNull

        public boolean isUseValidationNotNull()
        Returns if we use javax.validation.constraints.NotNull
      • setUseValidationNotNull

        public void setUseValidationNotNull​(boolean useValidationNotNull)
        Controls if Ebean should ignore &x64;javax.validation.contstraints.NotNull or &x64;jakarta.validation.contstraints.NotNull with respect to generating a NOT NULL column.

        Normally when Ebean sees javax NotNull annotation it means that column is defined as NOT NULL. Set this to false and the javax NotNull annotation is effectively ignored (and we instead use Ebean's own NotNull annotation or JPA Column(nullable=false) annotation.

      • isNotifyL2CacheInForeground

        public boolean isNotifyL2CacheInForeground()
        Return true if L2 cache notification should run in the foreground.
      • setNotifyL2CacheInForeground

        public void setNotifyL2CacheInForeground​(boolean notifyL2CacheInForeground)
        Set this to true to run L2 cache notification in the foreground.

        In general we don't want to do that as when we use a distributed cache (like Ignite, Hazelcast etc) we are making network calls and we prefer to do this in background and not impact the response time of the executing transaction.

      • setQueryPlanTTLSeconds

        public void setQueryPlanTTLSeconds​(int queryPlanTTLSeconds)
        Set the query plan time to live.
      • newPlatformConfig

        public PlatformConfig newPlatformConfig​(String propertiesPath,
                                                String platformPrefix)
        Create a new PlatformConfig based of the one held but with overridden properties by reading properties with the given path and prefix.

        Typically used in Db Migration generation for many platform targets that might have different configuration for IdType, UUID, quoted identifiers etc.

        Parameters:
        propertiesPath - The properties path used for loading and setting properties
        platformPrefix - The prefix used for loading and setting properties
        Returns:
        A copy of the PlatformConfig with overridden properties
      • addMappingLocation

        public void addMappingLocation​(String mappingLocation)
        Add a mapping location to search for xml mapping via class path search.
      • setMappingLocations

        public void setMappingLocations​(List<String> mappingLocations)
        Set mapping locations to search for xml mapping via class path search.

        This is only used if classes have not been explicitly specified.

      • isIdGeneratorAutomatic

        public boolean isIdGeneratorAutomatic()
        When false we need explicit @GeneratedValue mapping to assign Identity or Sequence generated values. When true Id properties are automatically assigned Identity or Sequence without the GeneratedValue mapping.
      • setIdGeneratorAutomatic

        public void setIdGeneratorAutomatic​(boolean idGeneratorAutomatic)
        Set to false such that Id properties require explicit @GeneratedValue mapping before they are assigned Identity or Sequence generation based on platform.
      • isCollectQueryPlans

        public boolean isCollectQueryPlans()
        Return true if query plan capture is enabled.
      • setCollectQueryPlans

        public void setCollectQueryPlans​(boolean collectQueryPlans)
        Set to true to enable query plan capture.
      • setCollectQueryPlanThresholdMicros

        public void setCollectQueryPlanThresholdMicros​(long collectQueryPlanThresholdMicros)
        Set the query plan collection threshold in microseconds.
      • isDumpMetricsOnShutdown

        public boolean isDumpMetricsOnShutdown()
        Return true if metrics should be dumped when the server is shutdown.
      • setDumpMetricsOnShutdown

        public void setDumpMetricsOnShutdown​(boolean dumpMetricsOnShutdown)
        Set to true if metrics should be dumped when the server is shutdown.
      • setDumpMetricsOptions

        public void setDumpMetricsOptions​(String dumpMetricsOptions)
        Include 'sql' or 'hash' in options such that they are included in the output.
        Parameters:
        dumpMetricsOptions - Example "sql,hash", "sql"
      • isAutoLoadModuleInfo

        public boolean isAutoLoadModuleInfo()
        Return true if entity classes should be loaded and registered via ModuleInfoLoader.

        When false we either register entity classes via application code or use classpath scanning to find and register entity classes.

      • setLoadModuleInfo

        public void setLoadModuleInfo​(boolean loadModuleInfo)
        Set false to turn off automatic registration of entity beans.

        When using query beans that also generates a module info class that can register the entity bean classes (to avoid classpath scanning). This is on by default and setting this to false turns it off.