@Target(value={TYPE,METHOD}) @Retention(value=RUNTIME) @Documented @Inherited @Repeatable(value=SqlGroup.class) public @interface Sql
@Sql is used to annotate a test class or test method to configure
 SQL scripts() and statements() to be executed against a given
 database during integration tests.
 Method-level declarations override class-level declarations by default,
 but this behavior can be configured via @SqlMergeMode.
 
Script execution is performed by the SqlScriptsTestExecutionListener,
 which is enabled by default.
 
The configuration options provided by this annotation and
 @SqlConfig are equivalent to those supported by
 ScriptUtils and
 ResourceDatabasePopulator
 but are a superset of those provided by the <jdbc:initialize-database/>
 XML namespace element. Consult the javadocs of individual attributes in this
 annotation and @SqlConfig for details.
 
Beginning with Java 8, @Sql can be used as a
 repeatable annotation. Otherwise,
 @SqlGroup can be used as an explicit container for declaring
 multiple instances of @Sql.
 
This annotation may be used as a meta-annotation to create custom composed annotations with attribute overrides.
As of Spring Framework 5.3, this annotation will be inherited from an
 enclosing test class by default. See
 @NestedTestConfiguration
 for details.
SqlConfig, 
SqlMergeMode, 
SqlGroup, 
SqlScriptsTestExecutionListener, 
Transactional, 
TransactionalTestExecutionListener, 
ResourceDatabasePopulator, 
ScriptUtils| Modifier and Type | Optional Element and Description | 
|---|---|
| SqlConfig | configLocal configuration for the SQL scripts and statements declared within
 this  @Sqlannotation. | 
| Sql.ExecutionPhase | executionPhaseWhen the SQL scripts and statements should be executed. | 
| String[] | scriptsThe paths to the SQL scripts to execute. | 
| String[] | statementsInlined SQL statements to execute. | 
| String[] | valueAlias for  scripts(). | 
@AliasFor(value="value") public abstract String[] scripts
This attribute may not be used in conjunction with
 value(), but it may be used instead of value(). Similarly,
 this attribute may be used in conjunction with or instead of
 statements().
 
Each path will be interpreted as a Spring
 Resource. A plain path
 — for example, "schema.sql" — will be treated as a
 classpath resource that is relative to the package in which the
 test class is defined. A path starting with a slash will be treated as an
 absolute classpath resource, for example:
 "/org/example/schema.sql". A path which references a
 URL (e.g., a path prefixed with
 classpath:,
 file:,
 http:, etc.) will be loaded using the specified resource protocol.
 
If no SQL scripts or statements() are specified, an attempt will
 be made to detect a default script depending on where this
 annotation is declared. If a default cannot be detected, an
 IllegalStateException will be thrown.
 
com.example.MyTest, the corresponding default script is
 "classpath:com/example/MyTest.sql".testMethod() and is defined in the class
 com.example.MyTest, the corresponding default script is
 "classpath:com/example/MyTest.testMethod.sql".value(), 
statements()public abstract String[] statements
This attribute may be used in conjunction with or instead of
 scripts().
 
Statements declared via this attribute will be executed after
 statements loaded from resource scripts(). If you wish to have
 inlined statements executed before scripts, simply declare multiple
 instances of @Sql on the same class or method.
scripts()public abstract Sql.ExecutionPhase executionPhase
Defaults to BEFORE_TEST_METHOD.
public abstract SqlConfig config
@Sql annotation.
 See the class-level javadocs for SqlConfig for explanations of
 local vs. global configuration, inheritance, overrides, etc.
 
Defaults to an empty @SqlConfig instance.