What’s New in Arconia 0.31.0
Arconia 0.31.0 provides a number of new features and enhancements. This page includes the highlights of the release, but you can also check out the full release notes for more details about each new feature and bug fix.
We provide an automated way to upgrade your project to the latest version of Arconia, which is described in the Upgrading Arconia documentation.
Dev Services
Core
-
Dev Services can now serve SSL, so that the SSL support of your application is developed and tested against them. Set the
ssl.enabledproperty of a Dev Service and configure the certificate it presents with the keys of a Spring Boot SSL bundle, in PEM or Java keystore form: the container is configured to serve SSL, and the application is configured to trust it through the service connection, with nothing to set up on the client side. The bundle is reported by the startup log and thedevservicesactuator endpoint, and registered in theSslBundlesof the application. Learn more about SSL with Dev Services. -
The
arconia.dev.services.<name>.reuseandarconia.dev.services.<name>.sharedproperties of each Dev Service have been replaced by a singlearconia.dev.services.<name>.reuse-strategyproperty, since both answered the same question: whether to use a container that is already running instead of starting a new one. It acceptsframework(previouslyshared=true),testcontainers(previouslyreuse=true), andnone. Learn more about Reusing Dev Services. -
The
frameworkreuse strategy is now supported by all the Dev Services. -
When your application defines its own
ConnectionDetailsbean of the type a Dev Service provides, such as aJdbcConnectionDetailsbean, the Dev Service is no longer started, and a message says so at startup: the application connects to the service of your choice. Learn more about Service Connections. -
The
arconia.dev.services.startup.log-levelhas been removed because redundant since Testcontainers already takes care of writing a failed container’s logs to the application logs at error level. -
The
arconia.dev.services.network.nameproperty has been removed, since Arconia no longer manages networks shared across applications: by default, the shared network is isolated per application and is created and removed by Testcontainers. To have the Dev Services join a network you manage, define your ownNetworkbean, which takes precedence over the one Arconia provides. Learn more about Shared Network. -
ContainerInfo.exposedPorts()has been renamed toports(), since it holds the port mappings of the container. Thedevservicesactuator endpoint reports them underportsaccordingly. The automated upgrade takes care of it. -
The
devservicesactuator endpoint now reports the state of each container (state) as the container runtime reports it, such asrunningorexited. Learn more about the Actuator support. -
The JSpecify nullability annotations of all Dev Services modules are now enforced with NullAway at build time, so the null-safety contracts your IDE sees are verified rather than declared only.
-
If you build your own Dev Service, some API changes have been introduced to simplify the registration and configuration of dev services. The registration is now a flat
DevServiceSpec, declaring the container, the ports, the links, the discovery, and the SSL support in one place, and the framework applies the common properties to the container, soContainerConfigureris no longer needed. Mistakes in the registration, such as two Dev Services with the same name, a missing description, or aportproperty set for a Dev Service declaring no main port, now fail at startup instead of being silently ignored. Refer to the updated documentation on how to build your own dev service. The automated upgrade takes care of the renamed and moved types and removes theContainerConfigurercalls, while the registration itself needs to be updated by hand.
Docling
-
The Docling Dev Service now links to the Scalar API reference of Docling Serve at
/scalar, next to the Docling UI and the OpenAPI documentation.
Elasticsearch
-
The Elasticsearch Dev Service now serves plain HTTP by default. Elasticsearch 8 and later only accept HTTPS in their default configuration, with a certificate the application could not trust, so the Dev Service could not be reached before.
-
The Elasticsearch Dev Service can now serve SSL, with the certificate configured through its
sslproperties, and the application is configured to trust it automatically. With no certificate configured, Elasticsearch keeps the one it generates itself, and the application trusts it the way Spring Boot does for an@Sslcontainer. Learn more about Using SSL.
Floci
-
The Floci Dev Service now relies on the Floci service connection support of Spring Cloud AWS instead of its own, so it can be used in a project that also depends on
spring-cloud-aws-testcontainers, which failed before with duplicate connection details. Since the Dev Service brings the core of Spring Cloud AWS with it, adding the starter of each AWS service in use is all it takes to activate it: an application with an incomplete Spring Cloud AWS classpath no longer fails at startup in its auto-configuration. Learn more about the Floci Dev Service.
Grafana LGTM
-
The Grafana LGTM Dev Service now provisions Grafana with dashboards for Spring Boot applications, replacing the ones bundled with the image. They are picked for the application: a JVM dashboard comes in a Micrometer or OpenTelemetry variant, depending on the metric conventions in use, and a Logging dashboard shows log events by level next to the application logs. Your own dashboards, and the ones shipped by libraries, are provisioned from
META-INF/grafana/dashboardson the classpath, with no configuration needed. You can sign in to Grafana with thearconia/arconiacredentials. Thedashboardsproperties let you turn the provisioning off, keep only your own dashboards, or open one of them as the Grafana home page. Learn more about Grafana Dashboards. -
The Grafana LGTM Dev Service now enables the MCP server built into Tempo, so that AI coding assistants can query the traces of your application, and links to it next to Grafana and the OTLP endpoints. A Prometheus link has been added as well. Learn more about Using AI Tools.
-
The documentation of the Grafana LGTM Dev Service now describes how the telemetry of your application reaches the stack and how to customize its components, from their logs and configuration files to forwarding telemetry to another backend. Learn more about Customizing the Stack.
Kafka
-
The Kafka Dev Service can now serve SSL, with the certificate configured through its
sslproperties, and the application is configured to trust it automatically. Learn more about Using SSL.
Keycloak
-
A new Keycloak Dev Service provides an identity and access management server for development and testing. It configures Spring Security’s OAuth2 Client and OAuth2 Resource Server automatically, depending on which is on the classpath, so an application needs no OAuth2 configuration to start logging users in or validating tokens. A realm with a client, roles and users is generated out of the box, and you can configure its users and roles, import your own realms from the classpath or the host filesystem, or turn realm creation off entirely and configure Spring Security yourself.
MongoDB
-
The MongoDB Dev Service can now serve SSL, with the certificate configured through its
sslproperties, and the application is configured to trust it automatically. Learn more about Using SSL.
RabbitMQ
-
The RabbitMQ Dev Service can now serve SSL, with the certificate configured through its
sslproperties, and the application is configured to trust it automatically. The application connects to its AMQPS listener, which the fixedportproperty then binds. Learn more about Using SSL.
Redis
-
The Redis Dev Service can now serve SSL, with the certificate configured through its
sslproperties, and the application is configured to trust it automatically. Learn more about Using SSL.
Integrations
Docling
-
The Docling integration has been upgraded to Docling Java 0.7, which replaces the
DoclingServeApiBuilderFactorySPI withDoclingServeApiProvider. Arconia registers a provider, so the standardDoclingServeApi.builder()entry point now builds the Arconia client, andDoclingServeApi.config()reports the configuration of the auto-configured client, whichconfig().toBuilder()copies. The builder ofDoclingServeClientno longer implements the deprecatedDoclingApiBuilderinterface, and itstoBuilder()method is unsupported in favor ofconfig().toBuilder(). -
The requests sent to Docling Serve and the responses received from it can now be logged with the
arconia.docling.log-requests,arconia.docling.log-responses, andarconia.docling.pretty-printproperties, with the API key masked. -
When the Docling Serve API rejects a request, the Docling client now throws the
ValidationExceptionof Docling Java, carrying the validation details reported by the API, instead of a bareHttpClientErrorException. -
The executor running the async operations of the Docling client can be customized with the
asyncExecutoroption ofDoclingServeClient.builder()orDoclingServeApi.builder(). Virtual threads are used by default. -
The Docling health indicator now reports the
locationof the Docling Serve instance (its base URL) in the health details, whether the status isUPorDOWN, so that you can tell which instance the application talked to when the check fails. Learn more about the Health Indicator.
Multitenancy
-
The HTTP tenant resolution filter now ignores the
/livezand/readyzpaths by default, next to/actuator/**. They are the additional paths on which Spring Boot serves the liveness and readiness health probes whenmanagement.endpoint.health.probes.add-additional-pathsis enabled, so that probe requests no longer fail for lack of a tenant. Learn more about Ignoring Paths.
OpenTelemetry
-
In dev mode with Spring Boot DevTools, traces are now exported every 3 seconds (
arconia.otel.traces.processor.schedule-delay=3s), the way metrics were already exported every 5 seconds, so that telemetry shows up in your observability platform within seconds. The production defaults are unchanged. -
The Logback OpenTelemetry Bridge now selects the attributes it captures with include/exclude glob patterns instead of boolean switches, following the unified configuration introduced by OpenTelemetry Java Instrumentation 2.32. The
capture-key-value-pair-attributesandcapture-logstash-marker-attributesproperties have been replaced by a singlearconia.otel.logs.logback-bridge.structured-attributesselector, which covers SLF4J key-value pairs, Logstash markers, and Logstash structured arguments at once.capture-logger-contexthas been replaced by thelogger-context-attributesselector andcapture-mdc-attributesby themdc-attributesselector, both withincludedandexcludedlists. Nothing is captured by default, and excluded patterns take precedence, so sensitive keys can be filtered out while capturing everything else. Learn more about Attribute Selectors.