|
|
|
@ -1,29 +1,29 @@ |
|
|
|
# Spring Zero |
|
|
|
# Spring Boot |
|
|
|
Spring Zero is "Spring for Snowboarders". If you are kewl, or just impatient, and you |
|
|
|
Spring Boot is "Spring for Snowboarders". If you are kewl, or just impatient, and you |
|
|
|
want to use Spring, then this is the place to be. Spring Zero is the code-name for a |
|
|
|
want to use Spring, then this is the place to be. Spring Boot is the code-name for a |
|
|
|
group of related technologies, that will get you up and running with |
|
|
|
group of related technologies, that will get you up and running with |
|
|
|
Spring-powered, production-grade applications and services with absolute minimum fuss. |
|
|
|
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 |
|
|
|
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 |
|
|
|
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). |
|
|
|
ecosystem. Absolutely no code generation and no XML (unless you really want it). |
|
|
|
|
|
|
|
|
|
|
|
The goals are: |
|
|
|
The goals are: |
|
|
|
|
|
|
|
|
|
|
|
* Radically faster and widely accessible getting started experience for Spring |
|
|
|
* Radically faster and widely accessible getting started experience for Spring |
|
|
|
development |
|
|
|
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 |
|
|
|
* First class support for REST-ful services, modern web applications, batch jobs, and |
|
|
|
enterprise integration |
|
|
|
enterprise integration |
|
|
|
* Applications that adapt their behavior or configuration to their environment |
|
|
|
* Applications that adapt their behavior or configuration to their environment |
|
|
|
* Optionally use Groovy features like DSLs and AST transformations to accelerate the |
|
|
|
* Optionally use Groovy features like DSLs and AST transformations to accelerate the |
|
|
|
implementation of basic business requirements |
|
|
|
implementation of basic business requirements |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Installing |
|
|
|
## Installing |
|
|
|
You need to [build from source](#building-from-source) for now, but when it's done |
|
|
|
You need to [build from source](#building-from-source) for now, but when it's done |
|
|
|
instructions will look like this: |
|
|
|
instructions will look like this: |
|
|
|
|
|
|
|
|
|
|
|
1) Get Java. Download and install the Java SDK from [www.java.com](http://www.java.com) |
|
|
|
1) Get Java. Download and install the Java SDK from [www.java.com](http://www.java.com) |
|
|
|
@ -36,20 +36,20 @@ instructions will look like this: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Building from source |
|
|
|
## Building from source |
|
|
|
Spring Zero can be [built with maven](http://maven.apache.org/run-maven/index.html) v3.0 |
|
|
|
Spring Zero can be [built with maven](http://maven.apache.org/run-maven/index.html) v3.0 |
|
|
|
or above. |
|
|
|
or above. |
|
|
|
|
|
|
|
|
|
|
|
$ mvn clean install |
|
|
|
$ mvn clean install |
|
|
|
|
|
|
|
|
|
|
|
An `alias` can be used for the Spring Zero command line tool: |
|
|
|
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" |
|
|
|
$ 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._ |
|
|
|
_Also see [docs/CONTRIBUTING](docs/CONTRIBUTING.md) if you want to submit pull requests._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Quick Start Example |
|
|
|
## Quick Start Example |
|
|
|
The Spring Zero command line tool uses Groovy underneath so that we can present simple |
|
|
|
The Spring Zero command line tool uses Groovy underneath so that we can present simple |
|
|
|
snippets that can just run, for example: |
|
|
|
snippets that can just run, for example: |
|
|
|
|
|
|
|
|
|
|
|
$ cat > app.groovy |
|
|
|
$ cat > app.groovy |
|
|
|
@ -67,18 +67,18 @@ snippets that can just run, for example: |
|
|
|
Hello World! |
|
|
|
Hello World! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.*; |
|
|
|
import org.springframework.stereotype.*; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
import org.springframework.web.bind.annotation.*; |
|
|
|
import org.springframework.boot.context.annotation.*; |
|
|
|
import org.springframework.boot.context.annotation.*; |
|
|
|
|
|
|
|
|
|
|
|
@Controller |
|
|
|
@Controller |
|
|
|
@EnableAutoConfiguration |
|
|
|
@EnableAutoConfiguration |
|
|
|
public class SampleController { |
|
|
|
public class SampleController { |
|
|
|
|
|
|
|
|
|
|
|
@RequestMapping("/") |
|
|
|
@RequestMapping("/") |
|
|
|
@ResponseBody |
|
|
|
@ResponseBody |
|
|
|
String home() { |
|
|
|
String home() { |
|
|
|
@ -88,83 +88,83 @@ add `@EnableAutoConfiguration`: |
|
|
|
public static void main(String[] args) throws Exception { |
|
|
|
public static void main(String[] args) throws Exception { |
|
|
|
SpringApplication.run(SampleController.class, args); |
|
|
|
SpringApplication.run(SampleController.class, args); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_NOTE: the above example assumes your build system has imported the `spring-starter-web` |
|
|
|
_NOTE: the above example assumes your build system has imported the `spring-starter-web` |
|
|
|
maven pom._ |
|
|
|
maven pom._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Spring Zero Components |
|
|
|
## Spring Boot Components |
|
|
|
There are a number of components in Zero. Here are the important ones: |
|
|
|
There are a number of components in Boot. Here are the important ones: |
|
|
|
|
|
|
|
|
|
|
|
### The Spring CLI |
|
|
|
### The Spring CLI |
|
|
|
The 'spring' command line application compiles and runs Groovy source, making it super |
|
|
|
The 'spring' command line application compiles and runs Groovy source, making it super |
|
|
|
easy to write the absolute minimum of code to get an application running. Spring CLI |
|
|
|
easy to write the absolute minimum of code to get an application running. Spring CLI |
|
|
|
can also watch files, automatically recompiling and restarting when they change. |
|
|
|
can also watch files, automatically recompiling and restarting when they change. |
|
|
|
|
|
|
|
|
|
|
|
*See [spring-cli/README](spring-cli/README.md).* |
|
|
|
*See [spring-cli/README](spring-cli/README.md).* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Spring Bootstrap |
|
|
|
### Spring Boot |
|
|
|
The main library providing features that support the other parts of Spring Zero. |
|
|
|
The main library providing features that support the other parts of Spring Boot. |
|
|
|
Features include: |
|
|
|
Features include: |
|
|
|
|
|
|
|
|
|
|
|
* `SpringApplication` - a class with static convenience methods that make it really easy |
|
|
|
* `SpringApplication` - a class with static convenience methods that make it really easy |
|
|
|
to write a standalone Spring Application. Its sole job is to create and refresh an |
|
|
|
to write a standalone Spring Application. Its sole job is to create and refresh an |
|
|
|
appropriate Spring `ApplicationContext`. |
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
_See [spring-boot/README](spring-boot/README.md)._ |
|
|
|
_See [spring-boot/README](spring-boot/README.md)._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Spring Autoconfigure |
|
|
|
### Spring Autoconfigure |
|
|
|
Spring Zero can configure large parts of common applications based on detecting the |
|
|
|
Spring Zero can configure large parts of common applications based on detecting the |
|
|
|
content of the classpath and any existing application context. A single |
|
|
|
content of the classpath and any existing application context. A single |
|
|
|
`@EnableAutoConfigure` annotation triggers auto-configuration of the Spring context. |
|
|
|
`@EnableAutoConfigure` annotation triggers auto-configuration of the Spring context. |
|
|
|
|
|
|
|
|
|
|
|
Auto-configuration attempts to guess what beans a user might want based on their |
|
|
|
Auto-configuration attempts to guess what beans a user might want based on their |
|
|
|
classpath. For example, If a 'HSQLDB' is on the classpath the user probably wants an |
|
|
|
classpath. For example, If a 'HSQLDB' is on the classpath the user probably wants an |
|
|
|
in-memory database to be defined. Auto-configuration will back away as the user starts |
|
|
|
in-memory database to be defined. Auto-configuration will back away as the user starts |
|
|
|
to define their own beans. |
|
|
|
to define their own beans. |
|
|
|
|
|
|
|
|
|
|
|
_See [spring-autoconfigure/README](spring-autoconfigure/README.md)._ |
|
|
|
_See [spring-autoconfigure/README](spring-autoconfigure/README.md)._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Spring Actuator |
|
|
|
### Spring Actuator |
|
|
|
Spring Actuator uses auto-configuration to decorate your application with features that |
|
|
|
Spring Actuator uses auto-configuration to decorate your application with features that |
|
|
|
make it instantly deployable and supportable in production. For instance if you are |
|
|
|
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 |
|
|
|
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 |
|
|
|
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. |
|
|
|
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)._ |
|
|
|
_See [spring-actuator/README](spring-actuator/README.md)._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Spring Starters |
|
|
|
### Spring Starters |
|
|
|
Spring Starters are a set of convenient dependency descriptors that you can include in |
|
|
|
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 one dependency in your project, and you are good to go. |
|
|
|
|
|
|
|
|
|
|
|
_See [spring-starters/README](spring-starters/README.md)._ |
|
|
|
_See [spring-starters/README](spring-starters/README.md)._ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Packaging |
|
|
|
### Packaging |
|
|
|
The [spring-launcher](spring-launcher/) and |
|
|
|
The [spring-launcher](spring-launcher/) and |
|
|
|
[spring-maven-packaging-plugin](spring-maven-packaging-plugin) provide a convenient way |
|
|
|
[spring-maven-packaging-plugin](spring-maven-packaging-plugin) provide a convenient way |
|
|
|
to package you application for release. Applications can be released as a single jar |
|
|
|
to package you application for release. Applications can be released as a single jar |
|
|
|
file that can simply be launched using `java -jar`. |
|
|
|
file that can simply be launched using `java -jar`. |
|
|
|
|
|
|
|
|
|
|
|
_See [spring-launcher/README](spring-launcher/README.md) & |
|
|
|
_See [spring-launcher/README](spring-launcher/README.md) & |
|
|
|
[spring-package-maven-plugin/README](spring-package-maven-plugin/README.md)._ |
|
|
|
[spring-package-maven-plugin/README](spring-package-maven-plugin/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-cli/samples](spring-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-sample](spring-boot-samples/#) and should |
|
|
|
@ -181,8 +181,8 @@ samples are provided: |
|
|
|
* spring-sample-data-jpa - Spring Data JPA + Hibernate + HSQLDB |
|
|
|
* spring-sample-data-jpa - Spring Data JPA + Hibernate + HSQLDB |
|
|
|
* spring-boot-sample-integration - A spring integration application |
|
|
|
* spring-boot-sample-integration - A spring integration application |
|
|
|
* spring-boot-sample-profile - example showing Spring's `@profile` support |
|
|
|
* spring-boot-sample-profile - example showing Spring's `@profile` support |
|
|
|
* spring-boot-sample-traditional - shows Spring Zero with more traditional WAR packaging |
|
|
|
* spring-boot-sample-traditional - shows Spring Zero with more traditional WAR packaging |
|
|
|
(but also executable using `java -jar`) |
|
|
|
(but also executable using `java -jar`) |
|
|
|
* spring-boot-sample-xml - Example show how Spring Zero can be mixed with trditional XML |
|
|
|
* spring-boot-sample-xml - Example show how Spring Boot can be mixed with traditional XML |
|
|
|
configuration |
|
|
|
configuration |
|
|
|
|
|
|
|
|
|
|
|
|