Merge branch '1.1.x'
Conflicts: spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc
This commit is contained in:
commit
6281070d0a
|
|
@ -52,7 +52,6 @@ import org.springframework.expression.spel.standard.SpelExpressionParser;
|
||||||
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
import org.springframework.expression.spel.support.StandardEvaluationContext;
|
||||||
import org.springframework.util.PropertyPlaceholderHelper;
|
import org.springframework.util.PropertyPlaceholderHelper;
|
||||||
import org.springframework.util.PropertyPlaceholderHelper.PlaceholderResolver;
|
import org.springframework.util.PropertyPlaceholderHelper.PlaceholderResolver;
|
||||||
import org.springframework.web.bind.ServletRequestUtils;
|
|
||||||
import org.springframework.web.servlet.DispatcherServlet;
|
import org.springframework.web.servlet.DispatcherServlet;
|
||||||
import org.springframework.web.servlet.View;
|
import org.springframework.web.servlet.View;
|
||||||
import org.springframework.web.servlet.view.BeanNameViewResolver;
|
import org.springframework.web.servlet.view.BeanNameViewResolver;
|
||||||
|
|
@ -107,7 +106,7 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom
|
||||||
+ "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>"
|
+ "<p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>"
|
||||||
+ "<div id='created'>${timestamp}</div>"
|
+ "<div id='created'>${timestamp}</div>"
|
||||||
+ "<div>There was an unexpected error (type=${error}, status=${status}).</div>"
|
+ "<div>There was an unexpected error (type=${error}, status=${status}).</div>"
|
||||||
+ "<div>${message}</div>" + "</body></html>");
|
+ "<div>${message}</div></body></html>");
|
||||||
|
|
||||||
@Bean(name = "error")
|
@Bean(name = "error")
|
||||||
@ConditionalOnMissingBean(name = "error")
|
@ConditionalOnMissingBean(name = "error")
|
||||||
|
|
@ -157,8 +156,6 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom
|
||||||
|
|
||||||
private final String template;
|
private final String template;
|
||||||
|
|
||||||
private final SpelExpressionParser parser = new SpelExpressionParser();
|
|
||||||
|
|
||||||
private final StandardEvaluationContext context = new StandardEvaluationContext();
|
private final StandardEvaluationContext context = new StandardEvaluationContext();
|
||||||
|
|
||||||
private PropertyPlaceholderHelper helper;
|
private PropertyPlaceholderHelper helper;
|
||||||
|
|
@ -169,19 +166,7 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom
|
||||||
this.template = template;
|
this.template = template;
|
||||||
this.context.addPropertyAccessor(new MapAccessor());
|
this.context.addPropertyAccessor(new MapAccessor());
|
||||||
this.helper = new PropertyPlaceholderHelper("${", "}");
|
this.helper = new PropertyPlaceholderHelper("${", "}");
|
||||||
this.resolver = new PlaceholderResolver() {
|
this.resolver = new SpelPlaceholderResolver(this.context);
|
||||||
@Override
|
|
||||||
public String resolvePlaceholder(String name) {
|
|
||||||
Expression expression = SpelView.this.parser.parseExpression(name);
|
|
||||||
try {
|
|
||||||
Object value = expression.getValue(SpelView.this.context);
|
|
||||||
return (value == null ? null : HtmlUtils.htmlEscape(value.toString()));
|
|
||||||
}
|
|
||||||
catch (Exception ex) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -204,4 +189,31 @@ public class ErrorMvcAutoConfiguration implements EmbeddedServletContainerCustom
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SpEL based {@link PlaceholderResolver}.
|
||||||
|
*/
|
||||||
|
private static class SpelPlaceholderResolver implements PlaceholderResolver {
|
||||||
|
|
||||||
|
private final SpelExpressionParser parser = new SpelExpressionParser();
|
||||||
|
|
||||||
|
private final StandardEvaluationContext context;
|
||||||
|
|
||||||
|
public SpelPlaceholderResolver(StandardEvaluationContext context) {
|
||||||
|
this.context = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String resolvePlaceholder(String name) {
|
||||||
|
Expression expression = this.parser.parseExpression(name);
|
||||||
|
try {
|
||||||
|
Object value = expression.getValue(this.context);
|
||||||
|
return HtmlUtils.htmlEscape(value == null ? null : value.toString());
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ file and it's used to setup an appropriate `URLClassLoader` and ultimately call
|
||||||
There are 3 launcher subclasses (`JarLauncher`, `WarLauncher` and `PropertiesLauncher`).
|
There are 3 launcher subclasses (`JarLauncher`, `WarLauncher` and `PropertiesLauncher`).
|
||||||
Their purpose is to load resources (`.class` files etc.) from nested jar files or war
|
Their purpose is to load resources (`.class` files etc.) from nested jar files or war
|
||||||
files in directories (as opposed to explicitly on the classpath). In the case of the
|
files in directories (as opposed to explicitly on the classpath). In the case of the
|
||||||
`[Jar|War]Launcher` the nested paths are fixed `(lib/\*.jar` and `lib-provided/\*.jar` for
|
`[Jar|War]Launcher` the nested paths are fixed (`+lib/*.jar+` and `+lib-provided/*.jar+` for
|
||||||
the war case) so you just add extra jars in those locations if you want more. The
|
the war case) so you just add extra jars in those locations if you want more. The
|
||||||
`PropertiesLauncher` looks in `lib/` by default, but you can add additional locations by
|
`PropertiesLauncher` looks in `lib/` by default, but you can add additional locations by
|
||||||
setting an environment variable `LOADER_PATH` or `loader.path` in `application.properties`
|
setting an environment variable `LOADER_PATH` or `loader.path` in `application.properties`
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ using the latest version of Java.
|
||||||
[[getting-started-installation-instructions-for-java]]
|
[[getting-started-installation-instructions-for-java]]
|
||||||
=== Installation instructions for the Java developer
|
=== Installation instructions for the Java developer
|
||||||
You can use Spring Boot in the same way as any standard Java library. Simply include the
|
You can use Spring Boot in the same way as any standard Java library. Simply include the
|
||||||
appropriate `spring-boot-*.jar` files on your classpath. Spring Boot does not require
|
appropriate `+spring-boot-*.jar+` files on your classpath. Spring Boot does not require
|
||||||
any special tools integration, so you can use any IDE or text editor; and there is
|
any special tools integration, so you can use any IDE or text editor; and there is
|
||||||
nothing special about a Spring Boot application, so you can run and debug as you would
|
nothing special about a Spring Boot application, so you can run and debug as you would
|
||||||
any other Java program.
|
any other Java program.
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[[howto]]
|
[[howto]]
|
||||||
= '`How-to`' guides
|
= '`How-to`' guides
|
||||||
|
|
||||||
[partintro]
|
[partintro]
|
||||||
--
|
--
|
||||||
|
|
@ -12,7 +12,7 @@ http://stackoverflow.com/tags/spring-boot[stackoverflow.com] to see if someone h
|
||||||
already provided an answer; this is also a great place to ask new questions (please use
|
already provided an answer; this is also a great place to ask new questions (please use
|
||||||
the `spring-boot` tag).
|
the `spring-boot` tag).
|
||||||
|
|
||||||
We're also more than happy to extend this section; If you want to add a '`how-to`' you
|
We're also more than happy to extend this section; If you want to add a '`how-to`' you
|
||||||
can send us a {github-code}[pull request].
|
can send us a {github-code}[pull request].
|
||||||
--
|
--
|
||||||
|
|
||||||
|
|
@ -25,7 +25,7 @@ can send us a {github-code}[pull request].
|
||||||
|
|
||||||
[[howto-troubleshoot-auto-configuration]]
|
[[howto-troubleshoot-auto-configuration]]
|
||||||
=== Troubleshoot auto-configuration
|
=== Troubleshoot auto-configuration
|
||||||
The Spring Boot auto-configuration tries its best to '`do the right thing`' , but
|
The Spring Boot auto-configuration tries its best to '`do the right thing`', but
|
||||||
sometimes things fail and it can be hard to tell why.
|
sometimes things fail and it can be hard to tell why.
|
||||||
|
|
||||||
There is a really useful `AutoConfigurationReport` available in any Spring Boot
|
There is a really useful `AutoConfigurationReport` available in any Spring Boot
|
||||||
|
|
@ -37,8 +37,8 @@ which not) by Spring Boot at runtime.
|
||||||
Many more questions can be answered by looking at the source code and the javadoc. Some
|
Many more questions can be answered by looking at the source code and the javadoc. Some
|
||||||
rules of thumb:
|
rules of thumb:
|
||||||
|
|
||||||
* Look for classes called `\*AutoConfiguration` and read their sources, in particular the
|
* Look for classes called `+*AutoConfiguration+` and read their sources, in particular the
|
||||||
`@Conditional\*` annotations to find out what features they enable and when. Add
|
`+@Conditional*+` annotations to find out what features they enable and when. Add
|
||||||
`--debug` to the command line or a System property `-Ddebug` to get a log on the
|
`--debug` to the command line or a System property `-Ddebug` to get a log on the
|
||||||
console of all the autoconfiguration decisions that were made in your app. In a running
|
console of all the autoconfiguration decisions that were made in your app. In a running
|
||||||
Actuator app look at the `autoconfig` endpoint (`/autoconfig' or the JMX equivalent) for
|
Actuator app look at the `autoconfig` endpoint (`/autoconfig' or the JMX equivalent) for
|
||||||
|
|
@ -80,7 +80,7 @@ The `SpringApplication` sends some special `ApplicationEvents` to the listeners
|
||||||
some before the context is created), and then registers the listeners for events published
|
some before the context is created), and then registers the listeners for events published
|
||||||
by the `ApplicationContext` as well. See
|
by the `ApplicationContext` as well. See
|
||||||
'<<spring-boot-features.adoc#boot-features-application-events-and-listeners>>' in the
|
'<<spring-boot-features.adoc#boot-features-application-events-and-listeners>>' in the
|
||||||
'`Spring Boot features`' section for a complete list.
|
'`Spring Boot features`' section for a complete list.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -88,7 +88,7 @@ by the `ApplicationContext` as well. See
|
||||||
=== Build an ApplicationContext hierarchy (adding a parent or root context)
|
=== Build an ApplicationContext hierarchy (adding a parent or root context)
|
||||||
You can use the `ApplicationBuilder` class to create parent/child `ApplicationContext`
|
You can use the `ApplicationBuilder` class to create parent/child `ApplicationContext`
|
||||||
hierarchies. See '<<spring-boot-features.adoc#boot-features-fluent-builder-api>>'
|
hierarchies. See '<<spring-boot-features.adoc#boot-features-fluent-builder-api>>'
|
||||||
in the '`Spring Boot features`' section for more information.
|
in the '`Spring Boot features`' section for more information.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -117,7 +117,7 @@ Application code that you want to run as your business logic can be implemented
|
||||||
=== Externalize the configuration of SpringApplication
|
=== Externalize the configuration of SpringApplication
|
||||||
A `SpringApplication` has bean properties (mainly setters) so you can use its Java API as
|
A `SpringApplication` has bean properties (mainly setters) so you can use its Java API as
|
||||||
you create the application to modify its behavior. Or you can externalize the
|
you create the application to modify its behavior. Or you can externalize the
|
||||||
configuration using properties in `spring.main.*`. E.g. in `application.properties` you
|
configuration using properties in `+spring.main.*+`. E.g. in `application.properties` you
|
||||||
might have.
|
might have.
|
||||||
|
|
||||||
[source,properties,indent=0,subs="verbatim,quotes,attributes"]
|
[source,properties,indent=0,subs="verbatim,quotes,attributes"]
|
||||||
|
|
@ -136,7 +136,7 @@ underscores (`_`) as well as dashes (`-`) in property names.
|
||||||
=== Change the location of external properties of an application
|
=== Change the location of external properties of an application
|
||||||
By default properties from different sources are added to the Spring `Environment` in a
|
By default properties from different sources are added to the Spring `Environment` in a
|
||||||
defined order (see '<<spring-boot-features.adoc#boot-features-external-config>>' in
|
defined order (see '<<spring-boot-features.adoc#boot-features-external-config>>' in
|
||||||
the '`Spring Boot features`' section for the exact order).
|
the '`Spring Boot features`' section for the exact order).
|
||||||
|
|
||||||
A nice way to augment and modify this is to add `@PropertySource` annotations to your
|
A nice way to augment and modify this is to add `@PropertySource` annotations to your
|
||||||
application sources. Classes passed to the `SpringApplication` static convenience
|
application sources. Classes passed to the `SpringApplication` static convenience
|
||||||
|
|
@ -156,7 +156,7 @@ You can also provide System properties (or environment variables) to change the
|
||||||
command line.
|
command line.
|
||||||
|
|
||||||
No matter what you set in the environment, Spring Boot will always load
|
No matter what you set in the environment, Spring Boot will always load
|
||||||
`application.properties` as described above. If YAML is used then files with the '`.yml`'
|
`application.properties` as described above. If YAML is used then files with the '`.yml`'
|
||||||
extension are also added to the list by default.
|
extension are also added to the list by default.
|
||||||
|
|
||||||
See {sc-spring-boot}/context/config/ConfigFileApplicationListener.{sc-ext}[`ConfigFileApplicationListener`]
|
See {sc-spring-boot}/context/config/ConfigFileApplicationListener.{sc-ext}[`ConfigFileApplicationListener`]
|
||||||
|
|
@ -165,7 +165,7 @@ for more detail.
|
||||||
|
|
||||||
|
|
||||||
[[howto-use-short-command-line-arguments]]
|
[[howto-use-short-command-line-arguments]]
|
||||||
=== Use '`short`' command line arguments
|
=== Use '`short`' command line arguments
|
||||||
Some people like to use (for example) `--port=9000` instead of `--server.port=9000` to
|
Some people like to use (for example) `--port=9000` instead of `--server.port=9000` to
|
||||||
set configuration properties on the command line. You can easily enable this by using
|
set configuration properties on the command line. You can easily enable this by using
|
||||||
placeholders in `application.properties`, e.g.
|
placeholders in `application.properties`, e.g.
|
||||||
|
|
@ -177,8 +177,8 @@ placeholders in `application.properties`, e.g.
|
||||||
|
|
||||||
TIP: If you are inheriting from the `spring-boot-starter-parent` POM, or if have enabled
|
TIP: If you are inheriting from the `spring-boot-starter-parent` POM, or if have enabled
|
||||||
maven filtering for the `application.properties` directly, you may want to change the
|
maven filtering for the `application.properties` directly, you may want to change the
|
||||||
default filter token from `${\*}` since it conflicts with those placeholders.
|
default filter token from `+${*}+` since it conflicts with those placeholders.
|
||||||
You can either use `@*@` (i.e. `@maven.token@` instead of `${maven.token}`) or you can
|
You can either use `+@*@+` (i.e. `@maven.token@` instead of `${maven.token}`) or you can
|
||||||
configure the `maven-resources-plugin` to use
|
configure the `maven-resources-plugin` to use
|
||||||
http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#delimiters[other delimiters].
|
http://maven.apache.org/plugins/maven-resources-plugin/resources-mojo.html#delimiters[other delimiters].
|
||||||
|
|
||||||
|
|
@ -223,7 +223,7 @@ The example YAML above corresponds to an `application.properties` file
|
||||||
----
|
----
|
||||||
|
|
||||||
See '<<spring-boot-features.adoc#boot-features-external-config-yaml>>' in
|
See '<<spring-boot-features.adoc#boot-features-external-config-yaml>>' in
|
||||||
the '`Spring Boot features`' section for more information
|
the '`Spring Boot features`' section for more information
|
||||||
about YAML.
|
about YAML.
|
||||||
|
|
||||||
[[howto-set-active-spring-profiles]]
|
[[howto-set-active-spring-profiles]]
|
||||||
|
|
@ -250,7 +250,7 @@ but not by the `SpringApplicationBuilder.profiles()` method. Thus the latter Jav
|
||||||
be used to augment the profiles without changing the defaults.
|
be used to augment the profiles without changing the defaults.
|
||||||
|
|
||||||
See '<<spring-boot-features.adoc#boot-features-profiles>>' in
|
See '<<spring-boot-features.adoc#boot-features-profiles>>' in
|
||||||
the '`Spring Boot features`' section for more information.
|
the '`Spring Boot features`' section for more information.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -285,8 +285,8 @@ Example:
|
||||||
port: 0
|
port: 0
|
||||||
----
|
----
|
||||||
|
|
||||||
In this example the default port is 9000, but if the Spring profile '`development`' is
|
In this example the default port is 9000, but if the Spring profile '`development`' is
|
||||||
active then the port is 9001, and if '`production`' is active then it is 0.
|
active then the port is 9001, and if '`production`' is active then it is 0.
|
||||||
|
|
||||||
The YAML documents are merged in the order they are encountered (so later values override
|
The YAML documents are merged in the order they are encountered (so later values override
|
||||||
earlier ones).
|
earlier ones).
|
||||||
|
|
@ -366,7 +366,7 @@ that and be sure that it has initialized is to add a `@Bean` of type
|
||||||
out of the event when it is published.
|
out of the event when it is published.
|
||||||
|
|
||||||
A really useful thing to do in is to use `@IntegrationTest` to set `server.port=0`
|
A really useful thing to do in is to use `@IntegrationTest` to set `server.port=0`
|
||||||
and then inject the actual ('`local`' ) port as a `@Value`. For example:
|
and then inject the actual ('`local`') port as a `@Value`. For example:
|
||||||
|
|
||||||
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
[source,java,indent=0,subs="verbatim,quotes,attributes"]
|
||||||
----
|
----
|
||||||
|
|
@ -391,7 +391,7 @@ and then inject the actual ('`local`' ) port as a `@Value`. For example:
|
||||||
|
|
||||||
[[howto-configure-ssl]]
|
[[howto-configure-ssl]]
|
||||||
=== Configure SSL
|
=== Configure SSL
|
||||||
SSL can be configured declaratively by setting the various `server.ssl.*` properties,
|
SSL can be configured declaratively by setting the various `+server.ssl.*+` properties,
|
||||||
typically in `application.properties` or `application.yml`. For example:
|
typically in `application.properties` or `application.yml`. For example:
|
||||||
|
|
||||||
[source,properties,indent=0,subs="verbatim,quotes,attributes"]
|
[source,properties,indent=0,subs="verbatim,quotes,attributes"]
|
||||||
|
|
@ -415,7 +415,7 @@ accessible on the filesystem, i.e. it cannot be read from within a jar file.
|
||||||
Generally you can follow the advice from
|
Generally you can follow the advice from
|
||||||
'<<howto-discover-build-in-options-for-external-properties>>' about
|
'<<howto-discover-build-in-options-for-external-properties>>' about
|
||||||
`@ConfigurationProperties` (`ServerProperties` is the main one here), but also look at
|
`@ConfigurationProperties` (`ServerProperties` is the main one here), but also look at
|
||||||
`EmbeddedServletContainerCustomizer` and various Tomcat specific `*Customizers` that you
|
`EmbeddedServletContainerCustomizer` and various Tomcat specific `+*Customizers+` that you
|
||||||
can add in one of those. The Tomcat APIs are quite rich so once you have access to the
|
can add in one of those. The Tomcat APIs are quite rich so once you have access to the
|
||||||
`TomcatEmbeddedServletContainerFactory` you can modify it in a number of ways. Or the
|
`TomcatEmbeddedServletContainerFactory` you can modify it in a number of ways. Or the
|
||||||
nuclear option is to add your own `TomcatEmbeddedServletContainerFactory`.
|
nuclear option is to add your own `TomcatEmbeddedServletContainerFactory`.
|
||||||
|
|
@ -835,45 +835,45 @@ added.
|
||||||
|
|
||||||
`WebMvcAutoConfiguration` adds the following `ViewResolvers` to your context:
|
`WebMvcAutoConfiguration` adds the following `ViewResolvers` to your context:
|
||||||
|
|
||||||
* An `InternalResourceViewResolver` with bean id '`defaultViewResolver`' . This one locates
|
* An `InternalResourceViewResolver` with bean id '`defaultViewResolver`'. This one locates
|
||||||
physical resources that can be rendered using the `DefaultServlet` (e.g. static
|
physical resources that can be rendered using the `DefaultServlet` (e.g. static
|
||||||
resources and JSP pages if you are using those). It applies a prefix and a suffix to the
|
resources and JSP pages if you are using those). It applies a prefix and a suffix to the
|
||||||
view name and then looks for a physical resource with that path in the servlet context
|
view name and then looks for a physical resource with that path in the servlet context
|
||||||
(defaults are both empty, but accessible for external configuration via
|
(defaults are both empty, but accessible for external configuration via
|
||||||
`spring.view.prefix` and `spring.view.suffix`). It can be overridden by providing a
|
`spring.view.prefix` and `spring.view.suffix`). It can be overridden by providing a
|
||||||
bean of the same type.
|
bean of the same type.
|
||||||
* A `BeanNameViewResolver` with id '`beanNameViewResolver`' . This is a useful member of the
|
* A `BeanNameViewResolver` with id '`beanNameViewResolver`'. This is a useful member of the
|
||||||
view resolver chain and will pick up any beans with the same name as the `View` being
|
view resolver chain and will pick up any beans with the same name as the `View` being
|
||||||
resolved. It shouldn't be necessary to override or replace it.
|
resolved. It shouldn't be necessary to override or replace it.
|
||||||
* A `ContentNegotiatingViewResolver` with id '`viewResolver`' is only added if there *are*
|
* A `ContentNegotiatingViewResolver` with id '`viewResolver`' is only added if there *are*
|
||||||
actually beans of type `View` present. This is a '`master`' resolver, delegating to all
|
actually beans of type `View` present. This is a '`master`' resolver, delegating to all
|
||||||
the others and attempting to find a match to the '`Accept`' HTTP header sent by the
|
the others and attempting to find a match to the '`Accept`' HTTP header sent by the
|
||||||
client. There is a useful
|
client. There is a useful
|
||||||
https://spring.io/blog/2013/06/03/content-negotiation-using-views[blog about `ContentNegotiatingViewResolver`]
|
https://spring.io/blog/2013/06/03/content-negotiation-using-views[blog about `ContentNegotiatingViewResolver`]
|
||||||
that you might like to study to learn more, and also look at the source code for detail.
|
that you might like to study to learn more, and also look at the source code for detail.
|
||||||
You can switch off the auto-configured
|
You can switch off the auto-configured
|
||||||
`ContentNegotiatingViewResolver` by defining a bean named '`viewResolver`' .
|
`ContentNegotiatingViewResolver` by defining a bean named '`viewResolver`'.
|
||||||
* If you use Thymeleaf you will also have a `ThymeleafViewResolver` with id
|
* If you use Thymeleaf you will also have a `ThymeleafViewResolver` with id
|
||||||
'`thymeleafViewResolver`' . It looks for resources by surrounding the view name with a
|
'`thymeleafViewResolver`'. It looks for resources by surrounding the view name with a
|
||||||
prefix and suffix (externalized to `spring.thymeleaf.prefix` and
|
prefix and suffix (externalized to `spring.thymeleaf.prefix` and
|
||||||
`spring.thymeleaf.suffix`, defaults '`classpath:/templates/`' and '`.html`'
|
`spring.thymeleaf.suffix`, defaults '`classpath:/templates/`' and '`.html`'
|
||||||
respectively). It can be overridden by providing a bean of the same name.
|
respectively). It can be overridden by providing a bean of the same name.
|
||||||
* If you use FreeMarker you will also have a `FreeMarkerViewResolver` with id
|
* If you use FreeMarker you will also have a `FreeMarkerViewResolver` with id
|
||||||
'`freeMarkerViewResolver`' . It looks for resources in a loader path (externalized to
|
'`freeMarkerViewResolver`'. It looks for resources in a loader path (externalized to
|
||||||
`spring.freemarker.templateLoaderPath`, default '`classpath:/templates/`' ) by
|
`spring.freemarker.templateLoaderPath`, default '`classpath:/templates/`') by
|
||||||
surrounding the view name with a prefix and suffix (externalized to `spring.freemarker.prefix`
|
surrounding the view name with a prefix and suffix (externalized to `spring.freemarker.prefix`
|
||||||
and `spring.freemarker.suffix`, with empty and '`.ftl`' defaults respectively). It can
|
and `spring.freemarker.suffix`, with empty and '`.ftl`' defaults respectively). It can
|
||||||
be overridden by providing a bean of the same name.
|
be overridden by providing a bean of the same name.
|
||||||
* If you use Groovy templates (actually if groovy-templates is on your classpath) you will
|
* If you use Groovy templates (actually if groovy-templates is on your classpath) you will
|
||||||
also have a `Groovy TemplateViewResolver` with id '`groovyTemplateViewResolver`' . It
|
also have a `Groovy TemplateViewResolver` with id '`groovyTemplateViewResolver`'. It
|
||||||
looks for resources in a loader path by surrounding the view name with a prefix and
|
looks for resources in a loader path by surrounding the view name with a prefix and
|
||||||
suffix (externalized to `spring.groovy.template.prefix` and
|
suffix (externalized to `spring.groovy.template.prefix` and
|
||||||
`spring.groovy.template.suffix`, defaults '`classpath:/templates/`' and '`.tpl`'
|
`spring.groovy.template.suffix`, defaults '`classpath:/templates/`' and '`.tpl`'
|
||||||
respectively). It can be overriden by providing a bean of the same name.
|
respectively). It can be overriden by providing a bean of the same name.
|
||||||
* If you use Velocity you will also have a `VelocityViewResolver` with id '`velocityViewResolver`' .
|
* If you use Velocity you will also have a `VelocityViewResolver` with id '`velocityViewResolver`'.
|
||||||
It looks for resources in a loader path (externalized to `spring.velocity.resourceLoaderPath`,
|
It looks for resources in a loader path (externalized to `spring.velocity.resourceLoaderPath`,
|
||||||
default '`classpath:/templates/`' ) by surrounding the view name with a prefix and suffix
|
default '`classpath:/templates/`') by surrounding the view name with a prefix and suffix
|
||||||
(externalized to `spring.velocity.prefix` and `spring.velocity.suffix`, with empty and '`.vm`'
|
(externalized to `spring.velocity.prefix` and `spring.velocity.suffix`, with empty and '`.vm`'
|
||||||
defaults respectively). It can be overridden by providing a bean of the same name.
|
defaults respectively). It can be overridden by providing a bean of the same name.
|
||||||
|
|
||||||
Check out {sc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{sc-ext}[`WebMvcAutoConfiguration`],
|
Check out {sc-spring-boot-autoconfigure}/web/WebMvcAutoConfiguration.{sc-ext}[`WebMvcAutoConfiguration`],
|
||||||
|
|
@ -1032,7 +1032,7 @@ your own, and bind it to a set of `Environment` properties e.g.
|
||||||
----
|
----
|
||||||
|
|
||||||
See '<<spring-boot-features.adoc#boot-features-configure-datasource>>' in the
|
See '<<spring-boot-features.adoc#boot-features-configure-datasource>>' in the
|
||||||
'`Spring Boot features`' section and the
|
'`Spring Boot features`' section and the
|
||||||
{sc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{sc-ext}[`DataSourceAutoConfiguration`]
|
{sc-spring-boot-autoconfigure}/jdbc/DataSourceAutoConfiguration.{sc-ext}[`DataSourceAutoConfiguration`]
|
||||||
class for more details.
|
class for more details.
|
||||||
|
|
||||||
|
|
@ -1117,7 +1117,7 @@ configuration properties. The most common options to set are:
|
||||||
(Because of relaxed data binding hyphens or underscores should work equally well as
|
(Because of relaxed data binding hyphens or underscores should work equally well as
|
||||||
property keys.) The `ddl-auto` setting is a special case in that it has different
|
property keys.) The `ddl-auto` setting is a special case in that it has different
|
||||||
defaults depending on whether you are using an embedded database (`create-drop`) or not
|
defaults depending on whether you are using an embedded database (`create-drop`) or not
|
||||||
(`none`). In addition all properties in `spring.jpa.properties.*` are passed through as
|
(`none`). In addition all properties in `+spring.jpa.properties.*+` are passed through as
|
||||||
normal JPA properties (with the prefix stripped) when the local `EntityManagerFactory` is
|
normal JPA properties (with the prefix stripped) when the local `EntityManagerFactory` is
|
||||||
created.
|
created.
|
||||||
|
|
||||||
|
|
@ -1130,7 +1130,7 @@ for more details.
|
||||||
[[howto-use-custom-entity-manager]]
|
[[howto-use-custom-entity-manager]]
|
||||||
=== Use a custom EntityManagerFactory
|
=== Use a custom EntityManagerFactory
|
||||||
To take full control of the configuration of the `EntityManagerFactory`, you need to add
|
To take full control of the configuration of the `EntityManagerFactory`, you need to add
|
||||||
a `@Bean` named '`entityManagerFactory`' . Spring Boot auto-configuration switches off its
|
a `@Bean` named '`entityManagerFactory`'. Spring Boot auto-configuration switches off its
|
||||||
entity manager based on the presence of a bean of that type.
|
entity manager based on the presence of a bean of that type.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1185,7 +1185,7 @@ might be able to use a JTA transaction manager spanning both.
|
||||||
Spring doesn't require the use of XML to configure the JPA provider, and Spring Boot
|
Spring doesn't require the use of XML to configure the JPA provider, and Spring Boot
|
||||||
assumes you want to take advantage of that feature. If you prefer to use `persistence.xml`
|
assumes you want to take advantage of that feature. If you prefer to use `persistence.xml`
|
||||||
then you need to define your own `@Bean` of type `LocalEntityManagerFactoryBean` (with
|
then you need to define your own `@Bean` of type `LocalEntityManagerFactoryBean` (with
|
||||||
id '`entityManagerFactory`' , and set the persistence unit name there.
|
id '`entityManagerFactory`', and set the persistence unit name there.
|
||||||
|
|
||||||
See
|
See
|
||||||
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java[`JpaBaseConfiguration`]
|
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/orm/jpa/JpaBaseConfiguration.java[`JpaBaseConfiguration`]
|
||||||
|
|
@ -1200,10 +1200,10 @@ Spring Data JPA and Spring Data Mongo can both create `Repository` implementatio
|
||||||
automatically. If they are both present on the classpath, you might have to do some extra
|
automatically. If they are both present on the classpath, you might have to do some extra
|
||||||
configuration to tell Spring Boot which one (or both) you want to create repositories for
|
configuration to tell Spring Boot which one (or both) you want to create repositories for
|
||||||
you. The most explicit way to do that is to use the standard Spring Data
|
you. The most explicit way to do that is to use the standard Spring Data
|
||||||
`@Enable*Repositories` and tell it the location of your `Repository` interfaces
|
`+@Enable*Repositories+` and tell it the location of your `Repository` interfaces
|
||||||
(where '`*`' is '`Jpa`' or '`Mongo`' or both).
|
(where '`*`' is '`Jpa`' or '`Mongo`' or both).
|
||||||
|
|
||||||
There are also flags `spring.data.*.repositories.enabled` that you can use to switch the
|
There are also flags `+spring.data.*.repositories.enabled+` that you can use to switch the
|
||||||
auto-configured repositories on and off in external configuration. This is useful for
|
auto-configured repositories on and off in external configuration. This is useful for
|
||||||
instance in case you want to switch off the Mongo repositories and still use the
|
instance in case you want to switch off the Mongo repositories and still use the
|
||||||
auto-configured `MongoTemplate`.
|
auto-configured `MongoTemplate`.
|
||||||
|
|
@ -1240,7 +1240,7 @@ values are `none`, `validate`, `update`, `create-drop`. Spring Boot chooses a de
|
||||||
value for you based on whether it thinks your database is embedded (default `create-drop`)
|
value for you based on whether it thinks your database is embedded (default `create-drop`)
|
||||||
or not (default `none`). An embedded database is detected by looking at the `Connection`
|
or not (default `none`). An embedded database is detected by looking at the `Connection`
|
||||||
type: `hsqldb`, `h2` and `derby` are embedded, the rest are not. Be careful when switching
|
type: `hsqldb`, `h2` and `derby` are embedded, the rest are not. Be careful when switching
|
||||||
from in-memory to a '`real`' database that you don't make assumptions about the existence of
|
from in-memory to a '`real`' database that you don't make assumptions about the existence of
|
||||||
the tables and data in the new platform. You either have to set `ddl-auto` explicitly, or
|
the tables and data in the new platform. You either have to set `ddl-auto` explicitly, or
|
||||||
use one of the other mechanisms to initialize the database.
|
use one of the other mechanisms to initialize the database.
|
||||||
|
|
||||||
|
|
@ -1266,7 +1266,7 @@ to start. The script locations can be changed by setting `spring.datasource.sche
|
||||||
|
|
||||||
To disable the failfast you can set `spring.datasource.continueOnError=true`. This can be
|
To disable the failfast you can set `spring.datasource.continueOnError=true`. This can be
|
||||||
useful once an application has matured and been deployed a few times, since the scripts
|
useful once an application has matured and been deployed a few times, since the scripts
|
||||||
can act as '`poor man's migrations`' -- inserts that fail mean that the data is already
|
can act as '`poor man's migrations`' -- inserts that fail mean that the data is already
|
||||||
there, so there would be no need to prevent the application from running, for instance.
|
there, so there would be no need to prevent the application from running, for instance.
|
||||||
|
|
||||||
If you want to use the `schema.sql` initialization in a JPA app (with
|
If you want to use the `schema.sql` initialization in a JPA app (with
|
||||||
|
|
@ -1303,7 +1303,7 @@ To automatically run Flyway database migrations on startup, add the
|
||||||
`org.flywaydb:flyway-core` to your classpath.
|
`org.flywaydb:flyway-core` to your classpath.
|
||||||
|
|
||||||
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with `<VERSION>` an
|
The migrations are scripts in the form `V<VERSION>__<NAME>.sql` (with `<VERSION>` an
|
||||||
underscore-separated version, e.g. '`1`' or '`2_1`' ). By default they live in a folder
|
underscore-separated version, e.g. '`1`' or '`2_1`'). By default they live in a folder
|
||||||
`classpath:db/migration` but you can modify that using `flyway.locations` (a list). See
|
`classpath:db/migration` but you can modify that using `flyway.locations` (a list). See
|
||||||
the Flyway class from flyway-core for details of available settings like schemas etc. In
|
the Flyway class from flyway-core for details of available settings like schemas etc. In
|
||||||
addition Spring Boot provides a small set of properties in
|
addition Spring Boot provides a small set of properties in
|
||||||
|
|
@ -1382,13 +1382,13 @@ For more detail look at the
|
||||||
{sc-spring-boot-actuator}/autoconfigure/ManagementServerProperties.{sc-ext}[`ManagementServerProperties`]
|
{sc-spring-boot-actuator}/autoconfigure/ManagementServerProperties.{sc-ext}[`ManagementServerProperties`]
|
||||||
source code and
|
source code and
|
||||||
'<<production-ready-features.adoc#production-ready-customizing-management-server-port>>'
|
'<<production-ready-features.adoc#production-ready-customizing-management-server-port>>'
|
||||||
in the '`Production-ready features`' section.
|
in the '`Production-ready features`' section.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[howto-customize-the-whitelabel-error-page]]
|
[[howto-customize-the-whitelabel-error-page]]
|
||||||
=== Customize the '`whitelabel`' error page
|
=== Customize the '`whitelabel`' error page
|
||||||
Spring Boot installs a '`whitelabel`' error page that you will see in browser client if
|
Spring Boot installs a '`whitelabel`' error page that you will see in browser client if
|
||||||
you encounter a server error (machine clients consuming JSON and other media types should
|
you encounter a server error (machine clients consuming JSON and other media types should
|
||||||
see a sensible response with the right error code). To switch it off you can set
|
see a sensible response with the right error code). To switch it off you can set
|
||||||
`error.whitelabel.enabled=false`, but normally in addition or alternatively to that you
|
`error.whitelabel.enabled=false`, but normally in addition or alternatively to that you
|
||||||
|
|
@ -1413,7 +1413,7 @@ how to register handlers in the servlet container.
|
||||||
=== Switch off the Spring Boot security configuration
|
=== Switch off the Spring Boot security configuration
|
||||||
If you define a `@Configuration` with `@EnableWebSecurity` anywhere in your application
|
If you define a `@Configuration` with `@EnableWebSecurity` anywhere in your application
|
||||||
it will switch off the default webapp security settings in Spring Boot. To tweak the
|
it will switch off the default webapp security settings in Spring Boot. To tweak the
|
||||||
defaults try setting properties in `security.*` (see
|
defaults try setting properties in `+security.*+` (see
|
||||||
{sc-spring-boot-autoconfigure}/security/SecurityProperties.{sc-ext}[`SecurityProperties`]
|
{sc-spring-boot-autoconfigure}/security/SecurityProperties.{sc-ext}[`SecurityProperties`]
|
||||||
for details of available settings) and `SECURITY` section of
|
for details of available settings) and `SECURITY` section of
|
||||||
<<common-application-properties-security,Common application properties>>.
|
<<common-application-properties-security,Common application properties>>.
|
||||||
|
|
@ -1596,7 +1596,7 @@ To configure IntelliJ correctly you can use the `idea` Gradle plugin:
|
||||||
NOTE: Intellij must be configured to use the same Java version as the command line Gradle
|
NOTE: Intellij must be configured to use the same Java version as the command line Gradle
|
||||||
task and `springloaded` *must* be included as a `buildscript` dependency.
|
task and `springloaded` *must* be included as a `buildscript` dependency.
|
||||||
|
|
||||||
You can also additionally enable '`Make Project Automatically`' inside Intellij to
|
You can also additionally enable '`Make Project Automatically`' inside Intellij to
|
||||||
automatically compile your code whenever a file is saved.
|
automatically compile your code whenever a file is saved.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1634,7 +1634,7 @@ third-party dependencies. Overriding versions may cause compatibility issues.
|
||||||
|
|
||||||
[[howto-create-an-executable-jar-with-maven]]
|
[[howto-create-an-executable-jar-with-maven]]
|
||||||
=== Create an executable JAR with Maven
|
=== Create an executable JAR with Maven
|
||||||
The `spring-boot-maven-plugin` can be used to create an executable '`fat`' JAR. If you
|
The `spring-boot-maven-plugin` can be used to create an executable '`fat`' JAR. If you
|
||||||
are using the `spring-boot-starter-parent` POM you can simply declare the plugin and
|
are using the `spring-boot-starter-parent` POM you can simply declare the plugin and
|
||||||
your jars will be repackaged:
|
your jars will be repackaged:
|
||||||
|
|
||||||
|
|
@ -1683,7 +1683,7 @@ If you want to use your project as a library jar for other projects to depend on
|
||||||
addition have an executable (e.g. demo) version of it, you will want to configure the
|
addition have an executable (e.g. demo) version of it, you will want to configure the
|
||||||
build in a slightly different way.
|
build in a slightly different way.
|
||||||
|
|
||||||
For Maven the normal JAR plugin and the Spring Boot plugin both have a '`classifier`'
|
For Maven the normal JAR plugin and the Spring Boot plugin both have a '`classifier`'
|
||||||
configuration that you can add to create an additional JAR. Example (using the Spring
|
configuration that you can add to create an additional JAR. Example (using the Spring
|
||||||
Boot Starter Parent to manage the plugin versions and other configuration defaults):
|
Boot Starter Parent to manage the plugin versions and other configuration defaults):
|
||||||
|
|
||||||
|
|
@ -1703,7 +1703,7 @@ Boot Starter Parent to manage the plugin versions and other configuration defaul
|
||||||
----
|
----
|
||||||
|
|
||||||
Two jars are produced, the default one, and an executable one using the Boot plugin with
|
Two jars are produced, the default one, and an executable one using the Boot plugin with
|
||||||
classifier '`exec`' .
|
classifier '`exec`'.
|
||||||
|
|
||||||
For Gradle users the steps are similar. Example:
|
For Gradle users the steps are similar. Example:
|
||||||
|
|
||||||
|
|
@ -1724,7 +1724,7 @@ jar support which assumes that the `jruby-complete.jar` is always directly avail
|
||||||
file in its own right.
|
file in its own right.
|
||||||
|
|
||||||
To deal with any problematic libraries, you can flag that specific nested jars should be
|
To deal with any problematic libraries, you can flag that specific nested jars should be
|
||||||
automatically unpacked to the '`temp folder`' when the executable jar first runs.
|
automatically unpacked to the '`temp folder`' when the executable jar first runs.
|
||||||
|
|
||||||
For example, to indicate that JRuby should be flagged for unpack using the Maven Plugin
|
For example, to indicate that JRuby should be flagged for unpack using the Maven Plugin
|
||||||
you would add the following configuration:
|
you would add the following configuration:
|
||||||
|
|
@ -1881,7 +1881,7 @@ archive as normal. To make it executable:
|
||||||
. Use the appropriate launcher as a `Main-Class`, e.g. `JarLauncher` for a jar file, and
|
. Use the appropriate launcher as a `Main-Class`, e.g. `JarLauncher` for a jar file, and
|
||||||
specify the other properties it needs as manifest entries, principally a `Start-Class`.
|
specify the other properties it needs as manifest entries, principally a `Start-Class`.
|
||||||
|
|
||||||
. Add the runtime dependencies in a nested '`lib`' directory (for a jar) and the
|
. Add the runtime dependencies in a nested '`lib`' directory (for a jar) and the
|
||||||
`provided` (embedded container) dependencies in a nested `lib-provided` directory.
|
`provided` (embedded container) dependencies in a nested `lib-provided` directory.
|
||||||
Remember *not* to compress the entries in the archive.
|
Remember *not* to compress the entries in the archive.
|
||||||
|
|
||||||
|
|
@ -1934,13 +1934,13 @@ after which you can run the application with
|
||||||
Use the `SpringBootServletInitializer` base class, which is picked up by Spring's
|
Use the `SpringBootServletInitializer` base class, which is picked up by Spring's
|
||||||
Servlet 3.0 support on deployment. Add an extension of that to your project and build a
|
Servlet 3.0 support on deployment. Add an extension of that to your project and build a
|
||||||
war file as normal. For more detail, see the
|
war file as normal. For more detail, see the
|
||||||
http://spring.io/guides/gs/convert-jar-to-war['`Converting a jar Project to a war`' ] guide
|
http://spring.io/guides/gs/convert-jar-to-war['`Converting a jar Project to a war`'] guide
|
||||||
on the spring.io website and the sample below.
|
on the spring.io website and the sample below.
|
||||||
|
|
||||||
The war file can also be executable if you use the Spring Boot build tools. In that case
|
The war file can also be executable if you use the Spring Boot build tools. In that case
|
||||||
the embedded container classes (to launch Tomcat for instance) have to be added to the
|
the embedded container classes (to launch Tomcat for instance) have to be added to the
|
||||||
war in a `lib-provided` directory. The tools will take care of that as long as the
|
war in a `lib-provided` directory. The tools will take care of that as long as the
|
||||||
dependencies are marked as '`provided`' in Maven or Gradle. Here's a Maven example
|
dependencies are marked as '`provided`' in Maven or Gradle. Here's a Maven example
|
||||||
{github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[in the Boot Samples].
|
{github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[in the Boot Samples].
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ Phillip Webb; Dave Syer; Josh Long; Stéphane Nicoll; Rob Winch; Andy Wilkinson;
|
||||||
:source-highlighter: prettify
|
:source-highlighter: prettify
|
||||||
:numbered:
|
:numbered:
|
||||||
:icons: font
|
:icons: font
|
||||||
|
:hide-uri-scheme:
|
||||||
:spring-boot-repo: snapshot
|
:spring-boot-repo: snapshot
|
||||||
:github-tag: master
|
:github-tag: master
|
||||||
:spring-boot-docs-version: current
|
:spring-boot-docs-version: current
|
||||||
|
|
|
||||||
|
|
@ -184,7 +184,7 @@ implementations. To configure the severity or order add the following to your ap
|
||||||
|
|
||||||
[[production-ready-application-info]]
|
[[production-ready-application-info]]
|
||||||
=== Custom application info information
|
=== Custom application info information
|
||||||
You can customize the data exposed by the `info` endpoint by setting `info.*` Spring
|
You can customize the data exposed by the `info` endpoint by setting `+info.*+` Spring
|
||||||
properties. All `Environment` properties under the info key will be automatically
|
properties. All `Environment` properties under the info key will be automatically
|
||||||
exposed. For example, you could add the following to your `application.properties`:
|
exposed. For example, you could add the following to your `application.properties`:
|
||||||
|
|
||||||
|
|
@ -234,7 +234,7 @@ You can then refer to your Maven '`project properties`' via placeholders, e.g.
|
||||||
info.build.version=${project.version}
|
info.build.version=${project.version}
|
||||||
----
|
----
|
||||||
|
|
||||||
NOTE: In the above example we used `project.*` to set some values to be used as
|
NOTE: In the above example we used `+project.*+` to set some values to be used as
|
||||||
fallbacks if the Maven resource filtering has not been switched on for some reason.
|
fallbacks if the Maven resource filtering has not been switched on for some reason.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -554,8 +554,8 @@ The remote shell can be extended in a number of interesting ways.
|
||||||
You can write additional shell commands using Groovy or Java (see the CRaSH documentation
|
You can write additional shell commands using Groovy or Java (see the CRaSH documentation
|
||||||
for details). By default Spring Boot will search for commands in the following locations:
|
for details). By default Spring Boot will search for commands in the following locations:
|
||||||
|
|
||||||
* `classpath*:/commands/**`
|
* `+classpath*:/commands/**+`
|
||||||
* `classpath*:/crash/commands/**`
|
* `+classpath*:/crash/commands/**+`
|
||||||
|
|
||||||
TIP: You can change the search path by settings a `shell.commandPathPatterns` property.
|
TIP: You can change the search path by settings a `shell.commandPathPatterns` property.
|
||||||
|
|
||||||
|
|
@ -660,7 +660,7 @@ Here we can see basic `memory`, `heap`, `class loading`, `processor` and `thread
|
||||||
information along with some HTTP metrics. In this instance the `root` ('`/`') and `/metrics`
|
information along with some HTTP metrics. In this instance the `root` ('`/`') and `/metrics`
|
||||||
URLs have returned `HTTP 200` responses `20` and `3` times respectively. It also appears
|
URLs have returned `HTTP 200` responses `20` and `3` times respectively. It also appears
|
||||||
that the `root` URL returned `HTTP 401` (unauthorized) `4` times. The double asterix (`star-star`)
|
that the `root` URL returned `HTTP 401` (unauthorized) `4` times. The double asterix (`star-star`)
|
||||||
comes from a request matched by Spring MVC as `/**` (normally a static resource).
|
comes from a request matched by Spring MVC as `+/**+` (normally a static resource).
|
||||||
|
|
||||||
The `gauge` shows the last response time for a request. So the last request to `root` took
|
The `gauge` shows the last response time for a request. So the last request to `root` took
|
||||||
`2ms` to respond and the last to `/metrics` took `3ms`.
|
`2ms` to respond and the last to `/metrics` took `3ms`.
|
||||||
|
|
@ -775,7 +775,7 @@ a dependency to the `com.codahale.metrics:metrics-core` library; you can also re
|
||||||
own `@Bean` instance if you need customizations.
|
own `@Bean` instance if you need customizations.
|
||||||
|
|
||||||
Users can create Coda Hale metrics by prefixing their metric names with the appropriate
|
Users can create Coda Hale metrics by prefixing their metric names with the appropriate
|
||||||
type (e.g. `histogram.\*`, `meter.\*`).
|
type (e.g. `+histogram.*+`, `+meter.*+`).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ sensible overriding of values, properties are considered in the the following or
|
||||||
. Java System properties (`System.getProperties()`).
|
. Java System properties (`System.getProperties()`).
|
||||||
. OS environment variables.
|
. OS environment variables.
|
||||||
. JNDI attributes from `java:comp/env`
|
. JNDI attributes from `java:comp/env`
|
||||||
. A `RandomValuePropertySource` that only has properties in `random.*`.
|
. A `RandomValuePropertySource` that only has properties in `+random.*+`.
|
||||||
. Application properties outside of your packaged jar (`application.properties`
|
. Application properties outside of your packaged jar (`application.properties`
|
||||||
including YAML and profile variants).
|
including YAML and profile variants).
|
||||||
. Application properties packaged inside your jar (`application.properties`
|
. Application properties packaged inside your jar (`application.properties`
|
||||||
|
|
@ -250,7 +250,7 @@ or test cases). It can produce integers, longs or strings, e.g.
|
||||||
my.number.in.range=${random.int[1024,65536]}
|
my.number.in.range=${random.int[1024,65536]}
|
||||||
----
|
----
|
||||||
|
|
||||||
The `random.int*` syntax is `OPEN value (,max) CLOSE` where the `OPEN,CLOSE` are any
|
The `+random.int*+` syntax is `OPEN value (,max) CLOSE` where the `OPEN,CLOSE` are any
|
||||||
character and `value,max` are integers. If `max` is provided then `value` is the minimum
|
character and `value,max` are integers. If `max` is provided then `value` is the minimum
|
||||||
value and `max` is the maximum (exclusive).
|
value and `max` is the maximum (exclusive).
|
||||||
|
|
||||||
|
|
@ -740,7 +740,7 @@ As with console output, `ERROR`, `WARN` and `INFO` level messages are logged by
|
||||||
=== Log Levels
|
=== Log Levels
|
||||||
|
|
||||||
All the supported logging systems can have the logger levels set in the Spring
|
All the supported logging systems can have the logger levels set in the Spring
|
||||||
`Environment` (so for example in `application.properties`) using '`logging.level.*=LEVEL`'
|
`Environment` (so for example in `application.properties`) using '`+logging.level.*=LEVEL+`'
|
||||||
where '`LEVEL`' is one of TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Example
|
where '`LEVEL`' is one of TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Example
|
||||||
`application.properties`:
|
`application.properties`:
|
||||||
|
|
||||||
|
|
@ -933,7 +933,7 @@ the default MVC configuration) because Spring will always be able to handle requ
|
||||||
through the `DispatcherServlet`.
|
through the `DispatcherServlet`.
|
||||||
|
|
||||||
In addition to the '`standard`' static resource locations above, a special case is made for
|
In addition to the '`standard`' static resource locations above, a special case is made for
|
||||||
http://www.webjars.org/[Webjars content]. Any resources with a path in `/webjars/**` will
|
http://www.webjars.org/[Webjars content]. Any resources with a path in `+/webjars/**+` will
|
||||||
be served from jar files if they are packaged in the Webjars format.
|
be served from jar files if they are packaged in the Webjars format.
|
||||||
|
|
||||||
TIP: Do not use the `src/main/webapp` folder if your application will be packaged as a
|
TIP: Do not use the `src/main/webapp` folder if your application will be packaged as a
|
||||||
|
|
@ -1101,7 +1101,7 @@ your `application.properties` during configuration.
|
||||||
|
|
||||||
By default, if the context contains only a single Servlet it will be mapped to `/`. In
|
By default, if the context contains only a single Servlet it will be mapped to `/`. In
|
||||||
the case of multiple Servlets beans the bean name will be used as a path prefix. Filters
|
the case of multiple Servlets beans the bean name will be used as a path prefix. Filters
|
||||||
will map to `/*`.
|
will map to `+/*+`.
|
||||||
|
|
||||||
If convention-based mapping is not flexible enough you can use the
|
If convention-based mapping is not flexible enough you can use the
|
||||||
`ServletRegistrationBean` and `FilterRegistrationBean` classes for complete control. You
|
`ServletRegistrationBean` and `FilterRegistrationBean` classes for complete control. You
|
||||||
|
|
@ -1242,8 +1242,8 @@ The basic features you get out of the box in a web application are:
|
||||||
|
|
||||||
* An `AuthenticationManager` bean with in-memory store and a single user (see
|
* An `AuthenticationManager` bean with in-memory store and a single user (see
|
||||||
`SecurityProperties.User` for the properties of the user).
|
`SecurityProperties.User` for the properties of the user).
|
||||||
* Ignored (unsecure) paths for common static resource locations (`/css/\*\*`, `/js/\*\*`,
|
* Ignored (unsecure) paths for common static resource locations (`+/css/**+`, `+/js/**+`,
|
||||||
`/images/\*\*` and `\*\*/favicon.ico`).
|
`+/images/**+` and `+**/favicon.ico+`).
|
||||||
* HTTP Basic security for all other endpoints.
|
* HTTP Basic security for all other endpoints.
|
||||||
* Security events published to Spring's `ApplicationEventPublisher` (successful and
|
* Security events published to Spring's `ApplicationEventPublisher` (successful and
|
||||||
unsuccessful authentication and access denied).
|
unsuccessful authentication and access denied).
|
||||||
|
|
@ -1251,7 +1251,7 @@ The basic features you get out of the box in a web application are:
|
||||||
on by default.
|
on by default.
|
||||||
|
|
||||||
All of the above can be switched on and off or modified using external properties
|
All of the above can be switched on and off or modified using external properties
|
||||||
(`security.*`). To override the access rules without changing any other autoconfigured
|
(`+security.*+`). To override the access rules without changing any other autoconfigured
|
||||||
features add a `@Bean` of type `WebConfigurerAdapter` with
|
features add a `@Bean` of type `WebConfigurerAdapter` with
|
||||||
`@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)`.
|
`@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)`.
|
||||||
|
|
||||||
|
|
@ -1262,7 +1262,7 @@ If the Actuator is also in use, you will find:
|
||||||
* The default user will have the `ADMIN` role as well as the `USER` role.
|
* The default user will have the `ADMIN` role as well as the `USER` role.
|
||||||
|
|
||||||
The Actuator security features can be modified using external properties
|
The Actuator security features can be modified using external properties
|
||||||
(`management.security.*`). To override the application access rules
|
(`+management.security.*+`). To override the application access rules
|
||||||
add a `@Bean` of type `WebConfigurerAdapter` and use
|
add a `@Bean` of type `WebConfigurerAdapter` and use
|
||||||
`@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)` if you _don't_ want to override
|
`@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)` if you _don't_ want to override
|
||||||
the actuator access rules, or `@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)`
|
the actuator access rules, or `@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)`
|
||||||
|
|
@ -1343,7 +1343,7 @@ NOTE: Additional connection pools can always be configured manually. If you defi
|
||||||
own `DataSource` bean, auto-configuration will not occur.
|
own `DataSource` bean, auto-configuration will not occur.
|
||||||
|
|
||||||
DataSource configuration is controlled by external configuration properties in
|
DataSource configuration is controlled by external configuration properties in
|
||||||
`spring.datasource.\*`. For example, you might declare the following section
|
`+spring.datasource.*+`. For example, you might declare the following section
|
||||||
in `application.properties`:
|
in `application.properties`:
|
||||||
|
|
||||||
[source,properties,indent=0]
|
[source,properties,indent=0]
|
||||||
|
|
@ -1534,7 +1534,7 @@ their http://projects.spring.io/spring-data-jpa/[reference documentation].
|
||||||
==== Creating and dropping JPA databases
|
==== Creating and dropping JPA databases
|
||||||
By default JPA database will be automatically created *only* if you use an embedded
|
By default JPA database will be automatically created *only* if you use an embedded
|
||||||
database (H2, HSQL or Derby). You can explicitly configure JPA settings using
|
database (H2, HSQL or Derby). You can explicitly configure JPA settings using
|
||||||
`spring.jpa.*` properties. For example, to create and drop tables you can add the
|
`+spring.jpa.*+` properties. For example, to create and drop tables you can add the
|
||||||
following to your `application.properties`.
|
following to your `application.properties`.
|
||||||
|
|
||||||
[indent=0]
|
[indent=0]
|
||||||
|
|
@ -1544,7 +1544,7 @@ following to your `application.properties`.
|
||||||
|
|
||||||
NOTE: Hibernate's own internal property name for this (if you happen to remember it
|
NOTE: Hibernate's own internal property name for this (if you happen to remember it
|
||||||
better) is `hibernate.hbm2ddl.auto`. You can set it, along with other Hibernate native
|
better) is `hibernate.hbm2ddl.auto`. You can set it, along with other Hibernate native
|
||||||
properties, using `spring.jpa.properties.*` (the prefix is stripped before adding them
|
properties, using `+spring.jpa.properties.*+` (the prefix is stripped before adding them
|
||||||
to the entity manager). Example:
|
to the entity manager). Example:
|
||||||
|
|
||||||
[indent=0]
|
[indent=0]
|
||||||
|
|
@ -1898,7 +1898,7 @@ to integrate with JMS. Adding `org.hornetq:hornetq-jms-server` to your applicati
|
||||||
you to use the embedded mode.
|
you to use the embedded mode.
|
||||||
|
|
||||||
HornetQ configuration is controlled by external configuration properties in
|
HornetQ configuration is controlled by external configuration properties in
|
||||||
`spring.hornetq.*`. For example, you might declare the following section in
|
`+spring.hornetq.*+`. For example, you might declare the following section in
|
||||||
`application.properties`:
|
`application.properties`:
|
||||||
|
|
||||||
[source,properties,indent=0]
|
[source,properties,indent=0]
|
||||||
|
|
@ -1931,7 +1931,7 @@ available on the classpath. If the broker is present, an embedded broker is star
|
||||||
configured automatically (as long as no broker URL is specified through configuration).
|
configured automatically (as long as no broker URL is specified through configuration).
|
||||||
|
|
||||||
ActiveMQ configuration is controlled by external configuration properties in
|
ActiveMQ configuration is controlled by external configuration properties in
|
||||||
`spring.activemq.*`. For example, you might declare the following section in
|
`+spring.activemq.*+`. For example, you might declare the following section in
|
||||||
`application.properties`:
|
`application.properties`:
|
||||||
|
|
||||||
[source,properties,indent=0]
|
[source,properties,indent=0]
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ running quickly and with a consistent, supported set of managed transitive depen
|
||||||
|
|
||||||
.What's in a name
|
.What's in a name
|
||||||
****
|
****
|
||||||
All starters follow a similar naming pattern; `spring-boot-starter-\*`, where `*` is
|
All starters follow a similar naming pattern; `+spring-boot-starter-*+`, where `+*+` is
|
||||||
a particular type of application. This naming structure is intended to help when you need
|
a particular type of application. This naming structure is intended to help when you need
|
||||||
to find a starter. The Maven integration in many IDEs allow you to search dependencies by
|
to find a starter. The Maven integration in many IDEs allow you to search dependencies by
|
||||||
name. For example, with the appropriate Eclipse or STS plugin installed, you can simply
|
name. For example, with the appropriate Eclipse or STS plugin installed, you can simply
|
||||||
|
|
@ -430,7 +430,7 @@ is also a good candidate as the primary `@Configuration`.
|
||||||
|
|
||||||
TIP: Many Spring configuration examples have been published on the Internet that use XML
|
TIP: Many Spring configuration examples have been published on the Internet that use XML
|
||||||
configuration. Always try to use the equivalent Java-base configuration if possible.
|
configuration. Always try to use the equivalent Java-base configuration if possible.
|
||||||
Searching for `enable*` annotations can be a good starting point.
|
Searching for `+enable*+` annotations can be a good starting point.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -222,18 +222,21 @@ public class LoggingApplicationListener implements SmartApplicationListener {
|
||||||
Map<String, Object> levels = new RelaxedPropertyResolver(environment)
|
Map<String, Object> levels = new RelaxedPropertyResolver(environment)
|
||||||
.getSubProperties("logging.level.");
|
.getSubProperties("logging.level.");
|
||||||
for (Entry<String, Object> entry : levels.entrySet()) {
|
for (Entry<String, Object> entry : levels.entrySet()) {
|
||||||
String name = entry.getKey();
|
setLogLevel(system, environment, entry.getKey(), entry.getValue().toString());
|
||||||
try {
|
}
|
||||||
LogLevel level = LogLevel.valueOf(environment.resolvePlaceholders(entry.getValue().toString()));
|
}
|
||||||
if (name.equalsIgnoreCase("root")) {
|
|
||||||
name = null;
|
private void setLogLevel(LoggingSystem system, Environment environment, String name,
|
||||||
}
|
String level) {
|
||||||
system.setLogLevel(name, level);
|
try {
|
||||||
}
|
if (name.equalsIgnoreCase("root")) {
|
||||||
catch (RuntimeException e) {
|
name = null;
|
||||||
this.logger.error("Cannot set level: " + entry.getValue() + " for '"
|
|
||||||
+ name + "'");
|
|
||||||
}
|
}
|
||||||
|
level = environment.resolvePlaceholders(level);
|
||||||
|
system.setLogLevel(name, LogLevel.valueOf(level));
|
||||||
|
}
|
||||||
|
catch (RuntimeException ex) {
|
||||||
|
this.logger.error("Cannot set level: " + level + " for '" + name + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue