Oracle XE Dev Service
A service providing an Oracle database for development and testing purposes. The maximum supported version is 21c. For newer versions, use the Oracle Dev Service.
It works with Spring Boot libraries that support Oracle via JDBC, including:
|
This Dev Service is mutually exclusive with other JDBC dev services. If more than one is active at the same time, the application will fail at startup with a clear error message. Disable all but one by setting |
Dependencies
First, you need to add the Dev Service dependency to your project.
-
Gradle
-
Maven
dependencies {
testAndDevelopmentOnly "io.arconia:arconia-dev-services-oracle-xe"
}
<dependency>
<groupId>io.arconia</groupId>
<artifactId>arconia-dev-services-oracle-xe</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
You can optionally include the Spring Boot DevTools dependency to enable live reload of your application during development.
-
Gradle
-
Maven
dependencies {
developmentOnly "org.springframework.boot:spring-boot-devtools"
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
|
When you use the Spring Boot DevTools in your project and run the application in dev mode, Arconia keeps the Dev Services running while you make changes to your code instead of restarting them with the application. This allows you to see the changes in real-time without having to restart the Dev Services. Changes to the configuration of a Dev Service take effect once you stop and start the application again. |
Running the Application
When using the Arconia Dev Services, you can keep running your application as you normally would. The Dev Services will automatically start when you run your application.
-
Gradle
-
Maven
-
CLI
./gradlew bootRun
./mvnw spring-boot:run
arconia dev
Unlike the lower-level Testcontainers support in Spring Boot, Arconia doesn’t require special tasks to run your application when using Dev Services (./gradlew bootTestRun or ./mvnw spring-boot:test-run) nor requires you to define a separate @SpringBootApplication class for configuring Testcontainers.
|
Your integration tests based on @SpringBootTest will automatically use the Dev Services without any additional configuration.
Test slices (e.g. @DataJdbcTest) load only a subset of the auto-configurations, so they don’t pick up Dev Services automatically. You can import the Dev Service explicitly. For example, for the PostgreSQL Dev Service:
@DataJdbcTest
@AutoConfigureTestDatabase(replace = Replace.NONE)
@Import(PostgresqlDevServicesAutoConfiguration.class)
class CustomerRepositoryTests {
...
}
By default, each application starts its own Oracle XE Dev Service. To let multiple applications running simultaneously in dev mode use the same one, set the arconia.dev.services.oracle-xe.reuse-strategy property to framework: the application connects to a running Oracle XE Dev Service started by another application if available, or else starts its own that other applications can discover in turn. The applications using the same Dev Service must use the same username, password, and database name. Learn more about Reusing Dev Services.
Configuring the Dev Service
You can configure the Dev Service via configuration properties.
| Property | Default | Description |
|---|---|---|
|
|
Whether the dev service is enabled. |
|
|
Full name of the container image used in the dev service. |
|
|
Environment variables to set in the service. |
|
|
Additional hostnames the dev service container is reachable by on the shared network, next to the name of the dev service. Only applicable when the shared network is enabled. |
|
|
Fixed port for exposing the Oracle database port to the host. When it’s 0 (default), a random available port is assigned dynamically. |
|
|
Resources from the classpath or host filesystem to copy into the container. They can be files or directories that will be copied to the specified destination path inside the container at startup and are immutable (read-only). |
|
|
Strategy for reusing a running container for the dev service instead of starting a new one. With |
|
|
Maximum waiting time for the service to start, counted from the container start. |
|
|
Files or directories to mount from the host filesystem into the container. They are mounted at the specified destination path inside the container at startup and are mutable (read-write). Changes in either the host or the container will be immediately reflected in the other. |
|
|
Username to be used for connecting to the database. |
|
|
Password to be used for connecting to the database. |
|
|
Name of the database to be created. |
|
|
List of paths to SQL scripts to be loaded from the classpath and applied to the database for initialization. |
You can enable/disable the Dev Service selectively for a specific application mode (development, test), relying on one of the profiles which are automatically configured by Arconia (see Profiles).
You can enable/disable the Dev Service for a specific test class by using the @TestPropertySource annotation or equivalent Spring testing utilities.
|
Initializing the Database
You can initialize the database by providing one or more SQL scripts to be executed when the database is started. This can be useful for creating test data or applying other customizations that are only needed during development and testing.
The scripts must be available in the application classpath, and you can specify their location using the arconia.dev.services.oracle-xe.init-script-paths property, which accepts a list of classpath locations.
For example, if you have a script named init.sql located in the src/main/resources/data directory of your project, you can configure the Dev Service to execute it when the database is started by adding the following property to your application.yml or application.properties file:
arconia.dev.services.oracle-xe.init-script-paths=data/init.sql
|
If you need to execute SQL scripts only when running tests, you can place them in the |