Polish doc code samples
See gh-6313
This commit is contained in:
@@ -52,5 +52,5 @@ For Tomcat, the following configuration can be added:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/cloudfoundry/customcontextpath/CloudFoundryCustomContextPathConfiguration.java[]
|
||||
include::{docs-java}/actuator/cloudfoundry/customcontextpath/MyCloudFoundryConfiguration.java[]
|
||||
----
|
||||
|
||||
@@ -426,7 +426,7 @@ The following example exposes a read operation that returns a custom object:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/endpoints/implementingcustom/CustomEndpoint.java[tag=read]
|
||||
include::{docs-java}/actuator/endpoints/implementingcustom/MyEndpoint.java[tag=read]
|
||||
----
|
||||
|
||||
You can also write technology-specific endpoints by using `@JmxEndpoint` or `@WebEndpoint`.
|
||||
@@ -463,7 +463,7 @@ This can be used to invoke a write operation that takes `String name` and `int c
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/endpoints/implementingcustom/CustomEndpoint.java[tag=write]
|
||||
include::{docs-java}/actuator/endpoints/implementingcustom/MyEndpoint.java[tag=write]
|
||||
----
|
||||
|
||||
TIP: Because endpoints are technology agnostic, only simple types can be specified in the method signature.
|
||||
|
||||
@@ -886,7 +886,7 @@ To replace the default metric tags, define a `MongoCommandTagsProvider` bean, as
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/metrics/supported/mongodb/command/SampleCommandTagsProviderConfiguration.java[]
|
||||
include::{docs-java}/actuator/metrics/supported/mongodb/command/MyCommandTagsProviderConfiguration.java[]
|
||||
----
|
||||
|
||||
To disable the auto-configured command metrics, set the following property:
|
||||
@@ -927,7 +927,7 @@ To replace the default metric tags, define a `MongoConnectionPoolTagsProvider` b
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/metrics/supported/mongodb/connectionpool/SampleConnectionPoolTagsProviderConfiguration.java[]
|
||||
include::{docs-java}/actuator/metrics/supported/mongodb/connectionpool/MyConnectionPoolTagsProviderConfiguration.java[]
|
||||
----
|
||||
|
||||
To disable the auto-configured connection pool metrics, set the following property:
|
||||
@@ -980,14 +980,14 @@ To register custom metrics, inject `MeterRegistry` into your component, as shown
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/metrics/registeringcustom/MetricsMeterRegistryInjection.java[]
|
||||
include::{docs-java}/actuator/metrics/registeringcustom/MyBean.java[]
|
||||
----
|
||||
|
||||
If your metrics depend on other beans, it is recommended that you use a `MeterBinder` to register them, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/metrics/registeringcustom/SampleMeterBinderConfiguration.java[]
|
||||
include::{docs-java}/actuator/metrics/registeringcustom/MyMeterBinderConfiguration.java[]
|
||||
----
|
||||
|
||||
Using a `MeterBinder` ensures that the correct dependency relationships are set up and that the bean is available when the metric's value is retrieved.
|
||||
@@ -1005,7 +1005,7 @@ For example, if you want to rename the `mytag.region` tag to `mytag.area` for al
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/actuator/metrics/customizing/MetricsFilterConfiguration.java[]
|
||||
include::{docs-java}/actuator/metrics/customizing/MyMetricsFilterConfiguration.java[]
|
||||
----
|
||||
|
||||
NOTE: By default, all `MeterFilter` beans will be automatically bound to the Spring-managed `MeterRegistry`.
|
||||
|
||||
@@ -71,11 +71,11 @@ Consider the following example:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,attributes"]
|
||||
----
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/ServerProperties.java[]
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/MyServerProperties.java[]
|
||||
----
|
||||
|
||||
This exposes three properties where `server.name` has no default and `server.ip` and `server.port` defaults to `"127.0.0.1"` and `9797` respectively.
|
||||
The Javadoc on fields is used to populate the `description` attribute. For instance, the description of `server.ip` is "IP address to listen to.".
|
||||
This exposes three properties where `my.server.name` has no default and `my.server.ip` and `my.server.port` defaults to `"127.0.0.1"` and `9797` respectively.
|
||||
The Javadoc on fields is used to populate the `description` attribute. For instance, the description of `my.server.ip` is "IP address to listen to.".
|
||||
|
||||
NOTE: You should only use plain text with `@ConfigurationProperties` field Javadoc, since they are not processed before being added to the JSON.
|
||||
|
||||
@@ -88,7 +88,7 @@ Consider the following example:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/MessagingProperties.java[]
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/MyMessagingProperties.java[]
|
||||
----
|
||||
|
||||
In order to document default values for properties in the class above, you could add the following content to <<configuration-metadata#configuration-metadata.annotation-processor.adding-additional-metadata,the manual metadata of the module>>:
|
||||
@@ -97,11 +97,11 @@ In order to document default values for properties in the class above, you could
|
||||
----
|
||||
{"properties": [
|
||||
{
|
||||
"name": "acme.messaging.addresses",
|
||||
"name": "my.messaging.addresses",
|
||||
"defaultValue": ["a", "b"]
|
||||
},
|
||||
{
|
||||
"name": "acme.messaging.container-type",
|
||||
"name": "my.messaging.container-type",
|
||||
"defaultValue": "simple"
|
||||
}
|
||||
]}
|
||||
@@ -119,10 +119,10 @@ Consider the updated example:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/nestedproperties/ServerProperties.java[]
|
||||
include::{docs-java}/configurationmetadata/annotationprocessor/automaticmetadatageneration/nestedproperties/MyServerProperties.java[]
|
||||
----
|
||||
|
||||
The preceding example produces metadata information for `server.name`, `server.host.ip`, and `server.host.port` properties.
|
||||
The preceding example produces metadata information for `my.server.name`, `my.server.host.ip`, and `my.server.host.port` properties.
|
||||
You can use the `@NestedConfigurationProperty` annotation on a field to indicate that a regular (non-inner) class should be treated as if it were nested.
|
||||
|
||||
TIP: This has no effect on collections and maps, as those types are automatically identified, and a single metadata property is generated for each of them.
|
||||
|
||||
@@ -142,7 +142,7 @@ The JSON object contained in the `properties` array can contain the attributes d
|
||||
|
||||
| `type`
|
||||
| String
|
||||
| The full signature of the data type of the property (for example, `java.lang.String`) but also a full generic type (such as `java.util.Map<java.lang.String,acme.MyEnum>`).
|
||||
| The full signature of the data type of the property (for example, `java.lang.String`) but also a full generic type (such as `java.util.Map<java.lang.String,com.example.MyEnum>`).
|
||||
You can use this attribute to guide the user as to the types of values that they can enter.
|
||||
For consistency, the type of a primitive is specified by using its wrapper counterpart (for example, `boolean` becomes `java.lang.Boolean`).
|
||||
Note that this class may be a complex type that gets converted from a `String` as values are bound.
|
||||
@@ -204,12 +204,12 @@ This is still supported in a deprecated fashion and should no longer be used.
|
||||
If no reason and replacement are available, an empty `deprecation` object should be set.
|
||||
|
||||
Deprecation can also be specified declaratively in code by adding the `@DeprecatedConfigurationProperty` annotation to the getter exposing the deprecated property.
|
||||
For instance, assume that the `app.acme.target` property was confusing and was renamed to `app.acme.name`.
|
||||
For instance, assume that the `my.app.target` property was confusing and was renamed to `my.app.name`.
|
||||
The following example shows how to handle that situation:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/configurationmetadata/format/group/AcmeProperties.java[]
|
||||
include::{docs-java}/configurationmetadata/format/group/MyProperties.java[]
|
||||
----
|
||||
|
||||
NOTE: There is no way to set a `level`.
|
||||
|
||||
@@ -16,11 +16,11 @@ Each value may have a description as well.
|
||||
If your property is of type `Map`, you can provide hints for both the keys and the values (but not for the map itself).
|
||||
The special `.keys` and `.values` suffixes must refer to the keys and the values, respectively.
|
||||
|
||||
Assume a `sample.contexts` maps magic `String` values to an integer, as shown in the following example:
|
||||
Assume a `my.contexts` maps magic `String` values to an integer, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/configurationmetadata/manualhints/valuehint/SampleProperties.java[]
|
||||
include::{docs-java}/configurationmetadata/manualhints/valuehint/MyProperties.java[]
|
||||
----
|
||||
|
||||
The magic values are (in this example) are `sample1` and `sample2`.
|
||||
@@ -30,7 +30,7 @@ In order to offer additional content assistance for the keys, you could add the
|
||||
----
|
||||
{"hints": [
|
||||
{
|
||||
"name": "sample.contexts.keys",
|
||||
"name": "my.contexts.keys",
|
||||
"values": [
|
||||
{
|
||||
"value": "sample1"
|
||||
|
||||
@@ -11,7 +11,7 @@ In a nutshell, to add caching to an operation of your service add the relevant a
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/caching/MathService.java[]
|
||||
include::{docs-java}/features/caching/MyMathService.java[]
|
||||
----
|
||||
|
||||
This example demonstrates the use of caching on a potentially costly operation.
|
||||
@@ -61,7 +61,7 @@ The following example sets a flag to say that `null` values should be passed dow
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/caching/provider/CacheManagerCustomizerConfiguration.java[]
|
||||
include::{docs-java}/features/caching/provider/MyCacheManagerConfiguration.java[]
|
||||
----
|
||||
|
||||
NOTE: In the preceding example, an auto-configured `ConcurrentMapCacheManager` is expected.
|
||||
@@ -92,8 +92,8 @@ Even if the JSR-107 standard does not enforce a standardized way to define the l
|
||||
spring:
|
||||
cache:
|
||||
jcache:
|
||||
provider: "com.acme.MyCachingProvider"
|
||||
config: "classpath:acme.xml"
|
||||
provider: "com.example.MyCachingProvider"
|
||||
config: "classpath:example.xml"
|
||||
----
|
||||
|
||||
NOTE: When a cache library offers both a native implementation and JSR-107 support, Spring Boot prefers the JSR-107 support, so that the same features are available if you switch to a different JSR-107 implementation.
|
||||
@@ -177,7 +177,7 @@ The following example shows a customizer that configures a specific entry expira
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/caching/provider/couchbase/CouchbaseCacheManagerConfiguration.java[]
|
||||
include::{docs-java}/features/caching/provider/couchbase/MyCouchbaseCacheManagerConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ The following example shows a customizer that configures a specific time to live
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/caching/provider/redis/RedisCacheManagerConfiguration.java[]
|
||||
include::{docs-java}/features/caching/provider/redis/MyRedisCacheManagerConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -152,11 +152,11 @@ Concretely, each test should create a well defined `ApplicationContext` that rep
|
||||
`ApplicationContextRunner` provides a great way to achieve that.
|
||||
|
||||
`ApplicationContextRunner` is usually defined as a field of the test class to gather the base, common configuration.
|
||||
The following example makes sure that `UserServiceAutoConfiguration` is always invoked:
|
||||
The following example makes sure that `MyServiceAutoConfiguration` is always invoked:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/UserServiceAutoConfigurationTests.java[tag=runner]
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/MyServiceAutoConfigurationTests.java[tag=runner]
|
||||
----
|
||||
|
||||
TIP: If multiple auto-configurations have to be defined, there is no need to order their declarations as they are invoked in the exact same order as when running the application.
|
||||
@@ -167,14 +167,14 @@ Invoking `run` provides a callback context that can be used with `AssertJ`.
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/UserServiceAutoConfigurationTests.java[tag=test-user-config]
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/MyServiceAutoConfigurationTests.java[tag=test-user-config]
|
||||
----
|
||||
|
||||
It is also possible to easily customize the `Environment`, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/UserServiceAutoConfigurationTests.java[tag=test-env]
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/MyServiceAutoConfigurationTests.java[tag=test-env]
|
||||
----
|
||||
|
||||
The runner can also be used to display the `ConditionEvaluationReport`.
|
||||
@@ -183,7 +183,7 @@ The following example shows how to use the `ConditionEvaluationReportLoggingList
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/ConditionEvaluationReportTests.java[]
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/MyConditionEvaluationReportingTests.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -198,11 +198,11 @@ If you need to test an auto-configuration that only operates in a Servlet or Rea
|
||||
==== Overriding the Classpath
|
||||
It is also possible to test what happens when a particular class and/or package is not present at runtime.
|
||||
Spring Boot ships with a `FilteredClassLoader` that can easily be used by the runner.
|
||||
In the following example, we assert that if `UserService` is not present, the auto-configuration is properly disabled:
|
||||
In the following example, we assert that if `MyService` is not present, the auto-configuration is properly disabled:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/UserServiceAutoConfigurationTests.java[tag=test-classloader]
|
||||
include::{docs-java}/features/developingautoconfiguration/testing/MyServiceAutoConfigurationTests.java[tag=test-classloader]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ If you need to add or customize converters, you can use Spring Boot's `HttpMessa
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/messageconverters/HttpMessageConvertersConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/messageconverters/MyHttpMessageConvertersConfiguration.java[]
|
||||
----
|
||||
|
||||
Any `HttpMessageConverter` bean that is present in the context is added to the list of converters.
|
||||
@@ -352,7 +352,7 @@ You can also define a class annotated with `@ControllerAdvice` to customize the
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/errorhandling/MyControllerAdvice.java[]
|
||||
----
|
||||
|
||||
In the preceding example, if `YourException` is thrown by a controller defined in the same package as `AcmeController`, a JSON representation of the `CustomErrorType` POJO is used instead of the `ErrorAttributes` representation.
|
||||
In the preceding example, if `YourException` is thrown by a controller defined in the same package as `SomeController`, a JSON representation of the `CustomErrorType` POJO is used instead of the `ErrorAttributes` representation.
|
||||
|
||||
In some cases, errors handled at the controller level are not recorded by the <<actuator#actuator.metrics.supported.spring-mvc, metrics infrastructure>>.
|
||||
Applications can ensure that such exceptions are recorded with the request metrics by setting the handled exception as a request attribute:
|
||||
@@ -419,14 +419,14 @@ This abstraction works directly with the underlying embedded servlet container a
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/errorhandling/errorpageswithoutspringmvc/ErrorPageConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/errorhandling/errorpageswithoutspringmvc/MyErrorPagesConfiguration.java[]
|
||||
----
|
||||
|
||||
NOTE: If you register an `ErrorPage` with a path that ends up being handled by a `Filter` (as is common with some non-Spring web frameworks, like Jersey and Wicket), then the `Filter` has to be explicitly registered as an `ERROR` dispatcher, as shown in the following example:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/errorhandling/errorpageswithoutspringmvc/ServletFilterConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/errorhandling/errorpageswithoutspringmvc/MyFilterConfiguration.java[]
|
||||
----
|
||||
|
||||
Note that the default `FilterRegistrationBean` does not include the `ERROR` dispatcher type.
|
||||
@@ -469,7 +469,7 @@ Using {spring-framework-docs}/web.html#mvc-cors-controller[controller method COR
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/cors/CorsConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springmvc/cors/MyCorsConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -491,12 +491,12 @@ include::{docs-java}/features/developingwebapplications/springwebflux/MyRestCont
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/RoutingConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/MyRoutingConfiguration.java[]
|
||||
----
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/UserHandler.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/MyUserHandler.java[]
|
||||
----
|
||||
|
||||
WebFlux is part of the Spring Framework and detailed information is available in its {spring-framework-docs}/web-reactive.html#webflux-fn[reference documentation].
|
||||
@@ -540,7 +540,7 @@ If you need to add or customize codecs, you can create a custom `CodecCustomizer
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/httpcodecs/CodecConfiguration.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/httpcodecs/MyCodecsConfiguration.java[]
|
||||
----
|
||||
|
||||
You can also leverage <<features#features.developing-web-applications.spring-mvc.json,Boot's custom JSON serializers and deserializers>>.
|
||||
@@ -610,11 +610,11 @@ The first step to customizing this feature often involves using the existing mec
|
||||
For that, you can add a bean of type `ErrorAttributes`.
|
||||
|
||||
To change the error handling behavior, you can implement `ErrorWebExceptionHandler` and register a bean definition of that type.
|
||||
Because a `WebExceptionHandler` is quite low-level, Spring Boot also provides a convenient `AbstractErrorWebExceptionHandler` to let you handle errors in a WebFlux functional way, as shown in the following example:
|
||||
Because a `ErrorWebExceptionHandler` is quite low-level, Spring Boot also provides a convenient `AbstractErrorWebExceptionHandler` to let you handle errors in a WebFlux functional way, as shown in the following example:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/errorhandling/CustomErrorWebExceptionHandler.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/errorhandling/MyErrorWebExceptionHandler.java[]
|
||||
----
|
||||
|
||||
For a more complete picture, you can also subclass `DefaultErrorWebExceptionHandler` directly and override specific methods.
|
||||
@@ -624,7 +624,7 @@ Applications can ensure that such exceptions are recorded with the request metri
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/errorhandling/ExceptionHandlingController.java[]
|
||||
include::{docs-java}/features/developingwebapplications/springwebflux/errorhandling/MyExceptionHandlingController.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -702,7 +702,7 @@ To get started with Jersey, include the `spring-boot-starter-jersey` as a depend
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/jersey/JerseyConfig.java[]
|
||||
include::{docs-java}/features/developingwebapplications/jersey/MyJerseyConfig.java[]
|
||||
----
|
||||
|
||||
WARNING: Jersey's support for scanning executable archives is rather limited.
|
||||
@@ -715,7 +715,7 @@ All the registered endpoints should be `@Components` with HTTP resource annotati
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/jersey/Endpoint.java[]
|
||||
include::{docs-java}/features/developingwebapplications/jersey/MyEndpoint.java[]
|
||||
----
|
||||
|
||||
Since the `Endpoint` is a Spring `@Component`, its lifecycle is managed by Spring and you can use the `@Autowired` annotation to inject dependencies and use the `@Value` annotation to inject external configuration.
|
||||
@@ -829,7 +829,7 @@ The following example shows programmatically setting the port:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/embeddedcontainer/customizing/programmatic/CustomizationBean.java[]
|
||||
include::{docs-java}/features/developingwebapplications/embeddedcontainer/customizing/programmatic/MyWebServerFactoryCustomizer.java[]
|
||||
----
|
||||
|
||||
`TomcatServletWebServerFactory`, `JettyServletWebServerFactory` and `UndertowServletWebServerFactory` are dedicated variants of `ConfigurableServletWebServerFactory` that have additional customization setter methods for Tomcat, Jetty and Undertow respectively.
|
||||
@@ -837,7 +837,7 @@ The following example shows how to customize `TomcatServletWebServerFactory` tha
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/features/developingwebapplications/embeddedcontainer/customizing/programmatic/TomcatServerCustomizer.java[]
|
||||
include::{docs-java}/features/developingwebapplications/embeddedcontainer/customizing/programmatic/MyTomcatWebServerFactoryCustomizer.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -73,23 +73,23 @@ For example, the `SPRING_APPLICATION_JSON` property can be supplied on the comma
|
||||
|
||||
[indent=0]
|
||||
----
|
||||
$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar
|
||||
$ SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
|
||||
----
|
||||
|
||||
In the preceding example, you end up with `acme.name=test` in the Spring `Environment`.
|
||||
In the preceding example, you end up with `my.name=test` in the Spring `Environment`.
|
||||
|
||||
The same JSON can also be provided as a system property:
|
||||
|
||||
[indent=0]
|
||||
----
|
||||
$ java -Dspring.application.json='{"acme":{"name":"test"}}' -jar myapp.jar
|
||||
$ java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
|
||||
----
|
||||
|
||||
Or you could supply the JSON by using a command line argument:
|
||||
|
||||
[indent=0]
|
||||
----
|
||||
$ java -jar myapp.jar --spring.application.json='{"acme":{"name":"test"}}'
|
||||
$ java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}'
|
||||
----
|
||||
|
||||
If you are deploying to a classic Application Server, you could also use a JNDI variable named `java:comp/env/spring.application.json`.
|
||||
@@ -616,17 +616,17 @@ It is possible to bind a bean declaring standard JavaBean properties as shown in
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/javabeanbinding/AcmeProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/javabeanbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
The preceding POJO defines the following properties:
|
||||
|
||||
* `acme.enabled`, with a value of `false` by default.
|
||||
* `acme.remote-address`, with a type that can be coerced from `String`.
|
||||
* `acme.security.username`, with a nested "security" object whose name is determined by the name of the property.
|
||||
* `my.service.enabled`, with a value of `false` by default.
|
||||
* `my.service.remote-address`, with a type that can be coerced from `String`.
|
||||
* `my.service.security.username`, with a nested "security" object whose name is determined by the name of the property.
|
||||
In particular, the return type is not used at all there and could have been `SecurityProperties`.
|
||||
* `acme.security.password`.
|
||||
* `acme.security.roles`, with a collection of `String` that defaults to `USER`.
|
||||
* `my.service.security.password`.
|
||||
* `my.service.security.roles`, with a collection of `String` that defaults to `USER`.
|
||||
|
||||
NOTE: The properties that map to `@ConfigurationProperties` classes available in Spring Boot, which are configured via properties files, YAML files, environment variables etc., are public API but the accessors (getters/setters) of the class itself are not meant to be used directly.
|
||||
|
||||
@@ -657,7 +657,7 @@ The example in the previous section can be rewritten in an immutable fashion as
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/constructorbinding/AcmeProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/constructorbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
In this setup, the `@ConstructorBinding` annotation is used to indicate that constructor binding should be used.
|
||||
@@ -666,12 +666,12 @@ This means that the binder will expect to find a constructor with the parameters
|
||||
Nested members of a `@ConstructorBinding` class (such as `Security` in the example above) will also be bound via their constructor.
|
||||
|
||||
Default values can be specified using `@DefaultValue` and the same conversion service will be applied to coerce the `String` value to the target type of a missing property.
|
||||
By default, if no properties are bound to `Security`, the `AcmeProperties` instance will contain a `null` value for `security`.
|
||||
By default, if no properties are bound to `Security`, the `MyProperties` instance will contain a `null` value for `security`.
|
||||
If you wish you return a non-null instance of `Security` even when no properties are bound to it, you can use an empty `@DefaultValue` annotation to do so:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/constructorbinding/nonnull/AcmeProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/constructorbinding/nonnull/MyProperties.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -715,7 +715,7 @@ include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/ena
|
||||
When the `@ConfigurationProperties` bean is registered using configuration property scanning or via `@EnableConfigurationProperties`, the bean has a conventional name: `<prefix>-<fqn>`, where `<prefix>` is the environment key prefix specified in the `@ConfigurationProperties` annotation and `<fqn>` is the fully qualified name of the bean.
|
||||
If the annotation does not provide any prefix, only the fully qualified name of the bean is used.
|
||||
|
||||
The bean name in the example above is `acme-com.example.AcmeProperties`.
|
||||
The bean name in the example above is `com.example.app-com.example.app.SomeProperties`.
|
||||
====
|
||||
|
||||
We recommend that `@ConfigurationProperties` only deal with the environment and, in particular, does not inject other beans from the context.
|
||||
@@ -730,13 +730,14 @@ This style of configuration works particularly well with the `SpringApplication`
|
||||
|
||||
[source,yaml,indent=0]
|
||||
----
|
||||
acme:
|
||||
remote-address: 192.168.1.1
|
||||
security:
|
||||
username: admin
|
||||
roles:
|
||||
- USER
|
||||
- ADMIN
|
||||
my:
|
||||
service:
|
||||
remote-address: 192.168.1.1
|
||||
security:
|
||||
username: admin
|
||||
roles:
|
||||
- USER
|
||||
- ADMIN
|
||||
----
|
||||
|
||||
To work with `@ConfigurationProperties` beans, you can inject them in the same way as any other bean, as shown in the following example:
|
||||
@@ -763,7 +764,7 @@ To configure a bean from the `Environment` properties, add `@ConfigurationProper
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/thirdpartyconfiguration/ThirdPartyConfiguration.java[]
|
||||
----
|
||||
|
||||
Any JavaBean property defined with the `another` prefix is mapped onto that `AnotherComponent` bean in manner similar to the preceding `AcmeProperties` example.
|
||||
Any JavaBean property defined with the `another` prefix is mapped onto that `AnotherComponent` bean in manner similar to the preceding `SomeProperties` example.
|
||||
|
||||
|
||||
|
||||
@@ -776,7 +777,7 @@ As an example, consider the following `@ConfigurationProperties` class:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/relaxedbinding/OwnerProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/relaxedbinding/MyPersonProperties.java[]
|
||||
----
|
||||
|
||||
With the preceding code, the following properties names can all be used:
|
||||
@@ -786,20 +787,20 @@ With the preceding code, the following properties names can all be used:
|
||||
|===
|
||||
| Property | Note
|
||||
|
||||
| `acme.my-project.person.first-name`
|
||||
| `my.main-project.person.first-name`
|
||||
| Kebab case, which is recommended for use in `.properties` and `.yml` files.
|
||||
|
||||
| `acme.myProject.person.firstName`
|
||||
| `my.main-project.person.firstName`
|
||||
| Standard camel case syntax.
|
||||
|
||||
| `acme.my_project.person.first_name`
|
||||
| `my.main-project.person.first_name`
|
||||
| Underscore notation, which is an alternative format for use in `.properties` and `.yml` files.
|
||||
|
||||
| `ACME_MYPROJECT_PERSON_FIRSTNAME`
|
||||
| `MY_MAINPROJECT_PERSON_FIRSTNAME`
|
||||
| Upper case format, which is recommended when using system environment variables.
|
||||
|===
|
||||
|
||||
NOTE: The `prefix` value for the annotation _must_ be in kebab case (lowercase and separated by `-`, such as `acme.my-project.person`).
|
||||
NOTE: The `prefix` value for the annotation _must_ be in kebab case (lowercase and separated by `-`, such as `my.main-project.person`).
|
||||
|
||||
.relaxed binding rules per property source
|
||||
[cols="2,4,4"]
|
||||
@@ -823,7 +824,7 @@ NOTE: The `prefix` value for the annotation _must_ be in kebab case (lowercase a
|
||||
| Standard list syntax using `[ ]` or comma-separated values
|
||||
|===
|
||||
|
||||
TIP: We recommend that, when possible, properties are stored in lower-case kebab format, such as `my.property-name=acme`.
|
||||
TIP: We recommend that, when possible, properties are stored in lower-case kebab format, such as `my.person.first-name=Rod`.
|
||||
|
||||
|
||||
|
||||
@@ -838,15 +839,15 @@ For example, consider binding the following properties to a `Map<String,String>`
|
||||
[source,properties,indent=0,role="primary"]
|
||||
.Properties
|
||||
----
|
||||
acme.map.[/key1]=value1
|
||||
acme.map.[/key2]=value2
|
||||
acme.map./key3=value3
|
||||
my.map.[/key1]=value1
|
||||
my.map.[/key2]=value2
|
||||
my.map./key3=value3
|
||||
----
|
||||
|
||||
[source,yaml,indent=0,role="secondary"]
|
||||
.Yaml
|
||||
----
|
||||
acme:
|
||||
my:
|
||||
map:
|
||||
"[/key1]": "value1"
|
||||
"[/key2]": "value2"
|
||||
@@ -882,7 +883,7 @@ For example, the configuration property `spring.main.log-startup-info` would be
|
||||
Environment variables can also be used when binding to object lists.
|
||||
To bind to a `List`, the element number should be surrounded with underscores in the variable name.
|
||||
|
||||
For example, the configuration property `my.acme[0].other` would use an environment variable named `MY_ACME_0_OTHER`.
|
||||
For example, the configuration property `my.service[0].other` would use an environment variable named `MY_SERVICE_0_OTHER`.
|
||||
|
||||
|
||||
|
||||
@@ -891,18 +892,18 @@ For example, the configuration property `my.acme[0].other` would use an environm
|
||||
When lists are configured in more than one place, overriding works by replacing the entire list.
|
||||
|
||||
For example, assume a `MyPojo` object with `name` and `description` attributes that are `null` by default.
|
||||
The following example exposes a list of `MyPojo` objects from `AcmeProperties`:
|
||||
The following example exposes a list of `MyPojo` objects from `MyProperties`:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/mergingcomplextypes/list/AcmeProperties.java[tag=*]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/mergingcomplextypes/list/MyProperties.java[]
|
||||
----
|
||||
|
||||
Consider the following configuration:
|
||||
|
||||
[source,yaml,indent=0,configblocks]
|
||||
----
|
||||
acme:
|
||||
my:
|
||||
list:
|
||||
- name: "my name"
|
||||
description: "my description"
|
||||
@@ -911,12 +912,12 @@ Consider the following configuration:
|
||||
config:
|
||||
activate:
|
||||
on-profile: "dev"
|
||||
acme:
|
||||
my:
|
||||
list:
|
||||
- name: "my another name"
|
||||
----
|
||||
|
||||
If the `dev` profile is not active, `AcmeProperties.list` contains one `MyPojo` entry, as previously defined.
|
||||
If the `dev` profile is not active, `MyProperties.list` contains one `MyPojo` entry, as previously defined.
|
||||
If the `dev` profile is enabled, however, the `list` _still_ contains only one entry (with a name of `my another name` and a description of `null`).
|
||||
This configuration _does not_ add a second `MyPojo` instance to the list, and it does not merge the items.
|
||||
|
||||
@@ -925,7 +926,7 @@ Consider the following example:
|
||||
|
||||
[source,yaml,indent=0,configblocks]
|
||||
----
|
||||
acme:
|
||||
my:
|
||||
list:
|
||||
- name: "my name"
|
||||
description: "my description"
|
||||
@@ -936,28 +937,28 @@ Consider the following example:
|
||||
config:
|
||||
activate:
|
||||
on-profile: "dev"
|
||||
acme:
|
||||
my:
|
||||
list:
|
||||
- name: "my another name"
|
||||
----
|
||||
|
||||
In the preceding example, if the `dev` profile is active, `AcmeProperties.list` contains _one_ `MyPojo` entry (with a name of `my another name` and a description of `null`).
|
||||
In the preceding example, if the `dev` profile is active, `MyProperties.list` contains _one_ `MyPojo` entry (with a name of `my another name` and a description of `null`).
|
||||
For YAML, both comma-separated lists and YAML lists can be used for completely overriding the contents of the list.
|
||||
|
||||
For `Map` properties, you can bind with property values drawn from multiple sources.
|
||||
However, for the same property in multiple sources, the one with the highest priority is used.
|
||||
The following example exposes a `Map<String, MyPojo>` from `AcmeProperties`:
|
||||
The following example exposes a `Map<String, MyPojo>` from `MyProperties`:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/mergingcomplextypes/map/AcmeProperties.java[tag=*]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/mergingcomplextypes/map/MyProperties.java[]
|
||||
----
|
||||
|
||||
Consider the following configuration:
|
||||
|
||||
[source,yaml,indent=0,configblocks]
|
||||
----
|
||||
acme:
|
||||
my:
|
||||
map:
|
||||
key1:
|
||||
name: "my name 1"
|
||||
@@ -967,7 +968,7 @@ Consider the following configuration:
|
||||
config:
|
||||
activate:
|
||||
on-profile: "dev"
|
||||
acme:
|
||||
my:
|
||||
map:
|
||||
key1:
|
||||
name: "dev name 1"
|
||||
@@ -976,7 +977,7 @@ Consider the following configuration:
|
||||
description: "dev description 2"
|
||||
----
|
||||
|
||||
If the `dev` profile is not active, `AcmeProperties.map` contains one entry with key `key1` (with a name of `my name 1` and a description of `my description 1`).
|
||||
If the `dev` profile is not active, `MyProperties.map` contains one entry with key `key1` (with a name of `my name 1` and a description of `my description 1`).
|
||||
If the `dev` profile is enabled, however, `map` contains two entries with keys `key1` (with a name of `dev name 1` and a description of `my description 1`) and `key2` (with a name of `dev name 2` and a description of `dev description 2`).
|
||||
|
||||
NOTE: The preceding merging rules apply to properties from all property sources, and not just files.
|
||||
@@ -1007,7 +1008,7 @@ Consider the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/durations/javabeanbinding/AppSystemProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/durations/javabeanbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
To specify a session timeout of 30 seconds, `30`, `PT30S` and `30s` are all equivalent.
|
||||
@@ -1030,7 +1031,7 @@ If you prefer to use constructor binding, the same properties can be exposed, as
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/durations/constructorbinding/AppSystemProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/durations/constructorbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -1071,7 +1072,7 @@ Consider the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/datasizes/javabeanbinding/AppIoProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/datasizes/javabeanbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
To specify a buffer size of 10 megabytes, `10` and `10MB` are equivalent.
|
||||
@@ -1092,7 +1093,7 @@ If you prefer to use constructor binding, the same properties can be exposed, as
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/datasizes/constructorbinding/AppIoProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/conversion/datasizes/constructorbinding/MyProperties.java[]
|
||||
----
|
||||
|
||||
TIP: If you are upgrading a `Long` property, make sure to define the unit (using `@DataSizeUnit`) if it isn't bytes.
|
||||
@@ -1108,17 +1109,17 @@ To do so, ensure that a compliant JSR-303 implementation is on your classpath an
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/validate/AcmeProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/validate/MyProperties.java[]
|
||||
----
|
||||
|
||||
TIP: You can also trigger validation by annotating the `@Bean` method that creates the configuration properties with `@Validated`.
|
||||
|
||||
To ensure that validation is always triggered for nested properties, even when no properties are found, the associated field must be annotated with `@Valid`.
|
||||
The following example builds on the preceding `AcmeProperties` example:
|
||||
The following example builds on the preceding `MyProperties` example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/validate/nested/AcmeProperties.java[]
|
||||
include::{docs-java}/features/externalconfig/typesafeconfigurationproperties/validate/nested/MyProperties.java[]
|
||||
----
|
||||
|
||||
You can also add a custom Spring `Validator` by creating a bean definition called `configurationPropertiesValidator`.
|
||||
|
||||
@@ -174,7 +174,7 @@ For instance, the following example exposes another factory that uses a specific
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/messaging/jms/receiving/custom/JmsConfiguration.java[]
|
||||
include::{docs-java}/features/messaging/jms/receiving/custom/MyJmsConfiguration.java[]
|
||||
----
|
||||
|
||||
Then you can use the factory in any `@JmsListener`-annotated method as follows:
|
||||
@@ -290,7 +290,7 @@ For instance, the following configuration class exposes another factory that use
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/messaging/amqp/receiving/custom/RabbitConfiguration.java[]
|
||||
include::{docs-java}/features/messaging/amqp/receiving/custom/MyRabbitConfiguration.java[]
|
||||
----
|
||||
|
||||
Then you can use the factory in any `@RabbitListener`-annotated method, as follows:
|
||||
@@ -387,7 +387,7 @@ To use the factory bean, wire `StreamsBuilder` into your `@Bean` as shown in the
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/messaging/kafka/streams/KafkaStreamsConfiguration.java[]
|
||||
include::{docs-java}/features/messaging/kafka/streams/MyKafkaStreamsConfiguration.java[]
|
||||
----
|
||||
|
||||
By default, the streams managed by the `StreamBuilder` object it creates are started automatically.
|
||||
@@ -440,7 +440,7 @@ You can also configure the Spring Kafka `JsonDeserializer` as follows:
|
||||
value-deserializer: "org.springframework.kafka.support.serializer.JsonDeserializer"
|
||||
properties:
|
||||
"[spring.json.value.default.type]": "com.example.Invoice"
|
||||
"[spring.json.trusted.packages]": "com.example,org.acme"
|
||||
"[spring.json.trusted.packages]": "com.example.main,com.example.another"
|
||||
----
|
||||
|
||||
Similarly, you can disable the `JsonSerializer` default behavior of sending type information in headers:
|
||||
|
||||
@@ -222,7 +222,7 @@ To enable transaction management, the following bean must be defined in your con
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/nosql/neo4j/repositories/Neo4jReactiveTransactionManagerConfiguration.java[]
|
||||
include::{docs-java}/features/nosql/neo4j/repositories/MyNeo4jConfiguration.java[]
|
||||
----
|
||||
====
|
||||
|
||||
@@ -527,7 +527,7 @@ For instance, you can customize the converters to use, as follows:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/nosql/couchbase/repositories/CouchbaseConversionsConfiguration.java[]
|
||||
include::{docs-java}/features/nosql/couchbase/repositories/MyCouchbaseConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -52,5 +52,5 @@ Regular beans can also be injected in a similar manner, as shown in the followin
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/quartz/SampleJob.java[]
|
||||
include::{docs-java}/features/quartz/MySampleJob.java[]
|
||||
----
|
||||
|
||||
@@ -31,7 +31,7 @@ The following example shows a customizer that configures the use of a proxy for
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/resttemplate/customization/RestTemplateProxyCustomizer.java[]
|
||||
include::{docs-java}/features/resttemplate/customization/MyRestTemplateCustomizer.java[]
|
||||
----
|
||||
|
||||
Finally, you can also create your own `RestTemplateBuilder` bean.
|
||||
@@ -40,7 +40,7 @@ The following example exposes a `RestTemplateBuilder` with what Spring Boot woul
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/resttemplate/customization/RestTemplateBuilderConfiguration.java[]
|
||||
include::{docs-java}/features/resttemplate/customization/MyRestTemplateBuilderConfiguration.java[]
|
||||
----
|
||||
|
||||
The most extreme (and rarely used) option is to create your own `RestTemplateBuilder` bean without using a configurer.
|
||||
|
||||
@@ -62,7 +62,7 @@ For example, you can customize your security configuration by adding something l
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/security/springwebflux/CustomWebFluxSecurityConfiguration.java[]
|
||||
include::{docs-java}/features/security/springwebflux/MyWebFluxSecurityConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ For example, for servlet applications, you can add your own `SecurityFilterChain
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/security/oauth2/client/OAuthClientConfiguration.java[]
|
||||
include::{docs-java}/features/security/oauth2/client/MyOAuthClientConfiguration.java[]
|
||||
----
|
||||
|
||||
TIP: Spring Boot auto-configures an `InMemoryOAuth2AuthorizedClientService` which is used by Spring Security for the management of client registrations.
|
||||
|
||||
@@ -188,7 +188,7 @@ The `SpringApplicationBuilder` lets you chain together multiple method calls and
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/springapplication/fluentbuilderapi/SpringApplicationBuilderExample.java[tag=*]
|
||||
include::{docs-java}/features/springapplication/fluentbuilderapi/MyApplication.java[tag=*]
|
||||
----
|
||||
|
||||
NOTE: There are some restrictions when creating an `ApplicationContext` hierarchy.
|
||||
@@ -242,14 +242,14 @@ For example, we can export the "Readiness" state of the application to a file so
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/springapplication/applicationavailability/managing/ReadinessStateExporter.java[]
|
||||
include::{docs-java}/features/springapplication/applicationavailability/managing/MyReadinessStateExporter.java[]
|
||||
----
|
||||
|
||||
We can also update the state of the application, when the application breaks and cannot recover:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/springapplication/applicationavailability/managing/LocalCacheVerifier.java[]
|
||||
include::{docs-java}/features/springapplication/applicationavailability/managing/MyLocalCacheVerifier.java[]
|
||||
----
|
||||
|
||||
Spring Boot provides <<actuator#actuator.endpoints.kubernetes-probes,Kubernetes HTTP probes for "Liveness" and "Readiness" with Actuator Health Endpoints>>.
|
||||
@@ -334,7 +334,7 @@ The `ApplicationArguments` interface provides access to both the raw `String[]`
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/springapplication/applicationarguments/ApplicationArgumentsExample.java[]
|
||||
include::{docs-java}/features/springapplication/applicationarguments/MyBean.java[]
|
||||
----
|
||||
|
||||
TIP: Spring Boot also registers a `CommandLinePropertySource` with the Spring `Environment`.
|
||||
@@ -355,7 +355,7 @@ The following example shows a `CommandLineRunner` with a `run` method:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/springapplication/commandlinerunner/CommandLineRunnerExample.java[]
|
||||
include::{docs-java}/features/springapplication/commandlinerunner/MyCommandLineRunner.java[]
|
||||
----
|
||||
|
||||
If several `CommandLineRunner` or `ApplicationRunner` beans are defined that must be called in a specific order, you can additionally implement the `org.springframework.core.Ordered` interface or use the `org.springframework.core.annotation.Order` annotation.
|
||||
|
||||
@@ -368,7 +368,7 @@ To use the `DSLContext`, you can inject it, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/jooq/dslcontext/JooqExample.java[tag=!method]
|
||||
include::{docs-java}/features/sql/jooq/dslcontext/MyBean.java[tag=!method]
|
||||
----
|
||||
|
||||
TIP: The jOOQ manual tends to use a variable named `create` to hold the `DSLContext`.
|
||||
@@ -377,7 +377,7 @@ You can then use the `DSLContext` to construct your queries, as shown in the fol
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/jooq/dslcontext/JooqExample.java[tag=method]
|
||||
include::{docs-java}/features/sql/jooq/dslcontext/MyBean.java[tag=method]
|
||||
----
|
||||
|
||||
|
||||
@@ -430,14 +430,14 @@ The following example shows how to manually override the database port while the
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/r2dbc/MyR2dbcPortConfiguration.java[]
|
||||
include::{docs-java}/features/sql/r2dbc/MyR2dbcConfiguration.java[]
|
||||
----
|
||||
|
||||
The following examples show how to set some PostgreSQL connection options:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/r2dbc/CustomizeR2dbcPostgresOptionsConfiguration.java[tag=*]
|
||||
include::{docs-java}/features/sql/r2dbc/MyPostgresR2dbcConfiguration.java[]
|
||||
----
|
||||
|
||||
When a `ConnectionFactory` bean is available, the regular JDBC `DataSource` auto-configuration backs off.
|
||||
@@ -474,7 +474,7 @@ A `DatabaseClient` bean is auto-configured, and you can `@Autowire` it directly
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/r2dbc/usingdatabaseclient/MyBean.java[tag=*]
|
||||
include::{docs-java}/features/sql/r2dbc/usingdatabaseclient/MyBean.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -494,7 +494,7 @@ The following example shows a typical Spring Data repository interface definitio
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/sql/r2dbc/repositories/CityRepository.java[tag=*]
|
||||
include::{docs-java}/features/sql/r2dbc/repositories/CityRepository.java[]
|
||||
----
|
||||
|
||||
TIP: We have barely scratched the surface of Spring Data R2DBC. For complete details, see the {spring-data-r2dbc-docs}[Spring Data R2DBC reference documentation].
|
||||
|
||||
@@ -165,7 +165,7 @@ have `@SpringBootTest` inject them using the `args` attribute.
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/usingapplicationarguments/ApplicationArgumentTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/usingapplicationarguments/MyApplicationArgumentTests.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -177,7 +177,7 @@ If you have web endpoints that you want to test against this mock environment, y
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/withmockenvironment/MockMvcTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/withmockenvironment/MyMockMvcTests.java[]
|
||||
----
|
||||
|
||||
TIP: If you want to focus only on the web layer and not start a complete `ApplicationContext`, consider <<features#features.testing.spring-boot-applications.spring-mvc-tests,using `@WebMvcTest` instead>>.
|
||||
@@ -186,7 +186,7 @@ Alternatively, you can configure a {spring-framework-docs}/testing.html#webtestc
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/withmockenvironment/MockWebTestClientTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/withmockenvironment/MyMockWebTestClientTests.java[]
|
||||
----
|
||||
|
||||
[TIP]
|
||||
@@ -211,7 +211,7 @@ For convenience, tests that need to make REST calls to the started server can ad
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/withrunningserver/RandomPortWebTestClientTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/withrunningserver/MyRandomPortWebTestClientTests.java[]
|
||||
----
|
||||
|
||||
This setup requires `spring-webflux` on the classpath.
|
||||
@@ -219,7 +219,7 @@ If you can't or won't add webflux, Spring Boot also provides a `TestRestTemplate
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/withrunningserver/RandomPortTestRestTemplateTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/withrunningserver/MyRandomPortTestRestTemplateTests.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -238,7 +238,7 @@ If such test needs access to an `MBeanServer`, consider marking it dirty as well
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/jmx/SampleJmxTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/jmx/MyJmxTests.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -357,7 +357,7 @@ For instance, the following example asserts that the actual number is a float va
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/jsontests/AssertJ.java[tag=*]
|
||||
include::{docs-java}/features/testing/springbootapplications/jsontests/MyJsonAssertJTests.java[tag=*]
|
||||
----
|
||||
|
||||
|
||||
@@ -710,14 +710,14 @@ You can inject it by using `@Autowired` and use it in your tests as you normally
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/UserDocumentationTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/MyUserDocumentationTests.java[]
|
||||
----
|
||||
|
||||
If you require more control over Spring REST Docs configuration than offered by the attributes of `@AutoConfigureRestDocs`, you can use a `RestDocsMockMvcConfigurationCustomizer` bean, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/CustomizationConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/MyRestDocsConfiguration.java[]
|
||||
----
|
||||
|
||||
If you want to make use of Spring REST Docs support for a parameterized output directory, you can create a `RestDocumentationResultHandler` bean.
|
||||
@@ -726,7 +726,7 @@ The following example shows a `RestDocumentationResultHandler` being defined:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/ResultHandlerConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withmockmvc/MyResultHandlerConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -738,14 +738,14 @@ You can inject it by using `@Autowired` and use it in your tests as you normally
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withwebtestclient/UsersDocumentationTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withwebtestclient/MyUsersDocumentationTests.java[]
|
||||
----
|
||||
|
||||
If you require more control over Spring REST Docs configuration than offered by the attributes of `@AutoConfigureRestDocs`, you can use a `RestDocsWebTestClientConfigurationCustomizer` bean, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withwebtestclient/AdvancedRestDocsConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withwebtestclient/MyRestDocsConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -757,14 +757,14 @@ You can inject it by using `@Autowired` and use it in your tests as you normally
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/UserDocumentationTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyUserDocumentationTests.java[]
|
||||
----
|
||||
|
||||
If you require more control over Spring REST Docs configuration than offered by the attributes of `@AutoConfigureRestDocs`, a `RestDocsRestAssuredConfigurationCustomizer` bean can be used, as shown in the following example:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/AdvancedRestDocsConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyRestDocsConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -794,7 +794,7 @@ Additional auto-configurations can be added on a test-by-test basis by creating
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/additionalautoconfigurationandslicing/ExampleJdbcTests.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/additionalautoconfigurationandslicing/MyJdbcTests.java[]
|
||||
----
|
||||
|
||||
NOTE: Make sure to not use the regular `@Import` annotation to import auto-configurations as they are handled in a specific way by Spring Boot.
|
||||
@@ -821,7 +821,7 @@ You could define your `@SpringBootApplication` as follows:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/SampleApplication.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/MyApplication.java[]
|
||||
----
|
||||
|
||||
Because this class is the source configuration for the test, any slice test actually tries to start Spring Batch, which is definitely not what you want to do.
|
||||
@@ -829,7 +829,7 @@ A recommended approach is to move that area-specific configuration to a separate
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/BatchConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/MyBatchConfiguration.java[]
|
||||
----
|
||||
|
||||
NOTE: Depending on the complexity of your application, you may either have a single `@Configuration` class for your customizations or one class per domain area.
|
||||
@@ -840,14 +840,14 @@ For example, for a `@WebMvcTest`, the following configuration will not include t
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/WebConfiguration.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/MyWebConfiguration.java[]
|
||||
----
|
||||
|
||||
The configuration below will, however, cause the custom `WebMvcConfigurer` to be loaded by the test slice.
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/TestWebMvcConfigurer.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/MyWebMvcConfigurer.java[]
|
||||
----
|
||||
|
||||
Another source of confusion is classpath scanning.
|
||||
@@ -856,7 +856,7 @@ Your application may resemble the following code:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/scan/SampleApplication.java[]
|
||||
include::{docs-java}/features/testing/springbootapplications/userconfigurationandslicing/scan/MyApplication.java[]
|
||||
----
|
||||
|
||||
Doing so effectively overrides the default component scan directive with the side effect of scanning those two packages regardless of the slice that you chose.
|
||||
@@ -920,7 +920,7 @@ To use add `@ExtendWith(OutputCaptureExtension.class)` and inject `CapturedOutpu
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/features/testing/utilities/outputcapture/OutputCaptureTests.java[]
|
||||
include::{docs-java}/features/testing/utilities/outputcapture/MyOutputCaptureTests.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -147,11 +147,11 @@ If you run `mvn dependency:tree` again, you see that there are now a number of a
|
||||
[[getting-started.first-application.code]]
|
||||
=== Writing the Code
|
||||
To finish our application, we need to create a single Java file.
|
||||
By default, Maven compiles sources from `src/main/java`, so you need to create that directory structure and then add a file named `src/main/java/Example.java` to contain the following code:
|
||||
By default, Maven compiles sources from `src/main/java`, so you need to create that directory structure and then add a file named `src/main/java/MyApplication.java` to contain the following code:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/gettingstarted/firstapplication/code/Example.java[]
|
||||
include::{docs-java}/gettingstarted/firstapplication/code/MyApplication.java[]
|
||||
----
|
||||
|
||||
Although there is not much code here, quite a lot is going on.
|
||||
@@ -222,7 +222,7 @@ You should see output similar to the following:
|
||||
....... . . .
|
||||
....... . . . (log output here)
|
||||
....... . . .
|
||||
........ Started Example in 2.222 seconds (JVM running for 6.514)
|
||||
........ Started MyApplication in 2.222 seconds (JVM running for 6.514)
|
||||
----
|
||||
|
||||
If you open a web browser to `http://localhost:8080`, you should see the following output:
|
||||
@@ -322,7 +322,7 @@ To run that application, use the `java -jar` command, as follows:
|
||||
....... . . .
|
||||
....... . . . (log output here)
|
||||
....... . . .
|
||||
........ Started Example in 2.536 seconds (JVM running for 2.864)
|
||||
........ Started MyApplication in 2.536 seconds (JVM running for 2.864)
|
||||
----
|
||||
|
||||
As before, to exit the application, press `ctrl-c`.
|
||||
|
||||
@@ -68,5 +68,5 @@ The following example shows one way to write such an exporter:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/actuator/maphealthindicatorstometrics/MetricsHealthMicrometerExport.java[]
|
||||
include::{docs-java}/howto/actuator/maphealthindicatorstometrics/MyHealthMetricsExportConfiguration.java[]
|
||||
----
|
||||
|
||||
@@ -15,7 +15,7 @@ The following example shows how to define a data source in a bean:
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/FancyDataSourceConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/custom/MyDataSourceConfiguration.java[]
|
||||
----
|
||||
|
||||
The following example shows how to define a data source by setting properties:
|
||||
@@ -29,7 +29,7 @@ The following example shows how to define a data source by setting properties:
|
||||
pool-size: 30
|
||||
----
|
||||
|
||||
Assuming that your `FancyDataSource` has regular JavaBean properties for the URL, the username, and the pool size, these settings are bound automatically before the `DataSource` is made available to other components.
|
||||
Assuming that `SomeDataSource` has regular JavaBean properties for the URL, the username, and the pool size, these settings are bound automatically before the `DataSource` is made available to other components.
|
||||
|
||||
Spring Boot also provides a utility builder class, called `DataSourceBuilder`, that can be used to create one of the standard data sources (if it is on the classpath).
|
||||
The builder can detect the one to use based on what's available on the classpath.
|
||||
@@ -39,7 +39,7 @@ The following example shows how to create a data source by using a `DataSourceBu
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/BasicDataSourceConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/builder/MyDataSourceConfiguration.java[]
|
||||
----
|
||||
|
||||
To run an app with that `DataSource`, all you need is the connection information.
|
||||
@@ -80,7 +80,7 @@ The following example shows how create a `HikariDataSource` with `DataSourceBuil
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/SimpleDataSourceConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/simple/MyDataSourceConfiguration.java[]
|
||||
----
|
||||
|
||||
You can even go further by leveraging what `DataSourceProperties` does for you -- that is, by providing a default embedded database with a sensible username and password if no URL is provided.
|
||||
@@ -90,7 +90,7 @@ To avoid that, you can redefine a custom `DataSourceProperties` on your custom n
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/ConfigurableDataSourceConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configurecustomdatasource/configurable/MyDataSourceConfiguration.java[]
|
||||
----
|
||||
|
||||
This setup puts you _in sync_ with what Spring Boot does for you by default, except that a dedicated connection pool is chosen (in code) and its settings are exposed in the `app.datasource.configuration` sub namespace.
|
||||
@@ -127,7 +127,7 @@ In the following example, we provide the _exact_ same feature set as the auto-co
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configuretwodatasources/SimpleDataSourcesConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configuretwodatasources/MyDataSourcesConfiguration.java[]
|
||||
----
|
||||
|
||||
TIP: `firstDataSourceProperties` has to be flagged as `@Primary` so that the database initializer feature uses your copy (if you use the initializer).
|
||||
@@ -157,7 +157,7 @@ You can apply the same concept to the secondary `DataSource` as well, as shown i
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configuretwodatasources/CompleteDataSourcesConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configuretwodatasources/MyCompleteDataSourcesConfiguration.java[]
|
||||
----
|
||||
|
||||
The preceding example configures two data sources on custom namespaces with the same logic as Spring Boot would use in auto-configuration.
|
||||
@@ -188,7 +188,7 @@ To get more control, you can use the `@EntityScan` annotation, as shown in the f
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/separateentitydefinitionsfromspringconfiguration/Application.java[]
|
||||
include::{docs-java}/howto/dataaccess/separateentitydefinitionsfromspringconfiguration/MyApplication.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -275,7 +275,7 @@ Then, add a `HibernatePropertiesCustomizer` bean as shown in the following examp
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/configurehibernatesecondlevelcaching/HibernateSecondLevelCacheConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/configurehibernatesecondlevelcaching/MyHibernateSecondLevelCacheConfiguration.java[]
|
||||
----
|
||||
|
||||
This customizer will configure Hibernate to use the same `CacheManager` as the one that the application uses.
|
||||
@@ -308,7 +308,7 @@ You can also reuse `JpaProperties` to bind settings for each `EntityManagerFacto
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/dataaccess/usemultipleentitymanagers/CustomEntityManagerFactoryConfiguration.java[]
|
||||
include::{docs-java}/howto/dataaccess/usemultipleentitymanagers/MyEntityManagerFactoryConfiguration.java[]
|
||||
----
|
||||
|
||||
The example above creates an `EntityManagerFactory` using a `DataSource` bean named `firstDataSource`.
|
||||
|
||||
@@ -164,7 +164,7 @@ If you would rather map to a different path, you can configure one as follows:
|
||||
spring:
|
||||
mvc:
|
||||
servlet:
|
||||
path: "/acme"
|
||||
path: "/mypath"
|
||||
----
|
||||
|
||||
If you have additional servlets you can declare a `@Bean` of type `Servlet` or `ServletRegistrationBean` for each and Spring Boot will register them transparently to the container.
|
||||
|
||||
@@ -443,7 +443,7 @@ You can add an `org.apache.catalina.connector.Connector` to the `TomcatServletWe
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/webserver/enablemultipleconnectorsintomcat/TomcatMultipleConnectorsConfiguration.java[]
|
||||
include::{docs-java}/howto/webserver/enablemultipleconnectorsintomcat/MyTomcatConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -463,7 +463,7 @@ To switch to the `LegacyCookieProcessor`, use an `WebServerFactoryCustomizer` be
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/howto/webserver/usetomcatlegacycookieprocessor/LegacyCookieProcessorConfiguration.java[]
|
||||
include::{docs-java}/howto/webserver/usetomcatlegacycookieprocessor/MyLegacyCookieProcessorConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
@@ -490,7 +490,7 @@ Add an `UndertowBuilderCustomizer` to the `UndertowServletWebServerFactory` and
|
||||
|
||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||
----
|
||||
include::{docs-java}/howto/webserver/enablemultiplelistenersinundertow/UndertowMultipleListenersConfiguration.java[]
|
||||
include::{docs-java}/howto/webserver/enablemultiplelistenersinundertow/MyUndertowConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
@@ -10,14 +10,14 @@ The following example shows a `@Service` Bean that uses constructor injection to
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/using/springbeansanddependencyinjection/singleconstructor/DatabaseAccountService.java[]
|
||||
include::{docs-java}/using/springbeansanddependencyinjection/singleconstructor/MyAccountService.java[]
|
||||
----
|
||||
|
||||
If a bean has more than one constructor, you'll need to mark the one you want Spring to use with `@Autowired`:
|
||||
|
||||
[source,java,indent=0]
|
||||
----
|
||||
include::{docs-java}/using/springbeansanddependencyinjection/multipleconstructors/DatabaseAccountService.java[]
|
||||
include::{docs-java}/using/springbeansanddependencyinjection/multipleconstructors/MyAccountService.java[]
|
||||
----
|
||||
|
||||
TIP: Notice how using constructor injection lets the `riskAssessor` field be marked as `final`, indicating that it cannot be subsequently changed.
|
||||
|
||||
Reference in New Issue
Block a user