[bs-84] Add basic getting started guide to service project
Still work in progress, bubt enough there to get someone up a nd running I hope [#49047467]pull/1/merge
parent
bd79ec2362
commit
ce0e443b0a
@ -0,0 +1,151 @@
|
|||||||
|
<style>
|
||||||
|
table
|
||||||
|
{
|
||||||
|
border-collapse:collapse;
|
||||||
|
}
|
||||||
|
table,th, td
|
||||||
|
{
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
# Spring Bootstrap Services
|
||||||
|
|
||||||
|
Minimum fuss for getting RESTful services up and running in
|
||||||
|
production, and in other environments.
|
||||||
|
|
||||||
|
|Feature |Implementation |Notes |
|
||||||
|
|---|---|---|
|
||||||
|
|Server |Tomcat or Jetty | Whatever is on the classpath |
|
||||||
|
|REST |Spring MVC | |
|
||||||
|
|Security |Spring Security | If on the classpath |
|
||||||
|
|Logging |Logback, Log4j or JDK | Whatever is on the classpath. Sensible defaults. |
|
||||||
|
|Database |HSQLDB or H2 | Per classpath, or define a DataSource to override |
|
||||||
|
|Externalized configuration | Properties or YAML | Support for Spring profiles. Bind automatically to @Bean. |
|
||||||
|
|Validation | JSR-303 | |
|
||||||
|
|Management endpoints | Spring MVC | Health, basic metrics, request tracing, shutdown |
|
||||||
|
|Error pages | Spring MVC | Sensible defaults based on exception and status code |
|
||||||
|
|JSON |Jackson 2 | |
|
||||||
|
|ORM |Spring Data JPA | If on the classpath |
|
||||||
|
|Batch |Spring Batch | If enabled and on the classpath |
|
||||||
|
|Integration Patterns |Spring Integration | If on the classpath |
|
||||||
|
|
||||||
|
# Getting Started
|
||||||
|
|
||||||
|
You will need Java (6 at least) and a build tool (Maven is what we use
|
||||||
|
below, but you are more than wecome to use gradle). These can be
|
||||||
|
downloaded or installed easily in most operating systems. FIXME:
|
||||||
|
short instructions for Mac and Linux.
|
||||||
|
|
||||||
|
## A basic project
|
||||||
|
|
||||||
|
If you are using Maven create a really simple `pom.xml` with 2 dependencies:
|
||||||
|
|
||||||
|
<project>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.mycompany</groupId>
|
||||||
|
<artifactId>myproject</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.bootstrap</groupId>
|
||||||
|
<artifactId>spring-bootstrap-applications</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<properties>
|
||||||
|
<spring.bootstrap.version>0.0.1-SNAPSHOT</spring.bootstrap.version>
|
||||||
|
<start-class>org.springframework.bootstrap.SpringApplication</start-class>
|
||||||
|
</properties>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.bootstrap</groupId>
|
||||||
|
<artifactId>spring-bootstrap-web-application</artifactId>
|
||||||
|
<version>${spring.bootstrap.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.bootstrap</groupId>
|
||||||
|
<artifactId>spring-bootstrap-service</artifactId>
|
||||||
|
<version>${spring.bootstrap.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</project>
|
||||||
|
|
||||||
|
If you like Gradle, that's fine, and you will know what to do with
|
||||||
|
those co-ordinates. The first one adds Spring Bootstrap auto
|
||||||
|
configuration and the Jetty container to your application, and the
|
||||||
|
second one adds some more opinionated stuff like the default
|
||||||
|
management endpoints. If you prefer Tomcat FIXME: use a different
|
||||||
|
dependency.
|
||||||
|
|
||||||
|
You should be able to run it already:
|
||||||
|
|
||||||
|
$ mvn package
|
||||||
|
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar
|
||||||
|
|
||||||
|
Then in another terminal
|
||||||
|
|
||||||
|
$ curl localhost:8080/healthz
|
||||||
|
ok
|
||||||
|
$ curl localhost:8080/varz
|
||||||
|
{"counter.status.200.healthz":1.0,"gauge.response.healthz":10.0,"mem":120768.0,"mem.free":105012.0,"processors":4.0}
|
||||||
|
|
||||||
|
`/healthz` is the default location for the health endpoint - it tells
|
||||||
|
you if the application is running and healthy. `/varz` is the default
|
||||||
|
location for the metrics endpoint - it gives you basic counts and
|
||||||
|
response timing data by default but there are plenty of ways to
|
||||||
|
customize it.
|
||||||
|
|
||||||
|
$ curl localhost:8080/
|
||||||
|
{"status": 404, "error": "Not Found", "message": "Not Found"}
|
||||||
|
|
||||||
|
That's OK, we haven't added any business content yet.
|
||||||
|
|
||||||
|
## Adding a business endpoint
|
||||||
|
|
||||||
|
To do something useful to your business you need to add at least one
|
||||||
|
endpoint. An endpoint can be implemented as a Spring MVC
|
||||||
|
`@Controller`, e.g.
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@EnableAutoConfiguration
|
||||||
|
public class SampleController {
|
||||||
|
|
||||||
|
@RequestMapping("/")
|
||||||
|
@ResponseBody
|
||||||
|
public Map<String, String> helloWorld() {
|
||||||
|
return Collections.singletonMap("message", "Hello World");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
SpringApplication.run(SampleController.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
You can launch that straight away using the Spring Bootstrap CLI
|
||||||
|
(without the `@EnableAutoConfiguration` and even without the import
|
||||||
|
statements that your IDE will add if you are using one), or you can
|
||||||
|
use the main method to launch it from your project jar. Just change
|
||||||
|
the `start-class` in the `pom` above to the fully qualified name of
|
||||||
|
your `SampleController`, e.g.
|
||||||
|
|
||||||
|
<start-class>com.mycompany.sample.SampleController</start-class>
|
||||||
|
|
||||||
|
and re-package:
|
||||||
|
|
||||||
|
$ mvn package
|
||||||
|
$ java -jar target/myproject-1.0.0-SNAPSHOT.jar
|
||||||
|
$ curl localhost:8080/
|
||||||
|
{"message": "Hello World"}
|
||||||
|
|
||||||
|
# Add a database
|
||||||
|
|
||||||
|
Just add `spring-jdbc` and an embedded database to your dependencies:
|
||||||
|
|
||||||
|
FIXME: TBD
|
Loading…
Reference in New Issue