Oliver Drotbohm 5f25974f0d GH-107 - Improve runtime support configuration setup.
The configuration classes declaring SpringBootApplicationRuntime and ApplicationModulesRuntime beans now describe them as infrastructure beans so that they do not get reported as eagly initialized as their initialization will be triggered when creating the BeanPostProcessors our observability support is based on.

The configuration of the observability support now consistently refer to ApplicationModulesRuntime directly and to the Tracer instance via a supplier as the latter is only needed during the actual component invocation while the former is already needed to decide whether to decorate the instances in the first place. Simplify the inheritance arrangement underneath ModuleTracingSupport.

The logging adapter for ApplicationModuleInitializers now properly unwraps proxy types so that the log output uses the user classes properly.
2023-01-05 20:00:58 +01:00
2022-10-21 11:11:27 +02:00
2022-07-22 22:24:23 +02:00
2022-07-06 13:03:01 +02:00
2022-10-17 12:53:36 +02:00

= Spring Modulith
:docs: https://docs.spring.io/spring-modulith/docs/current-SNAPSHOT/reference/html/

Spring Modulith allows developers to build well-structured Spring Boot applications and guides developers in finding and working with link:{docs}#fundamentals.modules.application-modules[application modules] driven by the domain.
It supports the link:{docs}#verification[verification] of such modular arrangements, link:{docs}#testing[integration testing] individual modules, link:{docs}#observability[observing] the application's behavior on the module level and creating link:{docs}#documentation[documentation snippets] based on the arrangement created.

== Quickstart

. Create a Spring Boot application on https://start.spring.io
. Create a Java package arrangement that puts business modules as link:{docs}#fundamentals[direct sub-packages of the application's main package].
+
[source, text, subs="macros"]
----
□ Example
└─ □ src/main/java
   ├─ □ example           <1>
   |  └─ Application.java
   ├─ □ example.inventory <2>
   |  └─ …
   └─ □ example.order     <2>
      └─ …
----
<1> The application root package
<2> Application module packages
. Create link:{docs}#fundamentals.modules.application-modules[an `ApplicationModules` model], run link:{docs}#verification[verifications] and link:{docs}#documentation[create documentation snippets].
+
[source, java]
----
class ApplicationTests {

  @Test
  void writeDocumentationSnippets() {

    var modules = ApplicationModules.of(Application.class).verify(); <1>

    new Documenter(modules) <2>
      .writeModulesAsPlantUml()
      .writeIndividualModulesAsPlantUml();
  }
}
----
<1> Creates application module model and link:{docs}#verification[verifies its structure].
<2> Renders link:{docs}#documentation[Asciidoctor snippets] (component diagrams, application module canvas) to `target/modulith-docs`.
. Run link:{docs}#testing[integration tests] for individual application modules.
+
[source, text, subs="macros"]
----
□ Example
└─ □ src/test/java
   └─ □ example.order
      └─ OrderModuleIntegrationTests.java
----
+
[source, java]
----
@ApplicationModuleTests
class OrderModuleIntegrationTests {

  @Test
  void someTestMethod() { … }
}
----

== Reference documentation

Find the reference documentation link:{docs}[here].

== Contributing

https://help.github.com/articles/creating-a-pull-request[Pull requests] are welcome. Note, that we expect everyone to follow the https://github.com/spring-projects/.github/blob/main/CODE_OF_CONDUCT.md[code of conduct].

== License
Spring Modulith is Open Source software released under the
https://www.apache.org/licenses/LICENSE-2.0.html[Apache 2.0 license].
Description
No description provided
Readme Apache-2.0 5.7 MiB
Languages
Java 100%