Documentation
This commit is contained in:
parent
ec36efd50f
commit
9cf59050d3
|
|
@ -3,7 +3,6 @@ Spring Boot is released under the non-restrictive Apache 2.0 license. If you wou
|
||||||
to contribute something, or simply want to hack on the code this document should help
|
to contribute something, or simply want to hack on the code this document should help
|
||||||
you get started.
|
you get started.
|
||||||
|
|
||||||
|
|
||||||
## Working with the code
|
## Working with the code
|
||||||
If you don't have an IDE preference we would recommend that you use
|
If you don't have an IDE preference we would recommend that you use
|
||||||
[Spring Tools Suite](http://www.springsource.com/developer/sts) or
|
[Spring Tools Suite](http://www.springsource.com/developer/sts) or
|
||||||
|
|
@ -11,7 +10,6 @@ If you don't have an IDE preference we would recommend that you use
|
||||||
[m2eclipe](http://eclipse.org/m2e/) eclipse plugin for maven support. Other IDEs
|
[m2eclipe](http://eclipse.org/m2e/) eclipse plugin for maven support. Other IDEs
|
||||||
and tools should also work without issue.
|
and tools should also work without issue.
|
||||||
|
|
||||||
|
|
||||||
### Building from source
|
### Building from source
|
||||||
To build the source you will need to install
|
To build the source you will need to install
|
||||||
[Apache Maven](http://maven.apache.org/run-maven/index.html) v3.0 or above. The project
|
[Apache Maven](http://maven.apache.org/run-maven/index.html) v3.0 or above. The project
|
||||||
|
|
@ -24,7 +22,6 @@ to submit a pull request:
|
||||||
|
|
||||||
$ mvn clean install -DskipTests
|
$ mvn clean install -DskipTests
|
||||||
|
|
||||||
|
|
||||||
### Importing into eclipse with m2eclipse
|
### Importing into eclipse with m2eclipse
|
||||||
We recommend the [m2eclipe](http://eclipse.org/m2e/) eclipse plugin when working with
|
We recommend the [m2eclipe](http://eclipse.org/m2e/) eclipse plugin when working with
|
||||||
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
|
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
|
||||||
|
|
@ -47,7 +44,6 @@ With the requisite eclipse plugins installed you can select
|
||||||
`import existing maven projects` from the `file` menu to import the code. You will
|
`import existing maven projects` from the `file` menu to import the code. You will
|
||||||
need to import the root `spring-boot` pom and the `spring-boot-samples` pom separately.
|
need to import the root `spring-boot` pom and the `spring-boot-samples` pom separately.
|
||||||
|
|
||||||
|
|
||||||
### Importing into eclipse without m2eclipse
|
### Importing into eclipse without m2eclipse
|
||||||
If you prefer not to use m2eclipse you can generate eclipse project meta-data using the
|
If you prefer not to use m2eclipse you can generate eclipse project meta-data using the
|
||||||
following command:
|
following command:
|
||||||
|
|
@ -60,13 +56,10 @@ from the `file` menu.
|
||||||
### Importing into other IDEs
|
### Importing into other IDEs
|
||||||
Maven is well supported by most Java IDEs. Refer to you vendor documentation.
|
Maven is well supported by most Java IDEs. Refer to you vendor documentation.
|
||||||
|
|
||||||
|
|
||||||
### Integration tests
|
### Integration tests
|
||||||
|
The sample application are used as integration tests during the build (when you
|
||||||
The sample application are used as integration tests during the build
|
`mvn install`). Due to the fact that they make use of the `spring-boot-maven-plugin`
|
||||||
(when you `mvn install`). Due to the fact that they make use of the
|
they cannot be called directly, and so instead are launched via the
|
||||||
`spring-package-maven-plugin` they cannot be called directly, and so
|
`maven-invoker-plugin`. If you encounter build failures running the integration tests,
|
||||||
instead are launched via the `maven-invoker-plugin`. If you encounter
|
check the `build.log` file in the appropriate sample directory.
|
||||||
build failures running the integration tests, check the `build.log`
|
|
||||||
file in the appropriate sample directory.
|
|
||||||
|
|
||||||
274
README.md
274
README.md
|
|
@ -1,188 +1,190 @@
|
||||||
# Spring Boot
|
# Spring Boot
|
||||||
Spring Boot is "Spring for Snowboarders". If you are kewl, or just impatient, and you
|
Spring Boot makes it easy to create Spring-powered, production-grade applications and
|
||||||
want to use Spring, then this is the place to be. Spring Boot is the code-name for a
|
services with absolute minimum fuss. It takes an opinionated view of the Spring platform
|
||||||
group of related technologies, that will get you up and running with
|
so that new and existing users can quickly get to the bits they need.
|
||||||
Spring-powered, production-grade applications and services with absolute minimum fuss.
|
|
||||||
It takes an opinionated view of the Spring family so that new and existing users can
|
|
||||||
quickly get to the bits they need. Assumes limited knowledge of the Java development
|
|
||||||
ecosystem. Absolutely no code generation and no XML (unless you really want it).
|
|
||||||
|
|
||||||
The goals are:
|
You can use Spring Boot to create stand-alone Java applications that can be started using
|
||||||
|
`java -jar` or more traditional WAR deployments. We also provide a command line tool
|
||||||
|
that runs spring scripts.
|
||||||
|
|
||||||
* Radically faster and widely accessible getting started experience for Spring
|
Our primary goals are:
|
||||||
development
|
|
||||||
|
* Provide a radically faster and widely accessible getting started experience for all
|
||||||
|
Spring development
|
||||||
* Be opinionated out of the box, but get out of the way quickly as requirements start to
|
* Be opinionated out of the box, but get out of the way quickly as requirements start to
|
||||||
diverge from the defaults
|
diverge from the defaults
|
||||||
* Provide a range of non-functional features that are common to large classes of projects
|
* Provide a range of non-functional features that are common to large classes of projects
|
||||||
(e.g. embedded servers, security, metrics, health checks, externalized configuration)
|
(e.g. embedded servers, security, metrics, health checks, externalized configuration)
|
||||||
* First class support for REST-ful services, modern web applications, batch jobs, and
|
* Absolutely no code generation and no requirement for XML configuration
|
||||||
enterprise integration
|
|
||||||
* Applications that adapt their behavior or configuration to their environment
|
|
||||||
* Optionally use Groovy features like DSLs and AST transformations to accelerate the
|
|
||||||
implementation of basic business requirements
|
|
||||||
|
|
||||||
|
## Quick Start Script Example
|
||||||
|
The Spring Zero command line tool uses [Groovy](http://groovy.codehaus.org/) underneath
|
||||||
|
so that we can present simple Spring snippets that can 'just run', for example:
|
||||||
|
|
||||||
## Installing
|
```groovy
|
||||||
You need to [build from source](#building-from-source) for now, but when it's done
|
@Controller
|
||||||
instructions will look like this:
|
class ThisWillActuallyRun {
|
||||||
|
|
||||||
1) Get Java. Download and install the Java SDK from [www.java.com](http://www.java.com)
|
@RequestMapping("/")
|
||||||
|
@ResponseBody
|
||||||
2) Get Spring
|
String home() {
|
||||||
|
return "Hello World!"
|
||||||
$ curl -s initializr.cfapps.io/installer | bash
|
|
||||||
|
|
||||||
or use the [Windows installer](#installing)
|
|
||||||
|
|
||||||
|
|
||||||
## Building from source
|
|
||||||
Spring Zero can be [built with maven](http://maven.apache.org/run-maven/index.html) v3.0
|
|
||||||
or above.
|
|
||||||
|
|
||||||
$ mvn clean install
|
|
||||||
|
|
||||||
An `alias` can be used for the Spring Boot command line tool:
|
|
||||||
|
|
||||||
$ alias spring="java -jar ~/.m2/repository/org/springframework/boot/spring-cli/0.5.0.BUILD-SNAPSHOT/spring-cli-0.5.0.BUILD-SNAPSHOT.jar"
|
|
||||||
|
|
||||||
_Also see [docs/CONTRIBUTING](docs/CONTRIBUTING.md) if you want to submit pull requests._
|
|
||||||
|
|
||||||
|
|
||||||
## Quick Start Example
|
|
||||||
The Spring Zero command line tool uses Groovy underneath so that we can present simple
|
|
||||||
snippets that can just run, for example:
|
|
||||||
|
|
||||||
$ cat > app.groovy
|
|
||||||
@Controller
|
|
||||||
class ThisWillActuallyRun {
|
|
||||||
@RequestMapping("/")
|
|
||||||
@ResponseBody
|
|
||||||
String home() {
|
|
||||||
return "Hello World!"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
<ctrl-d>
|
|
||||||
$ spring run app.groovy
|
}
|
||||||
$ curl localhost:8080
|
```
|
||||||
Hello World!
|
|
||||||
|
|
||||||
|
```
|
||||||
|
$ spring run app.groovy
|
||||||
|
$ curl localhost:8080
|
||||||
|
Hello World!
|
||||||
|
```
|
||||||
|
|
||||||
|
_See [below](#installing-the-cli) for command line tool installation instructions._
|
||||||
|
|
||||||
|
## Quick Start Java Example
|
||||||
If you don't want to use the command line tool, or you would rather work using Java and
|
If you don't want to use the command line tool, or you would rather work using Java and
|
||||||
an IDE you can. Just add a `main()` method that calls `SpringApplication` and
|
an IDE you can. Just add a `main()` method that calls `SpringApplication` and
|
||||||
add `@EnableAutoConfiguration`:
|
add `@EnableAutoConfiguration`:
|
||||||
|
|
||||||
import org.springframework.stereotype.*;
|
```java
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.boot.*;
|
||||||
import org.springframework.boot.context.annotation.*;
|
import org.springframework.boot.autoconfiguration.*;
|
||||||
|
import org.springframework.stereotype.*;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@Controller
|
@Controller
|
||||||
@EnableAutoConfiguration
|
@EnableAutoConfiguration
|
||||||
public class SampleController {
|
public class SampleController {
|
||||||
|
|
||||||
@RequestMapping("/")
|
|
||||||
@ResponseBody
|
|
||||||
String home() {
|
|
||||||
return "Hello World!"
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
|
||||||
SpringApplication.run(SampleController.class, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@RequestMapping("/")
|
||||||
|
@ResponseBody
|
||||||
|
String home() {
|
||||||
|
return "Hello World!"
|
||||||
}
|
}
|
||||||
|
|
||||||
_NOTE: the above example assumes your build system has imported the `spring-starter-web`
|
public static void main(String[] args) throws Exception {
|
||||||
maven pom._
|
SpringApplication.run(SampleController.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Spring Boot Components
|
_NOTE: the above example assumes your build system has imported the `spring-starter-web` maven pom._
|
||||||
There are a number of components in Boot. Here are the important ones:
|
|
||||||
|
|
||||||
### The Spring CLI
|
## Installing the CLI
|
||||||
The 'spring' command line application compiles and runs Groovy source, making it super
|
You need [Java SDK v1.6](http://www.java.com) or higher to run the command line tool. You
|
||||||
easy to write the absolute minimum of code to get an application running. Spring CLI
|
should check your current Java installation before you begin:
|
||||||
can also watch files, automatically recompiling and restarting when they change.
|
|
||||||
|
|
||||||
*See [spring-cli/README](spring-cli/README.md).*
|
$ java -version
|
||||||
|
|
||||||
|
Complete installation instructions TBD. For now you can
|
||||||
|
[build from source](#building-from-source).
|
||||||
|
|
||||||
|
## Building from source
|
||||||
|
Spring Boot can be [built with maven](http://maven.apache.org/run-maven/index.html) v3.0
|
||||||
|
or above.
|
||||||
|
|
||||||
### Spring Boot
|
$ mvn clean install
|
||||||
The main library providing features that support the other parts of Spring Boot.
|
|
||||||
Features include:
|
|
||||||
|
|
||||||
* `SpringApplication` - a class with static convenience methods that make it really easy
|
You can use an `alias` for the Spring Boot command line tool:
|
||||||
to write a standalone Spring Application. Its sole job is to create and refresh an
|
|
||||||
appropriate Spring `ApplicationContext`.
|
$ alias spring="java -jar ~/.m2/repository/org/springframework/boot/spring-cli/0.5.0.BUILD-SNAPSHOT/spring-cli-0.5.0.BUILD-SNAPSHOT.jar"
|
||||||
|
|
||||||
|
_Also see [CONTRIBUTING.md] if you wish to submit pull requests._
|
||||||
|
|
||||||
|
## Spring Boot Modules
|
||||||
|
There are a number of modules in Spring Boot. Here are the important ones:
|
||||||
|
|
||||||
|
### spring-boot
|
||||||
|
The main library providing features that support the other parts of Spring Boot,
|
||||||
|
these include:
|
||||||
|
|
||||||
|
* The `SpringApplication` class, providing static convenience methods that make it easy
|
||||||
|
to write a stand-alone Spring Application. Its sole job is to create and refresh an
|
||||||
|
appropriate Spring `ApplicationContext`
|
||||||
* Embedded web applications with a choice of container (Tomcat or Jetty for now)
|
* Embedded web applications with a choice of container (Tomcat or Jetty for now)
|
||||||
* First class externalized configuration support
|
* First class externalized configuration support
|
||||||
|
* Convenience `ApplicationContext` initializers, including support for sensible logging
|
||||||
|
defaults.
|
||||||
|
|
||||||
_See [spring-boot/README](spring-boot/README.md)._
|
_See [spring-boot/README.md](spring-boot/README.md)._
|
||||||
|
|
||||||
|
|
||||||
### Spring Autoconfigure
|
### spring-boot-autoconfigure
|
||||||
Spring Zero can configure large parts of common applications based on detecting the
|
Spring Boot can configure large parts of common applications based on the content
|
||||||
content of the classpath and any existing application context. A single
|
of their classpath. A single `@EnableAutoConfiguration` annotation triggers
|
||||||
`@EnableAutoConfigure` annotation triggers auto-configuration of the Spring context.
|
auto-configuration of the Spring context.
|
||||||
|
|
||||||
Auto-configuration attempts to guess what beans a user might want based on their
|
Auto-configuration attempts to deduce which beans a user might need. For example, If
|
||||||
classpath. For example, If a 'HSQLDB' is on the classpath the user probably wants an
|
'HSQLDB' is on the classpath, and the user has not configured any database connections,
|
||||||
in-memory database to be defined. Auto-configuration will back away as the user starts
|
then they probably want an in-memory database to be defined. Auto-configuration will
|
||||||
to define their own beans.
|
always back away as the user starts to define their own beans.
|
||||||
|
|
||||||
_See [spring-autoconfigure/README](spring-autoconfigure/README.md)._
|
_See [spring-boot-autoconfigure/README.md](spring-boot-autoconfigure/README.md)._
|
||||||
|
|
||||||
|
|
||||||
### Spring Actuator
|
### spring-boot-starters
|
||||||
Spring Actuator uses auto-configuration to decorate your application with features that
|
Starters are a set of convenient dependency descriptors that you can include in
|
||||||
make it instantly deployable and supportable in production. For instance if you are
|
|
||||||
writing a JSON web service then it will provide a server, security, logging, externalized
|
|
||||||
configuration, management endpoints, an audit abstraction, and more. If you want to
|
|
||||||
switch off the built in features, or extend or replace them, it makes that really easy as well.
|
|
||||||
|
|
||||||
_See [spring-actuator/README](spring-actuator/README.md)._
|
|
||||||
|
|
||||||
|
|
||||||
### Spring Starters
|
|
||||||
Spring Starters are a set of convenient dependency descriptors that you can include in
|
|
||||||
your application. You get a one-stop-shop for all the Spring and related technology
|
your application. You get a one-stop-shop for all the Spring and related technology
|
||||||
that you need without having to hunt through sample code and copy paste loads of
|
that you need without having to hunt through sample code and copy paste loads of
|
||||||
dependency descriptors. For example, if you want to get started using Spring and JPA for
|
dependency descriptors. For example, if you want to get started using Spring and JPA for
|
||||||
database access just include one dependency in your project, and you are good to go.
|
database access just include the `spring-boot-starter-data-jpa` dependency in your
|
||||||
|
project, and you are good to go.
|
||||||
|
|
||||||
_See [spring-starters/README](spring-starters/README.md)._
|
_See [spring-boot-starters/README.md](spring-boot-starters/README.md)._
|
||||||
|
|
||||||
|
|
||||||
### Packaging
|
### spring-boot-cli
|
||||||
The [spring-launcher](spring-launcher/) and
|
The Spring command line application compiles and runs Groovy source, making it super
|
||||||
[spring-maven-packaging-plugin](spring-maven-packaging-plugin) provide a convenient way
|
easy to write the absolute minimum of code to get an application running. Spring CLI
|
||||||
to package you application for release. Applications can be released as a single jar
|
can also watch files, automatically recompiling and restarting when they change.
|
||||||
file that can simply be launched using `java -jar`.
|
|
||||||
|
|
||||||
_See [spring-launcher/README](spring-launcher/README.md) &
|
*See [spring-boot-cli/README.md](spring-boot-cli/README.md).*
|
||||||
[spring-package-maven-plugin/README](spring-package-maven-plugin/README.md)._
|
|
||||||
|
|
||||||
|
### spring-boot-ops
|
||||||
|
Ops uses auto-configuration to decorate your application with features that
|
||||||
|
make it instantly deployable and supportable in production. For instance if you are
|
||||||
|
writing a JSON web service then it will provide a server, security, logging, externalized
|
||||||
|
configuration, management endpoints, an audit abstraction, and more. If you want to
|
||||||
|
switch off the built in features, or extend or replace them, it makes that really easy as
|
||||||
|
well.
|
||||||
|
|
||||||
|
_See [spring-boot-ops/README.md](spring-boot-ops/README.md)._
|
||||||
|
|
||||||
|
|
||||||
|
### spring-boot-loader
|
||||||
|
Loader provides the secret sauce that allows you to build a single jar file that can be
|
||||||
|
launched using `java -jar`. Generally you will not need to use `spring-boot-loader`
|
||||||
|
directly but instead work with the
|
||||||
|
[Gradle](spring-boot-gradle-plugin/README.md) or
|
||||||
|
[Maven](spring-boot-maven-plugin/README.md) plugin.
|
||||||
|
|
||||||
|
_See [spring-boot-loader/README.md](spring-boot-loader/README.md)._
|
||||||
|
|
||||||
|
|
||||||
## Samples
|
## Samples
|
||||||
Groovy samples for use with the command line application are available in
|
Groovy samples for use with the command line application are available in
|
||||||
[spring-cli/samples](spring-cli/samples/#). To run the CLI samples type
|
[spring-boot-cli/samples](spring-boot-cli/samples/#). To run the CLI samples type
|
||||||
`spring run <sample>.groovy` from samples directory.
|
`spring run <sample>.groovy` from samples directory.
|
||||||
|
|
||||||
Java samples are available in [spring-boot-sample](spring-boot-samples/#) and should
|
Java samples are available in [spring-boot-samples](spring-boot-samples/#) and should
|
||||||
be build with maven and run use `java -jar target/<sample>.jar`. The following java
|
be build with maven and run use `java -jar target/<sample>.jar`. The following java
|
||||||
samples are provided:
|
samples are provided:
|
||||||
|
|
||||||
* spring-boot-sample-simple - A simple command line application
|
* [spring-boot-sample-simple](spring-boot-sample-simple) - A simple command line application
|
||||||
* spring-boot-sample-tomcat - Embedded Tomcat
|
* [spring-boot-sample-tomcat](spring-boot-sample-tomcat) - Embedded Tomcat
|
||||||
* spring-boot-sample-jetty - Embedded Jetty
|
* [spring-boot-sample-jetty](spring-boot-sample-jetty) - Embedded Jetty
|
||||||
* spring-boot-sample-actuator - Simple REST service with production features
|
* [spring-boot-sample-ops](spring-boot-sample-ops) - Simple REST service with production features
|
||||||
* spring-boot-sample-actuator-ui - A web UI example with production features
|
* [spring-boot-sample-ops-ui](spring-boot-sample-ops-ui) - A web UI example with production features
|
||||||
* spring-boot-sample-web-ui - A thymeleaf web application
|
* [spring-boot-sample-web-ui](spring-boot-sample-web-ui) - A thymeleaf web application
|
||||||
* spring-sample-batch - Define and run a Batch job in a few lines of code
|
* [spring-boot-sample-web-static](spring-boot-sample-web-static) - A web application service static files
|
||||||
* spring-sample-data-jpa - Spring Data JPA + Hibernate + HSQLDB
|
* [spring-sample-batch](spring-sample-batch) - Define and run a Batch job in a few lines of code
|
||||||
* spring-boot-sample-integration - A spring integration application
|
* [spring-sample-data-jpa](spring-sample-data-jpa) - Spring Data JPA + Hibernate + HSQLDB
|
||||||
* spring-boot-sample-profile - example showing Spring's `@profile` support
|
* [spring-boot-sample-integration](spring-boot-sample-integration) - A spring integration application
|
||||||
* spring-boot-sample-traditional - shows Spring Zero with more traditional WAR packaging
|
* [spring-boot-sample-profile](spring-boot-sample-profile) - example showing Spring's `@profile` support
|
||||||
|
* [spring-boot-sample-traditional](spring-boot-sample-traditional) - shows more traditional WAR packaging
|
||||||
(but also executable using `java -jar`)
|
(but also executable using `java -jar`)
|
||||||
* spring-boot-sample-xml - Example show how Spring Boot can be mixed with traditional XML
|
* [spring-boot-sample-xml](spring-boot-sample-xml) - Example show how Spring Boot can be mixed with traditional
|
||||||
configuration
|
XML configuration (we generally recommend using Java `@Configuration` whenever possible)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,153 @@
|
||||||
|
# Docs without a home as yet :(
|
||||||
|
|
||||||
|
|
||||||
|
|Feature |Implementation |Notes |
|
||||||
|
|---|---|---|
|
||||||
|
|Launch Spring from Java main |SpringApplication | Plenty of convenience methods and customization opportunities |
|
||||||
|
|Server |Tomcat or Jetty | |
|
||||||
|
|Logging |Logback, Log4j or JDK | Sensible defaults configurations. |
|
||||||
|
|Externalized configuration | Properties or YAML | Support for Spring profiles. Bind automatically to @Bean. |
|
||||||
|
|
||||||
|
For a quick introduction and to get started quickly with a new
|
||||||
|
project, carry on reading. For more in depth coverage of the features
|
||||||
|
of Spring Boot.Strap, go to the [Feature Guide](docs/Features.md).
|
||||||
|
|
||||||
|
# Getting Started
|
||||||
|
|
||||||
|
You will need Java (6 at least) and a build tool (Maven is what we use
|
||||||
|
below, but you are more than welcome to use gradle). These can be
|
||||||
|
downloaded or installed easily in most operating systems. For Ubuntu:
|
||||||
|
|
||||||
|
$ sudo apt-get install openjdk-6-jdk maven
|
||||||
|
|
||||||
|
<!--FIXME: short instructions for Mac.-->
|
||||||
|
|
||||||
|
## A basic project
|
||||||
|
|
||||||
|
If you are using Maven create a really simple `pom.xml` with 2 dependencies:
|
||||||
|
|
||||||
|
`pom.xml`
|
||||||
|
|
||||||
|
```
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.mycompany</groupId>
|
||||||
|
<artifactId>myproject</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<properties>
|
||||||
|
<start-class>com.mycompany.Application</start-class>
|
||||||
|
</properties>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-starter-parent</artifactId>
|
||||||
|
<version>{{project.version}}</version>
|
||||||
|
</parent>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-package-maven-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
|
```
|
||||||
|
|
||||||
|
If you like Gradle, that's fine, and you will know what to do with
|
||||||
|
those dependencies. The one dependency adds Spring Boot.Config auto
|
||||||
|
configuration and the Tomcat container to your application. If you
|
||||||
|
prefer Jetty you can just add the embedded Jetty jars to your
|
||||||
|
classpath instead of Tomcat.
|
||||||
|
|
||||||
|
Now write a simple main class
|
||||||
|
|
||||||
|
`Application.java`
|
||||||
|
```
|
||||||
|
package com.mycompany;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
public class Application {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(Application.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You should be able to run it already:
|
||||||
|
|
||||||
|
$ mvn package
|
||||||
|
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar
|
||||||
|
|
||||||
|
. ____ _ __ _ _
|
||||||
|
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
|
||||||
|
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
|
||||||
|
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
|
||||||
|
' |____| .__|_| |_|_| |_\__, | / / / /
|
||||||
|
=========|_|==============|___/=/_/_/_/
|
||||||
|
Spring Bootstrap
|
||||||
|
|
||||||
|
2013-07-19 17:13:51.673 INFO 18937 --- [ main] com.mycompany.Application ...
|
||||||
|
... <logs showing application starting up>
|
||||||
|
|
||||||
|
It doesn't do anything yet, but that's because all we did is start a
|
||||||
|
Spring `ApplicationContext` and let it close when the JVM stopped.
|
||||||
|
|
||||||
|
To make it do something a little bit more interesting you could bind
|
||||||
|
some command line arguments to the application:
|
||||||
|
|
||||||
|
`Application.java`
|
||||||
|
```
|
||||||
|
@Configuration
|
||||||
|
@ConfigurationProperties
|
||||||
|
@EnableConfigurationProperties
|
||||||
|
public class Application {
|
||||||
|
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run(String... args) throws Exception {
|
||||||
|
System.err.println(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(Application.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String message) {
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The `@ConfigurationProperties` annotation binds the Spring
|
||||||
|
`Environment` (including command line arguments) to the `Application`
|
||||||
|
instance, and `CommandLineRunner` is a marker interface for anything
|
||||||
|
you want to be executed after the content is started. So run it
|
||||||
|
again and you will see the message:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mvn package
|
||||||
|
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar --message="Hello World"
|
||||||
|
...
|
||||||
|
Hello World
|
||||||
|
```
|
||||||
|
|
||||||
|
To add more features, add some `@Bean` definitions to your
|
||||||
|
`Application` class, and read more in the
|
||||||
|
[Feature Guide](docs/Features.md).
|
||||||
|
|
@ -1,156 +1,104 @@
|
||||||
# Spring Boot.Strap
|
# Spring Boot
|
||||||
|
Spring Boot provides the central features for the other modules in the project. It is
|
||||||
|
relatively unopinionated and it has minimal dependencies which makes it usable as a
|
||||||
|
stand-alone library for anyone whose tastes diverge from ours.
|
||||||
|
|
||||||
Spring Boot.Strap provides features for the other parts of Spring
|
## SpringApplication
|
||||||
Boot. It is relatively unopinionated and therefore usable as a
|
The `SpringApplication` class provides a convenient way to bootstrap a Spring application
|
||||||
standalone library for anyone whose tastes diverge from ours.
|
that will be started from a `main()` method. In many situations you can just delegate
|
||||||
|
to the static `SpringApplication.run` method:
|
||||||
|Feature |Implementation |Notes |
|
|
||||||
|---|---|---|
|
|
||||||
|Launch Spring from Java main |SpringApplication | Plenty of convenience methods and customization opportunities |
|
|
||||||
|Server |Tomcat or Jetty | |
|
|
||||||
|Logging |Logback, Log4j or JDK | Sensible defaults configurations. |
|
|
||||||
|Externalized configuration | Properties or YAML | Support for Spring profiles. Bind automatically to @Bean. |
|
|
||||||
|
|
||||||
For a quick introduction and to get started quickly with a new
|
|
||||||
project, carry on reading. For more in depth coverage of the features
|
|
||||||
of Spring Boot.Strap, go to the [Feature Guide](docs/Features.md).
|
|
||||||
|
|
||||||
# Getting Started
|
|
||||||
|
|
||||||
You will need Java (6 at least) and a build tool (Maven is what we use
|
|
||||||
below, but you are more than welcome to use gradle). These can be
|
|
||||||
downloaded or installed easily in most operating systems. For Ubuntu:
|
|
||||||
|
|
||||||
$ sudo apt-get install openjdk-6-jdk maven
|
|
||||||
|
|
||||||
<!--FIXME: short instructions for Mac.-->
|
|
||||||
|
|
||||||
## A basic project
|
|
||||||
|
|
||||||
If you are using Maven create a really simple `pom.xml` with 2 dependencies:
|
|
||||||
|
|
||||||
`pom.xml`
|
|
||||||
|
|
||||||
```
|
|
||||||
<project>
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
<groupId>com.mycompany</groupId>
|
|
||||||
<artifactId>myproject</artifactId>
|
|
||||||
<version>1.0.0-SNAPSHOT</version>
|
|
||||||
<packaging>jar</packaging>
|
|
||||||
<properties>
|
|
||||||
<start-class>com.mycompany.Application</start-class>
|
|
||||||
</properties>
|
|
||||||
<parent>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-starter-parent</artifactId>
|
|
||||||
<version>{{project.version}}</version>
|
|
||||||
</parent>
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-starter</artifactId>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-package-maven-plugin</artifactId>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
</project>
|
|
||||||
```
|
|
||||||
|
|
||||||
If you like Gradle, that's fine, and you will know what to do with
|
|
||||||
those dependencies. The one dependency adds Spring Boot.Config auto
|
|
||||||
configuration and the Tomcat container to your application. If you
|
|
||||||
prefer Jetty you can just add the embedded Jetty jars to your
|
|
||||||
classpath instead of Tomcat.
|
|
||||||
|
|
||||||
Now write a simple main class
|
|
||||||
|
|
||||||
`Application.java`
|
|
||||||
```
|
|
||||||
package com.mycompany;
|
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
public class Application {
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
SpringApplication.run(Application.class, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
```java
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpringApplication.run(SpringConfiguration.class, args);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
You should be able to run it already:
|
When you application starts you should see something similar to the following:
|
||||||
|
|
||||||
$ mvn package
|
|
||||||
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar
|
|
||||||
|
|
||||||
. ____ _ __ _ _
|
|
||||||
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
|
|
||||||
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
|
|
||||||
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
|
|
||||||
' |____| .__|_| |_|_| |_\__, | / / / /
|
|
||||||
=========|_|==============|___/=/_/_/_/
|
|
||||||
Spring Bootstrap
|
|
||||||
|
|
||||||
2013-07-19 17:13:51.673 INFO 18937 --- [ main] com.mycompany.Application ...
|
|
||||||
... <logs showing application starting up>
|
|
||||||
|
|
||||||
It doesn't do anything yet, but that's because all we did is start a
|
|
||||||
Spring `ApplicationContext` and let it close when the JVM stopped.
|
|
||||||
|
|
||||||
To make it do something a little bit more interesting you could bind
|
|
||||||
some command line arguments to the application:
|
|
||||||
|
|
||||||
`Application.java`
|
|
||||||
```
|
```
|
||||||
@Configuration
|
. ____ _ __ _ _
|
||||||
@ConfigurationProperties
|
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
|
||||||
@EnableConfigurationProperties
|
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
|
||||||
public class Application {
|
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
|
||||||
|
' |____| .__|_| |_|_| |_\__, | / / / /
|
||||||
|
=========|_|==============|___/=/_/_/_/
|
||||||
|
Spring Boot (v0.5.0.BUILD-SNAPSHOT)
|
||||||
|
|
||||||
private String message;
|
2013-07-31 00:08:16.117 INFO 56603 --- [ main] o.s.b.s.app.SampleApplication : Starting SampleApplication v0.1.0 on mycomputer with PID 56603 (/apps/myapp.jar started by pwebb)
|
||||||
|
2013-07-31 00:08:16.166 INFO 56603 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6e5a8246: startup date [Wed Jul 31 00:08:16 PDT 2013]; root of context hierarchy
|
||||||
|
```
|
||||||
|
|
||||||
@Override
|
By default `INFO` logging messages will shown, including some relevant startup information
|
||||||
public void run(String... args) throws Exception {
|
such as the user that started the application.
|
||||||
System.err.println(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
### Customizing SpringApplication
|
||||||
SpringApplication.run(Application.class, args);
|
If the SpringApplication defaults aren't to your taste you can instead create a local
|
||||||
}
|
instance and customize it. For example, to turn off the banner you would write:
|
||||||
|
|
||||||
public String getMessage() {
|
```java
|
||||||
return message;
|
public static void main(String[] args) {
|
||||||
}
|
SpringApplication app = new SpringApplication(SpringConfiguration.class);
|
||||||
|
app.setShowBanner(false);
|
||||||
public void setMessage(String message) {
|
app.run(args);
|
||||||
this.message = message;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `@ConfigurationProperties` annotation binds the Spring
|
See the `SpringApplication` Javadoc for a complete list of the configuration options
|
||||||
`Environment` (including command line arguments) to the `Application`
|
|
||||||
instance, and `CommandLineRunner` is a marker interface for anything
|
|
||||||
you want to be executed after the content is started. So run it
|
|
||||||
again and you will see the message:
|
|
||||||
|
|
||||||
```
|
### Accessing command line properties
|
||||||
$ mvn package
|
By default `SpringApplication` will expose any command line arguments as Spring
|
||||||
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar --message="Hello World"
|
Properties. This allows you to easily access arguments using by injecting them
|
||||||
...
|
as `@Values`
|
||||||
Hello World
|
|
||||||
|
```java
|
||||||
|
import org.springframework.stereotype.*
|
||||||
|
import org.springframework.beans.factory.annotation.*
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class MyBean {
|
||||||
|
|
||||||
|
@Value("${name}")
|
||||||
|
private String name;
|
||||||
|
// Running 'java -jar myapp.jar --name=Spring' will set this to "Spring"
|
||||||
|
|
||||||
|
// ...
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
To add more features, add some `@Bean` definitions to your
|
### CommandLineRunner beans
|
||||||
`Application` class, and read more in the
|
If you wan't access to the raw command line argument, or you need to run some specific
|
||||||
[Feature Guide](docs/Features.md).
|
code once the `SpringApplication` has started you can implement the `CommandLineRunner`
|
||||||
|
interface. The `run(String... args)` method will be called on all spring beans
|
||||||
|
implementing the interface.
|
||||||
|
|
||||||
|
```java
|
||||||
|
import org.springframework.boot.*
|
||||||
|
import org.springframework.stereotype.*
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class MyBean implements CommandLineRunner {
|
||||||
|
|
||||||
|
public void run(String... args) {
|
||||||
|
// Do something...
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can additionally implement the `org.springframework.core.Ordered` interface or use
|
||||||
|
the `org.springframework.core.annotation.Order` annotation if serveral `CommandLineRunner`
|
||||||
|
beans are defined that must be called in a specific order.
|
||||||
|
|
||||||
|
### Application Exit
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Embedded Servlet Container Support
|
||||||
|
|
||||||
|
## External Configuration
|
||||||
|
|
||||||
|
## Conditionals
|
||||||
|
|
||||||
|
## ApplicationContextInitializers
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue