SpringBoot Notes
SpringBoot Notes
Advantages
Easy deployment
Simple scalability
Compatible with Containers
Minimum configuration
Lesser production time
Advantages
Goals
Note that all Spring Boot starters follow the same naming
pattern spring-boot-starter- *, where * indicates that it is a type
of the application.
Examples
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
Auto Configuration
Spring Boot Auto Configuration automatically configures your
Spring application based on the JAR dependencies you added in
the project. For example, if MySQL database is on your class path,
but you have not configured any database connection, then
Spring Boot auto configures an in-memory database.
import [Link];
import
[Link]
uration;
@EnableAutoConfiguration
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Component Scan
Spring Boot application scans all the beans and package
declarations when the application initializes. You need to add
the @ComponentScan annotation for your class file to scan your
components added in your project.
import [Link];
import
[Link];
@ComponentScan
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Prerequisites
Your system need to have the following minimum requirements to
create a Spring Boot application −
Java 7
Maven 3.2
Gradle 2.5
You can also download the Spring CLI distribution from the Spring
Software repository
at: [Link]
rence/htmlsingle/#getting-started-manual-cli-installation
For manual installation, you need to use the following two folders
−
[Link]
[Link]
After the download, unpack the archive file and follow the steps
given in the [Link] file. Not that it does not require any
environment setup.
@Controller
class Example {
@RequestMapping("/")
@ResponseBody
public String hello() {
"Hello Spring Boot"
}
}
Now, save the groovy file with the name [Link]. Note that
in this example, we saved the groovy file inside the Spring Boot
CLI bin directory. Now run the application by using the
command spring run [Link] as shown in the screenshot
given below −
Spring Initializer
One of the ways to Bootstrapping a Spring Boot application is by
using Spring Initializer. To do this, you will have to visit the Spring
Initializer web page [Link] and choose your Build,
Spring Boot Version and platform. Also, you need to provide a
Group, Artifact and required dependencies to run the application.
This section explains you the examples by using both Maven and
Gradle.
Maven
After you download the project, unzip the file. Now,
your [Link] file looks as shown below −
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle
Once you download the project, unzip the file. Now
your [Link] file looks as shown below −
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
Maven dependency
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Gradle dependency
dependencies {
compile('[Link]:spring-boot-
starter-web')
}
Main Method
The main method should be writing the Spring Boot Application
class. This class should be annotated
with @SpringBootApplication. This is the entry point of the
spring boot application to start. You can find the main class file
under src/java/main directories with the default package.
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Now, your main Spring Boot Application class file will look like as
shown in the code given below −
package [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
For Gradle, you can find the JAR file under the build/libs directory
as shown below −
Now, run the JAR file by using the command java –jar
<JARFILE>. Observe that in the above example, the JAR file is
named [Link]
Once you run the jar file, you can see the output in the console
window as shown below −
The code for Spring Boot Application class file for JAR file
deployment is given below −
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
er;
import
[Link]
ServletInitializer;
@SpringBootApplication
public class DemoApplication extends
SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return
[Link]([Link]);
}
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<start-class>[Link]</start-class>
mainClassName="[Link]"
<packaging>war</packaging>
dependencies {
compile('[Link]:spring-boot-starter-web')
}
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
er;
import
[Link]
ServletInitializer;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class DemoApplication extends
SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return
[Link]([Link]);
}
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String hello() {
return "Hello World from Tomcat";
}
}
For Maven, use the command mvn package for packaging your
application. Then, the WAR file will be created and you can find it
in the target directory as shown in the screenshots given below −
For Gradle, use the command gradle clean build for packaging
your application. Then, your WAR file will be created and you can
find it under build/libs directory. Observe the screenshots given
here for a better understanding −
Deploy into Tomcat
Now, run the Tomcat Server, and deploy the WAR file under
the webapps directory. Observe the screenshots shown here for
a better understanding −
After successful deployment, hit the URL in your web
browser [Link] and
observe that the output will look as shown in the screenshot given
below −
xsi:schemaLocation = "[Link]
[Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<start-
class>[Link]</start-
class>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
[Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
The code for main Spring Boot application class file is given below
−
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
er;
import
[Link]
ServletInitializer;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class DemoApplication extends
SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder
configure(SpringApplicationBuilder application) {
return
[Link]([Link]);
}
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String hello() {
return "Hello World from Tomcat";
}
}
Dependency Management
Spring Boot team provides a list of dependencies to support the
Spring Boot version for its every release. You do not need to
provide a version for dependencies in the build configuration file.
Spring Boot automatically configures the dependencies version
based on the release. Remember that when you upgrade the
Spring Boot version, dependencies also will upgrade
automatically.
Maven Dependency
For Maven configuration, we should inherit the Spring Boot Starter
parent project to manage the Spring Boot Starters dependencies.
For this, simply we can inherit the starter parent in
our [Link] file as shown below.
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
</parent>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
Gradle Dependency
We can import the Spring Boot Starters dependencies directly
into [Link] file. We do not need Spring Boot start Parent
dependency like Maven for Gradle. Observe the code given below
−
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
Similarly, in Gradle, we need not specify the Spring Boot version
number for dependencies. Spring Boot automatically configures
the dependency based on the version.
dependencies {
compile('[Link]:spring-boot-
starter-web')
}
Default package
A class that does not have any package declaration is considered
as a default package. Note that generally a default package
declaration is not recommended. Spring Boot will cause issues
such as malfunctioning of Auto Configuration or Component Scan,
when you use default package.
Typical Layout
The typical layout of Spring Boot application is shown in the
image given below −
The [Link] file should declare the main method along
with @SpringBootApplication. Observe the code given below for a
better understanding −
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class Application {
public static void main(String[] args)
{[Link]([Link], args);}
}
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
The following code shows the code for auto wired Rest Template
object and Bean creation object in main Spring Boot Application
class file −
package [Link];
import
[Link];
import [Link];
import
[Link]
ation;
import [Link];
import [Link];
@SpringBootApplication
public class DemoApplication {
@Autowired
RestTemplate restTemplate;
Application Runner
Application Runner is an interface used to execute the code after
the Spring Boot application started. The example given below
shows how to implement the Application Runner interface on the
main class file.
package [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication implements
ApplicationRunner {
public static void main(String[] args) {
[Link]([Link],
args);
}
@Override
public void run(ApplicationArguments arg0) throws
Exception {
[Link]("Hello World from Application
Runner");
}
}
Now, if you observe the console window below Hello World from
Application Runner, the println statement is executed after the
Tomcat started. Is the following screenshot relevant?
Command Line Runner
Command Line Runner is an interface. It is used to execute the
code after the Spring Boot application started. The example given
below shows how to implement the Command Line Runner
interface on the main class file.
package [Link];
import [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication implements
CommandLineRunner {
public static void main(String[] args) {
[Link]([Link],
args);
}
@Override
public void run(String... arg0) throws Exception {
[Link]("Hello world from Command Line
Runner");
}
}
Properties File
Properties files are used to keep ‘N’ number of properties in a
single file to run the application in a different environment. In
Spring Boot, properties are kept in
the [Link] file under the classpath.
[Link] = 9090
[Link] = demoservice
Note that in the code shown above the Spring Boot application
demoservice starts on the port 9090.
YAML File
Spring Boot supports YAML based properties configurations to run
the application. Instead of [Link], we can
use [Link] file. This YAML file also should be kept
inside the classpath. The sample [Link] file is given
below −
spring:
application:
name: demoservice
server:
port: 9090
Externalized Properties
Instead of keeping the properties file under classpath, we can
keep the properties in different location or path. While running
the JAR file, we can specify the properties file path. You can use
the following command to specify the location of properties file
while running the JAR −
-[Link] = C:\[Link]
@Value("${property_key_name}")
@Value("${[Link]}")
import
[Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class DemoApplication {
@Value("${[Link]}")
private String name;
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String name() {
return name;
}
}
To resolve the placeholder issue, we can set the default value for
the property using thr syntax given below −
@Value("${property_key_name:default_value}")
@Value("${[Link]:demoservice}")
[Link]
[Link] = 8080
[Link] = demoservice
[Link]
[Link] = 9090
[Link] = demoservice
[Link]
[Link] = 4431
[Link] = demoservice
While running the JAR file, we need to specify the spring active
profile based on each properties file. By default, Spring Boot
application uses the [Link] file. The command to
set the spring active profile is shown below −
You can see active profile name on the console log as shown
below −
Now, Tomcat has started on the port 9090 (http) as shown below
−
You can see active profile name on the console log as shown
below −
spring:
application:
name: demoservice
server:
port: 8080
---
spring:
profiles: dev
application:
name: demoservice
server:
port: 9090
---
spring:
profiles: prod
application:
name: demoservice
server:
port: 4431
You can see active profile name on the console log as shown
below −
You can see active profile name on the console log as shown
below −
If you are using Spring Boot Starters, Logback will provide a good
support for logging. Besides, Logback also provides a use of good
support for Common Logging, Util Logging, Log4J, and SLF4J.
Log Format
The default Spring Boot Log format is shown in the screenshot
given below.
Date and Time that gives the date and time of the log
Log level shows INFO, ERROR or WARN
Process ID
The --- which is a separator
Thread name is enclosed within the square brackets []
Logger Name that shows the Source class name
The Log message
debug = true
You can specify the log file path using the property shown below.
Note that the log file name is [Link].
[Link] = /var/tmp/
You can specify the own log file name using the property shown
below −
[Link] = /var/tmp/[Link]
Log Levels
Spring Boot supports all logger levels such as “TRACE”, “DEBUG”,
“INFO”, “WARN”, “ERROR”, “FATAL”, “OFF”. You can define Root
logger in the [Link] file as shown below −
[Link] = WARN
Configure Logback
Logback supports XML based configuration to handle Spring Boot
Log configurations. Logging configuration details are configured
in [Link] file. The [Link] file should be placed under
the classpath.
You can configure the ROOT level log in [Link] file using the
code given below −
You can configure the file appender in [Link] file using the
code given below. Note that you need to specify the Log file path
insider the file appender.
The code for complete [Link] file is given below. You have
to place this in the class path.
The code given below shows how to add the slf4j logger in Spring
Boot main class file.
package [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
private static final Logger logger =
[Link]([Link]);
The output that you can see in the console window is shown here
−
The output that you can see in the log file is shown here −
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
If you are a Gradle user, use the following code to add the below
dependency in your [Link] file.
compile('[Link]:spring-boot-starter-web')
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
Rest Controller
The @RestController annotation is used to define the RESTful web
services. It serves JSON, XML and custom response. Its syntax is
shown below −
@RestController
public class ProductServiceController {
}
Request Mapping
The @RequestMapping annotation is used to define the Request
URI to access the REST Endpoints. We can define Request method
to consume and produce object. The default request method is
GET.
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProducts() { }
Request Body
The @RequestBody annotation is used to define the request body
content type.
Path Variable
The @PathVariable annotation is used to define the custom or
dynamic request URI. The Path variable in request URI is defined
as curly braces {} as shown below −
Request Parameter
The @RequestParam annotation is used to read the request
parameters from the Request URL. By default, it is a required
parameter. We can also set default value for request parameters
as shown here −
GET API
The default HTTP request method is GET. This method does not
require any Request Body. You can send request parameters and
path variables to define the custom or dynamic URL.
The sample code to define the HTTP GET request method is
shown below. In this example, we used HashMap to store the
Product. Note that we used a POJO class as the product to be
stored.
Here, the request URI is /products and it will return the list of
products from HashMap repository. The controller class file is
given below that contains GET method REST Endpoint.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
static {
Product honey = new Product();
[Link]("1");
[Link]("Honey");
[Link]([Link](), honey);
The following example shows the sample code to define the HTTP
POST request method. In this example, we used HashMap to store
the Product, where the product is a POJO class.
Here, the request URI is /products, and it will return the String
after storing the product into HashMap repository.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
PUT API
The HTTP PUT request is used to update the existing resource.
This method contains a Request Body. We can send request
parameters and path variables to define the custom or dynamic
URL.
The example given below shows how to define the HTTP PUT
request method. In this example, we used HashMap to update the
existing Product, where the product is a POJO class.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
@RequestMapping(value = "/products/{id}", method =
[Link])
public ResponseEntity<Object>
updateProduct(@PathVariable("id") String id,
@RequestBody Product product) {
[Link](id);
[Link](id);
[Link](id, product);
return new ResponseEntity<>("Product is updated
successsfully", [Link]);
}
}
DELETE API
The HTTP Delete request is used to delete the existing resource.
This method does not contain any Request Body. We can send
request parameters and path variables to define the custom or
dynamic URL.
The example given below shows how to define the HTTP DELETE
request method. In this example, we used HashMap to remove
the existing product, which is a POJO class.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
This section gives you the complete set of source code. Observe
the following codes for their respective functionalities −
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
package [Link];
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
static {
Product honey = new Product();
[Link]("1");
[Link]("Honey");
[Link]([Link](), honey);
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProduct() {
return new ResponseEntity<>([Link](),
[Link]);
}
}
You can create an executable JAR file, and run the spring boot
application by using the below Maven or Gradle commands as
shown −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
You can run the JAR file by using the command shown below −
This will start the application on the Tomcat port 8080 as shown
below −
Now hit the URL shown below in POSTMAN application and see the
output.
Controller Advice
The @ControllerAdvice is an annotation, to handle the exceptions
globally.
Exception Handler
The @ExceptionHandler is an annotation used to handle the
specific exceptions and sending the custom responses to the
client.
package [Link];
import
[Link]
e;
@ControllerAdvice
public class ProductExceptionController {
}
package [Link];
@ExceptionHandler(value =
[Link])
public ResponseEntity<Object>
exception(ProductNotfoundException exception) {
}
Now, use the code given below to throw the exception from the
API.
package [Link];
public class ProductNotfoundException extends
RuntimeException {
private static final long serialVersionUID = 1L;
}
package [Link];
import [Link];
import [Link];
import
[Link]
e;
import
[Link]
r;
@ControllerAdvice
public class ProductExceptionController {
@ExceptionHandler(value =
[Link])
public ResponseEntity<Object>
exception(ProductNotfoundException exception) {
return new ResponseEntity<>("Product not found",
HttpStatus.NOT_FOUND);
}
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link]
ion;
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
static {
Product honey = new Product();
[Link]("1");
[Link]("Honey");
[Link]([Link](), honey);
The code for main Spring Boot application class file is given below
−
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
The code for POJO class for Product is given below −
package [Link];
public class Product {
private String id;
private String name;
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
You can run the JAR file by using the following command −
This will start the application on the Tomcat port 8080 as shown
below −
Now hit the below URL in POSTMAN application and you can see
the output as shown below −
The following are the three methods you should know about while
working on Interceptors −
@Component
public class ProductServiceInterceptor implements
HandlerInterceptor {
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse
response, Object handler) throws Exception {
return true;
}
@Override
public void postHandle(
HttpServletRequest request, HttpServletResponse
response, Object handler,
ModelAndView modelAndView) throws Exception {}
@Override
public void afterCompletion(HttpServletRequest
request, HttpServletResponse response,
Object handler, Exception exception) throws
Exception {}
}
@Override
public void addInterceptors(InterceptorRegistry
registry) {
[Link](productServiceInterceptor);
}
}
In the example given below, we are going to hit the GET products
API which gives the output as given under −
package [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class ProductServiceInterceptor implements
HandlerInterceptor {
@Override
public boolean preHandle
(HttpServletRequest request, HttpServletResponse
response, Object handler)
throws Exception {
package [Link];
import
[Link];
import [Link];
import
[Link]
ceptorRegistry;
import
[Link]
cConfigurerAdapter;
@Component
public class ProductServiceInterceptorAppConfig extends
WebMvcConfigurerAdapter {
@Autowired
ProductServiceInterceptor productServiceInterceptor;
@Override
public void addInterceptors(InterceptorRegistry
registry) {
[Link](productServiceInterceptor);
}
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link]
ion;
import [Link];
@RestController
public class ProductServiceController {
private static Map<String, Product> productRepo =
new HashMap<>();
static {
Product honey = new Product();
[Link]("1");
[Link]("Honey");
[Link]([Link](), honey);
Product almond = new Product();
[Link]("2");
[Link]("Almond");
[Link]([Link](), almond);
}
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProduct() {
return new ResponseEntity<>([Link](),
[Link]);
}
}
package [Link];
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the below Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
You can run the JAR file by using the following command −
Now hit the below URL in POSTMAN application and you can see
the output as shown under −
The following code shows the sample code for a Servlet Filter
implementation class with @Component annotation.
@Component
public class SimpleFilter implements Filter {
@Override
public void destroy() {}
@Override
public void doFilter
(ServletRequest request, ServletResponse
response, FilterChain filterchain)
throws IOException, ServletException {}
@Override
public void init(FilterConfig filterconfig) throws
ServletException {}
}
The following example shows the code for reading the remote
host and remote address from the ServletRequest object before
sending the request to the controller.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Component
public class SimpleFilter implements Filter {
@Override
public void destroy() {}
@Override
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain filterchain)
throws IOException, ServletException {
[Link]("Remote
Host:"+[Link]());
[Link]("Remote
Address:"+[Link]());
[Link](request, response);
}
@Override
public void init(FilterConfig filterconfig) throws
ServletException {}
}
In the Spring Boot main application class file, we have added the
simple REST endpoint that returns the “Hello World” string.
package [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String hello() {
return "Hello World";
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands shown below
−
After BUILD SUCCESS, you can find the JAR file under the target
directory.
After BUILD SUCCESSFUL, you can find the JAR file under the
build/libs directory.
You can see the application has started on the Tomcat port 8080.
Now hit the URL [Link] and see the output Hello
World. It should look as shown below −
Then, you can see the Remote host and Remote address on the
console log as shown below −
Custom Port
In the [Link] file, we can set custom port
number for the property [Link]
[Link] = 9090
server:
port: 9090
Random Port
In the [Link] file, we can set random port
number for the property [Link]
[Link] = 0
In the [Link] file, you can find as follows −
server:
port: 0
package [Link];
import [Link];
import
[Link]
ation;
import [Link];
import [Link];
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
GET
Consuming the GET API by using RestTemplate -
exchange() method
Assume this URL [Link] returns the
following JSON and we are going to consume this API response by
using Rest Template using the following code −
[
{
"id": "1",
"name": "Honey"
},
{
"id": "2",
"name": "Almond"
}
]
You will have to follow the given points to consume the API −
@RequestMapping(value = "/template/products")
public String getProductList() {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity <String> entity = new
HttpEntity<String>(headers);
return [Link]("
[Link]
[Link], entity, [Link]).getBody();
}
}
POST
Consuming POST API by using RestTemplate - exchange()
method
{
"id":"3",
"name":"Ginger"
}
You will have to follow the points given below to consume the API
−
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(product,headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
}
PUT
Consuming PUT API by using RestTemplate - exchange()
method
{
"name":"Indian Ginger"
}
You will have to follow the points given below to consume the API
−
@RequestMapping(value = "/template/products/{id}",
method = [Link])
public String updateProduct(@PathVariable("id")
String id, @RequestBody Product product) {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(product,headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
}
DELETE
Consuming DELETE API by using RestTemplate -
exchange() method
You will have to follow the points shown below to consume the API
−
@RequestMapping(value = "/template/products/{id}",
method = [Link])
public String deleteProduct(@PathVariable("id")
String id) {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
}
package [Link];
import [Link];
import
[Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
import [Link];
@RestController
public class ConsumeWebService {
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "/template/products")
public String getProductList() {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<String> entity = new
HttpEntity<String>(headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
@RequestMapping(value = "/template/products", method
= [Link])
public String createProducts(@RequestBody Product
product) {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(product,headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
@RequestMapping(value = "/template/products/{id}",
method = [Link])
public String updateProduct(@PathVariable("id")
String id, @RequestBody Product product) {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(product,headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
@RequestMapping(value = "/template/products/{id}",
method = [Link])
public String deleteProduct(@PathVariable("id")
String id) {
HttpHeaders headers = new HttpHeaders();
[Link]([Link](MediaType.APPLICATION_J
SON));
HttpEntity<Product> entity = new
HttpEntity<Product>(headers);
return [Link](
"[Link]
[Link], entity, [Link]).getBody();
}
}
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under
build/libs directory.
Now hit the below URL’s in POSTMAN application and you can see
the output.
GET Products by Rest Template
− [Link]
File Upload
For uploading a file, you can use MultipartFile as a Request
Parameter and this API should consume Multi-Part form data
value. Observe the code given below −
@RequestMapping(value = "/upload", method =
[Link], consumes =
MediaType.MULTIPART_FORM_DATA_VALUE)
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
@RestController
public class FileUploadController {
@RequestMapping(value = "/upload", method =
[Link],
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
File Download
For file download, you should use InputStreamResource for
downloading a File. We need to set the HttpHeader Content-
Disposition in Response and need to specify the response Media
Type of the application.
[Link]("Content-Disposition",
[Link]("attachment; filename=\"%s\"",
[Link]()));
[Link]("Cache-Control", "no-cache, no-store,
must-revalidate");
[Link]("Pragma", "no-cache");
[Link]("Expires", "0");
ResponseEntity<Object>
responseEntity =
[Link]().headers(headers).contentLength(file
.length()).contentType(
[Link]("application/txt")).body(resou
rce);
return responseEntity;
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
@RestController
public class FileDownloadController {
@RequestMapping(value = "/download", method =
[Link])
public ResponseEntity<Object> downloadFile() throws
IOException {
String filename = "/var/tmp/[Link]";
File file = new File(filename);
InputStreamResource resource = new
InputStreamResource(new FileInputStream(file));
HttpHeaders headers = new HttpHeaders();
[Link]("Content-Disposition",
[Link]("attachment; filename=\"%s\"",
[Link]()));
[Link]("Cache-Control", "no-cache, no-store,
must-revalidate");
[Link]("Pragma", "no-cache");
[Link]("Expires", "0");
ResponseEntity<Object>
responseEntity =
[Link]().headers(headers).contentLength(
[Link]()).contentType([Link]("ap
plication/txt")).body(resource);
return responseEntity;
}
}
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
Now you can create an executable JAR file, and run the Spring
Boot application by using the Maven or Gradle commands given
below −
For Maven, use the command given below −
After “BUILD SUCCESS”, you can find the JAR file under target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under
build/libs directory.
This will start the application on the Tomcat port 8080 as shown
below −
Now hit the below URL’s in POSTMAN application and you can see
the output as shown below −
@Service
public class ProductServiceImpl implements
ProductService {
}
You can create an Interface which contains add, edit, get and
delete methods using the code as shown below −
package [Link];
import [Link];
import [Link];
The following code will let you to create a class which implements
the ProductService interface with @Service annotation and write
the business logic to store, retrieve, delete and updates the
product.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Service
public class ProductServiceImpl implements
ProductService {
private static Map<String, Product> productRepo =
new HashMap<>();
static {
Product honey = new Product();
[Link]("1");
[Link]("Honey");
[Link]([Link](), honey);
}
@Override
public Collection<Product> getProducts() {
return [Link]();
}
}
The code here show the Rest Controller class file, here we
@Autowired the ProductService interface and called the methods.
package [Link];
import
[Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import
[Link];
import [Link];
import [Link];
@RestController
public class ProductServiceController {
@Autowired
ProductService productService;
@RequestMapping(value = "/products")
public ResponseEntity<Object> getProduct() {
return new
ResponseEntity<>([Link](),
[Link]);
}
@RequestMapping(value = "/products/{id}", method =
[Link])
public ResponseEntity<Object>
updateProduct(@PathVariable("id") String id,
@RequestBody Product product) {
[Link](id, product);
return new ResponseEntity<>("Product is updated
successsfully", [Link]);
}
@RequestMapping(value = "/products/{id}", method =
[Link])
public ResponseEntity<Object>
delete(@PathVariable("id") String id) {
[Link](id);
return new ResponseEntity<>("Product is deleted
successsfully", [Link]);
}
@RequestMapping(value = "/products", method =
[Link])
public ResponseEntity<Object>
createProduct(@RequestBody Product product) {
[Link](product);
return new ResponseEntity<>("Product is created
successfully", [Link]);
}
}
package [Link];
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/>
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands given below
−
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under
build/libs directory.
Now hit the below URL’s in POSTMAN application and you can see
the output as shown below −
Thymeleaf Templates
Thymeleaf converts your files into well-formed XML files. It
contains 6 types of templates as given below −
XML
Valid XML
XHTML
Valid XHTML
HTML5
Legacy HTML5
Web Application
You can use Thymeleaf templates to create a web application in
Spring Boot. You will have to follow the below steps to create a
web application in Spring Boot by using Thymeleaf.
package [Link];
import [Link];
import
[Link];
@Controller
public class WebController {
@RequestMapping(value = "/index")
public String index() {
return "index";
}
}
In the above example, the request URI is /index, and the control
is redirected into the [Link] file. Note that the [Link] file
should be placed under the templates directory and all JS and CSS
files should be placed under the static directory in classpath. In
the example shown, we used CSS file to change the color of the
text.
You can use the following code and created a CSS file in separate
folder css and name the file as [Link] −
h4 {
color: red;
}
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1" />
<link href = "css/[Link]" rel =
"stylesheet"/>
<title>Spring Boot Application</title>
</head>
<body>
<h4>Welcome to Thymeleaf Spring Boot web
application</h4>
</body>
</html>
Maven users can add the following dependency into the [Link]
file −
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
The code for main Spring Boot application class file is given below
−
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath />
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
compile group: '[Link]', name:
'spring-boot-starter-thymeleaf'
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the spring boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now hit the URL in your web browser and you can see the output
as shown −
[Link]
Consuming RESTful Web
Services
This chapter will discuss in detail about consuming a RESTful Web
Services by using jQuery AJAX.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
@Controller
public class ViewController {
}
You can define the Request URI methods to redirects into the
HTML file as shown below −
@RequestMapping(“/view-products”)
public String viewProducts() {
return “view-products”;
}
@RequestMapping(“/add-products”)
public String addProducts() {
return “add-products”;
}
[
{
"id": "1",
"name": "Honey"
},
{
"id": "2",
"name": "Almond"
}
]
In the HTML file, we added the jQuery library and written the code
to consume the RESTful web service on page load.
<script src =
"[Link]
[Link]"></script>
<script>
$(document).ready(function(){
$.getJSON("[Link]
function(result){
$.each(result, function(key,value) {
$("#productsJson").append([Link]+"
"+[Link]+" ");
});
});
});
</script>
{
"id":"3",
"name":"Ginger"
}
In the HTML file, we added the jQuery library and written the code
that submits the form to RESTful web service on clicking the
button.
<script src =
"[Link]
[Link]"></script>
<script>
$(document).ready(function() {
$("button").click(function() {
var productmodel = {
id : "3",
name : "Ginger"
};
var requestJSON =
[Link](productmodel);
$.ajax({
type : "POST",
url : "[Link]
headers : {
"Content-Type" : "application/json"
},
data : requestJSON,
success : function(data) {
alert(data);
},
error : function(data) {
}
});
});
});
</script>
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath />
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = ‘[Link]’
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = ‘[Link]’
version = ‘0.0.1-SNAPSHOT’
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile(‘[Link]:spring-boot-
starter-web’)
compile group: ‘[Link]’, name:
‘spring-boot-starter-thymeleaf’
testCompile(‘[Link]:spring-boot-
starter-test’)
}
package [Link];
import [Link];
import
[Link];
@Controller
public class ViewController {
@RequestMapping(“/view-products”)
public String viewProducts() {
return “view-products”;
}
@RequestMapping(“/add-products”)
public String addProducts() {
return “add-products”;
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1"/>
<title>View Products</title>
<script src =
"[Link]
[Link]"></script>
<script>
$(document).ready(function(){
$.getJSON("[Link]
function(result){
$.each(result, function(key,value) {
$("#productsJson").append([Link]+"
"+[Link]+" ");
});
});
});
</script>
</head>
<body>
<div id = "productsJson"> </div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1" />
<title>Add Products</title>
<script src =
"[Link]
[Link]"></script>
<script>
$(document).ready(function() {
$("button").click(function() {
var productmodel = {
id : "3",
name : "Ginger"
};
var requestJSON =
[Link](productmodel);
$.ajax({
type : "POST",
url :
"[Link]
headers : {
"Content-Type" :
"application/json"
},
data : requestJSON,
success : function(data) {
alert(data);
},
error : function(data) {
}
});
});
});
</script>
</head>
<body>
<button>Click here to submit the form</button>
</body>
</html>
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Now, you can create an executable JAR file, and run the Spring
Boot application by using the following Maven or Gradle
commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now hit the URL in your web browser and you can see the output
as shown −
[Link]
[Link]
Now, click the button Click here to submit the form and you
can see the result as shown −
Now, hit the view products URL and see the created product.
[Link]
Angular JS
To consume the APIs by using Angular JS, you can use the
examples given below −
[Link]('demo', [])
.controller('Hello', function($scope, $http) {
$[Link]('[Link]
then(function(response) {
$[Link] = [Link];
});
});
Use the following code to create the Angular JS Controller to
consume the POST API - [Link] −
[Link]('demo', [])
.controller('Hello', function($scope, $http) {
$[Link]('[Link]
then(function(response) {
[Link]("Product created successfully");
});
});
@RequestMapping(value = "/products")
@CrossOrigin(origins = "[Link]
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry
registry) {
[Link]("/products").allowedOrigins("http:/
/localhost:9000");
}
};
}
package [Link];
import [Link];
import
[Link]
ation;
import [Link];
import
[Link]
egistry;
import
[Link]
cConfigurer;
import
[Link]
cConfigurerAdapter;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry
registry) {
[Link]("/products").allowedOrigins("http:/
/localhost:8080");
}
};
}
}
Now, you can create a Spring Boot web application that runs on
8080 port and your RESTful web service application that can run
on the 9090 port. For further details about implementation about
RESTful Web Service, you can refer to the chapter
titled Consuming RESTful Web Services of this tutorial.
Spring Boot -
Internationalization
Internationalization is a process that makes your application
adaptable to different languages and regions without engineering
changes on the source code. In ither words, Internationalization is
a readiness of Localization.
Dependencies
We need the Spring Boot Starter Web and Spring Boot Starter
Thymeleaf dependency to develop a web application in Spring
Boot.
Maven
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Gradle
compile('[Link]:spring-boot-starter-web')
compile group: '[Link]', name: 'spring-boot-starter-
thymeleaf'
LocaleResolver
We need to determine default Locale of your application. We need
to add the LocaleResolver bean in our Spring Boot application.
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new
SessionLocaleResolver();
[Link]([Link]);
return sessionLocaleResolver;
}
LocaleChangeInterceptor
LocaleChangeInterceptor is a used to change the new Locale
based on the value of the language parameter added to a
request.
@Bean
public LocaleChangeInterceptor
localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor =
new LocaleChangeInterceptor();
[Link]("language");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry
registry) {
[Link](localeChangeInterceptor());
}
Messages Sources
Spring Boot application by default takes the message sources
from src/main/resources folder under the classpath. The default
locale message file name should be [Link] and
files for each locale should name as messages_XX.properties.
The “XX” represents the locale code.
HTML file
In the HTML file, use the syntax #{key} to display the messages
from the properties file.
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath />
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
compile group: '[Link]', name:
'spring-boot-starter-thymeleaf'
testCompile('[Link]:spring-boot-
starter-test')
}
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
package [Link];
import [Link];
import
[Link];
@Controller
public class ViewController {
@RequestMapping("/locale")
public String locale() {
return "locale";
}
}
package [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
import
[Link]
ceptorRegistry;
import
[Link]
cConfigurerAdapter;
import
[Link]
eptor;
import
[Link]
ver;
@Configuration
public class Internationalization extends
WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver sessionLocaleResolver = new
SessionLocaleResolver();
[Link]([Link]);
return sessionLocaleResolver;
}
@Bean
public LocaleChangeInterceptor
localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor =
new LocaleChangeInterceptor();
[Link]("language");
return localeChangeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry
registry) {
[Link](localeChangeInterceptor());
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1"/>
<title>Internationalization</title>
</head>
<body>
<h1 th:text = "#{[Link]}"></h1>
</body>
</html>
You can create an executable JAR file, and run the Spring boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
You will find that the application has started on the Tomcat port
8080.
Now hit the URL [Link] in your web
browser and you can see the following output −
[Link]
cron_expressions.htm
@SpringBootApplication
@EnableScheduling
package [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class Scheduler {
@Scheduled(cron = "0 * 9 * * ?")
public void cronJobSch() {
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd HH:mm:[Link]");
Date now = new Date();
String strDate = [Link](now);
[Link]("Java cron job expression:: "
+ strDate);
}
}
The following screenshot shows how the application has started at
[Link] and for every one minute from that time the cron job
scheduler task has executed.
Fixed Rate
Fixed Rate scheduler is used to execute the tasks at the specific
time. It does not wait for the completion of previous task. The
values should be in milliseconds. The sample code is shown here
−
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
}
package [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class Scheduler {
@Scheduled(fixedRate = 1000)
public void fixedRateSch() {
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd HH:mm:[Link]");
Fixed Delay
Fixed Delay scheduler is used to execute the tasks at a specific
time. It should wait for the previous task completion. The values
should be in milliseconds. A sample code is shown here −
Here, the initialDelay is the time after which the task will be
executed the first time after the initial delay value.
package [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
@Component
public class Scheduler {
@Scheduled(fixedDelay = 1000, initialDelay = 3000)
public void fixedDelaySch() {
SimpleDateFormat sdf = new
SimpleDateFormat("yyyy-MM-dd HH:mm:[Link]");
Date now = new Date();
String strDate = [Link](now);
[Link]("Fixed Delay scheduler:: " +
strDate);
}
}
You need to follow the steps given below to configure the HTTPS
and the port 443 in Spring Boot application −
Self-Signed Certificate
To create a self-signed certificate, Java Run Time environment
comes bundled with certificate management utility key tool. This
utility tool is used to create a Self-Signed certificate. It is shown in
the code given here −
Configure HTTPS
We need to provide the server port as 443, key-store file path,
key-store-password, key-store-type and key alias name into the
[Link] file. Observe the code given here −
[Link]: 443
[Link]-store: keystore.p12
[Link]-store-password: springboot
[Link]: PKCS12
[Link]: tomcat
You can use the following code if you are using YAML properties
use below [Link] −
server:
port: 443
ssl:
key-store: keystore.p12
key-store-password: springboot
keyStoreType: PKCS12
keyAlias: tomcat
You can create an executable JAR file, and run the spring boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, the application has started on the Tomcat port 443 with
https as shown −
The code for main Spring Boot application class file is as shown
below −
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
urekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifac
tId>
</dependency>
compile('[Link]:spring-cloud-starter-eureka-server')
Maven [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>eurekaserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eurekaserver</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-eureka-
server</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
starter-eureka-server')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
[Link] = false
[Link] = false
[Link] = 8761
eureka:
client:
registerWithEureka: false
fetchRegistry: false
server:
port: 8761
Now, you can create an executable JAR file, and run the Spring
Boot application by using the Maven or Gradle commands shown
below −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
You can find that the application has started on the Tomcat port
8761 as shown below −
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
compile('[Link]:spring-cloud-starter-eureka')
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
ient;
@SpringBootApplication
@EnableEurekaClient
public class EurekaclientApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
eureka:
client:
serviceUrl:
defaultZone: [Link]
instance:
preferIpAddress: true
spring:
application:
name: eurekaclient
[Link] =
[Link]
[Link] = true
[Link] = eurekaclient
Now, add the Rest Endpoint to return String in the main Spring
Boot application and the Spring Boot Starter web dependency in
build configuration file. Observe the code given below −
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
ient;
import
[Link];
import
[Link];
@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaclientApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String home() {
return "Eureka Client application";
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>eurekaclient</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eurekaclient</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</projecta>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
starter-eureka')
testCompile('[Link]:spring-boot-
starter-test')
compile('[Link]:spring-boot-
starter-web')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, the application has started on the Tomcat port 8080 and
Eureka Client application is registered with the Eureka Server as
shown below −
Hit the URL [Link] in your web browser and you
can see the Eureka Client application is registered with Eureka
Server.
package [Link];
import [Link];
import
[Link]
ation;
import
[Link];
@SpringBootApplication
@EnableZuulProxy
public class ZuulserverApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
You will have to add the Spring Cloud Starter Zuul dependency in
our build configuration file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
compile('[Link]:spring-cloud-starter-zuul')
[Link] = zuulserver
[Link] = /api/demo/**
[Link] = [Link]
[Link] = 8111
yaml file users can use the [Link] file shown below −
server:
port: 8111
spring:
application:
name: zuulserver
zuul:
routes:
products:
path: /api/demo/**
url: [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>zuulserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>zuulserver</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
starter-zuul')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands given below
−
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command shown below −
You can find the application has started on the Tomcat port 8111
as shown here.
Maven users can add the below dependency into the [Link] file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
compile('[Link]:spring-cloud-config-server')
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
ver;
@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
[Link] = 8888
[Link]=file:
///C:/configprop/
SPRING_PROFILES_ACTIVE=native
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>configserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>configserver</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<scope>import</scope>
</dependency>
</dependencies>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
config-server')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
Now, create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
For Gradle, use the command given below −
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Maven users can add the following dependency into the [Link]
file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
compile('[Link]:spring-cloud-starter-config')
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
reshScope;
@SpringBootApplication
@RefreshScope
public class ConfigclientApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
[Link] = config-client
[Link] = [Link]
The code for writing a simple REST Endpoint to read the welcome
message from the configuration server is given below −
package [Link];
import
[Link];
import [Link];
import
[Link]
ation;
import
[Link]
reshScope;
import
[Link];
import
[Link];
@SpringBootApplication
@RefreshScope
@RestController
public class ConfigclientApplication {
@Value("${[Link]}")
String welcomeText;
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String welcomeText() {
return welcomeText;
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command shown here:
Maven users can add the below dependency in your [Link] file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
[Link] = false
management:
security:
enabled: false
If you want to use the separate port number for accessing the
Spring boot actutator endpoints add the management port
number in [Link] file.
[Link] = 9000
management:
port: 9000
Now, you can create an executable JAR file, and run the Spring
Boot application by using the following Maven or Gradle
commands.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, you can run the JAR file by using the following command −
Now, the application has started on the Tomcat port 8080. Note
that if you specified the management port number, then same
application is running on two different port numbers.
ENDPOIN
USAGE
TS
To view the application metrics such as memory used, memory free, threads,
/metrics
classes, system uptime etc.
/beans To view the Spring beans and its types, scopes and dependency.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.5</version>
</dependency>
package [Link];
import [Link];
import
[Link]
ation;
import
[Link];
@SpringBootApplication
@EnableAdminServer
public class AdminserverApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
[Link] = 9090
[Link] = adminserver
For YAML users, use the following properties to define the port
number and application name in [Link] file.
server:
port: 9090
spring:
application:
name: adminserver
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>adminserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>adminserver</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-admin-server</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-admin-server-ui</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
compile group: '[Link]', name: 'spring-boot-
admin-server', version: '1.5.5'
compile group: '[Link]', name: 'spring-boot-
admin-server-ui', version: '1.5.5'
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under
build/libs directory.
Now, run the JAR file by using the command given below −
Now hit the below URL from your web browser and see the Admin
Server UI.
[Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Gradle users can add the following dependencies in your
[Link] file.
Now, add the Spring Boot Admin Server URL into your application
properties file.
[Link] = [Link]
spring:
boot:
admin:
url: [Link]
Now, create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now hit the following URL from your web browser and see your
spring Boot application is registered with Spring Boot Admin
Server.
[Link]
Now, click the Details button and the see the actuator endpoints
in Admin Server UI.
<dependency>
<groupId>[Link]</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
ger2;
@SpringBootApplication
@EnableSwagger2
public class SwaggerDemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis([Link]("[Link]
erdemo")).build();
}
Now, add this bean in main Spring Boot application class file itself
and your main Spring Boot application class will look as shown
below −
package [Link];
import [Link];
import
[Link]
ation;
import [Link];
import
[Link]
s;
import [Link];
import
[Link];
import
[Link]
ger2;
@SpringBootApplication
@EnableSwagger2
public class SwaggerDemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@Bean
public Docket productApi() {
return new
Docket(DocumentationType.SWAGGER_2).select()
.apis([Link]("com
.[Link]")).build();
}
}
Now, add the below Spring Boot Starter Web dependency in your
build configuration file to write a REST Endpoints as shown below
−
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
compile('[Link]:spring-boot-starter-web')
Now, the code to build two simple RESTful web services GET and
POST in Rest Controller file is shown here −
package [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link];
@RestController
public class SwaggerAPIController {
@RequestMapping(value = "/products", method =
[Link])
public List<String> getProducts() {
List<String> productsList = new ArrayList<>();
[Link]("Honey");
[Link]("Almond");
return productsList;
}
@RequestMapping(value = "/products", method =
[Link])
public String createProduct() {
return "Product is saved successfully";
}
}
Maven – [Link]
<groupId>[Link]</groupId>
<artifactId>swagger-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>swagger-demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
} dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
compile group: '[Link]', name: 'springfox-
swagger2', version: '2.7.0'
compile group: '[Link]', name: 'springfox-
swagger-ui', version: '2.7.0'
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command shown here −
Now, the application will start on the Tomcat port 8080 as shown
−
Now, hit the URL in your web browser and see the Swagger API
functionalities.
[Link]
Spring Boot - Creating Docker
Image
Docker is a container management service that eases building
and deployment. If you are a beginner to Docker, you can learn
about is in detail at this link
− [Link]
Create Dockerfile
First, create a file with the name Dockerfile under the
directories src/main/docker with the contents shown below.
Note that this file is important to create a Docker image.
FROM java:8
VOLUME /tmp
ADD [Link] [Link]
RUN bash -c 'touch /[Link]'
ENTRYPOINT
["java","-[Link]=file:/dev/./urandom","-
jar","/[Link]"]
Maven
For Maven, add the Docker Maven plugin into your build
configuration file [Link]
<properties>
<[Link]>spring-boot-tutorialspoint</docker
.[Link]>
</properties>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${[Link]}/$
{[Link]}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<directory>$
{[Link]}</directory>
<include>$
{[Link]}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>dockerapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>dockerapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>spring-boot-
tutorialspoint</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${[Link]}/$
{[Link]}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<directory>$
{[Link]}</directory>
<include>$
{[Link]}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
After build success, you can see the output on the console as
shown below −
Gradle
To build a Docker image by using Gradle build configuration, we
need to add the docker plugin and need to write a
task buildDocker to create a Docker image.
The code for Gradle Docker configuration is given below.
buildscript {
.....
dependencies {
.....
classpath('[Link]:gradle-
docker:1.2')
}
}
group = 'spring-boot-tutorialspoint'
.....
apply plugin: 'docker'
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
classpath('[Link]:gradle-
docker:1.2')
}
}
group = 'spring-boot-tutorialspoint'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
task buildDocker(type: Docker, dependsOn: build) {
applicationName = [Link]
dockerfile = file('src/main/docker/Dockerfile')
doFirst {
copy {
from jar
into stageDir
}
}
}
[application-name,traceid,spanid,zipkin-export]
Where,
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
compile('[Link]:spring-cloud-starter-sleuth')
Now, add the Logs into your Spring Boot application Rest
Controller class file as shown here −
package [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class SleuthappApplication {
private static final Logger LOG =
[Link]([Link]());
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping("/")
public String index() {
[Link]([Link], "Index API is calling");
return "Welcome Sleuth!";
}
}
[Link] = tracinglogs
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>sleuthapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sleuthapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
starter-sleuth')
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command shown here −
Now, hit the URL in your web browser and see the output in
console log.
[Link]
You can see the following logs in the console window. Observe
that log is printed in the following format [application-name,
traceid, spanid, zipkin-export]
Zipkin Server
Zipkin is an application that monitors and manages the Spring
Cloud Sleuth logs of your Spring Boot application. To build a
Zipkin server, we need to add the Zipkin UI and Zipkin Server
dependencies in our build configuration file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
Gradle users can add the below dependency in your [Link]
file −
compile('[Link]:zipkin-autoconfigure-ui')
compile('[Link]:zipkin-server')
[Link] = 9411
server:
port: 9411
package [Link];
import [Link];
import
[Link]
ation;
import [Link];
@SpringBootApplication
@EnableZipkinServer
public class ZipkinappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Maven – [Link]
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "[Link]
xmlns:xsi = "[Link]
instance"
xsi:schemaLocation =
"[Link]
[Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>zipkinapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>zipkinapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:zipkin-autoconfigure-ui')
compile('[Link]:zipkin-server')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the below Maven or Gradle commands −
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, hit the below URL and see the Zipkin server UI.
[Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
compile('[Link]:spring-cloud-sleuth-zipkin')
@Bean
public AlwaysSampler defaultSampler() {
return new AlwaysSampler();
}
[Link] = [Link]
Then, provide the trace id and find the traces in Zipkin UI.
[Link]
<dependency>
<groupId>[Link]</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
compile('[Link]:flyway-core')
compile('[Link]:spring-boot-starter-
jdbc')
compile('[Link]:spring-boot-starter-
web')
compile('mysql:mysql-connector-java')
[Link] = flywayapp
[Link] =
[Link]
[Link] =
jdbc:mysql://localhost:3306/USERSERVICE?
autoreconnect=true
[Link] = root
[Link] = root
[Link] = true
[Link] = true
[Link] = 60000
[Link] = 30000
[Link] = SELECT 1
[Link]-active = 15
[Link]-idle = 10
[Link]-wait = 8000
[Link] = jdbc:mysql://localhost:3306/mysql
[Link] = USERSERVICE
[Link] = root
[Link] = root
spring:
application:
name: flywayapp
datasource:
driverClassName: [Link]
url: "jdbc:mysql://localhost:3306/USERSERVICE?
autoreconnect=true"
password: "root"
username: "root"
testOnBorrow: true
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1
max-active: 15
max-idle: 10
max-wait: 8000
flyway:
url: jdbc:mysql://localhost:3306/mysql
schemas: USERSERVICE
user: "root"
password: "root"
The main Spring Boot application class file code is given below −
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class FlywayappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>flywayapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>flywayapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:flyway-core')
compile('[Link]:spring-boot-
starter-jdbc')
compile('[Link]:spring-boot-
starter-web')
compile('mysql:mysql-connector-java')
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands given below
−
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
For Gradle, you can use the command shown here −
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, Tomcat started on the port 8080 and in the console window
you can see the flyway database logs as shown here.
Maven users can add the following dependency into the [Link]
file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
compile('[Link]:spring-boot-starter-mail')
The code of main Spring Boot application class file is given below
−
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class EmailappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
You can write a simple Rest API to send to email in Rest Controller
class file as shown.
package [Link];
import
[Link];
import
[Link];
@RestController
public class EmailController {
@RequestMapping(value = "/sendemail")
public String sendEmail() {
return "Email sent successfully";
}
}
[Link]([Link],
[Link]("tutorialspoint@[Link]"));
[Link]("Tutorials point email");
[Link]("Tutorials point email",
"text/html");
[Link](new Date());
[Link]("/var/tmp/[Link]");
[Link](attachPart);
[Link](multipart);
[Link](msg);
}
Now, call the above sendmail() method from the Rest API as
shown −
@RequestMapping(value = "/sendemail")
public String sendEmail() throws AddressException,
MessagingException, IOException {
sendmail();
return "Email sent successfully";
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>emailapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>emailapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
compile('[Link]:spring-boot-
starter-mail')
testCompile('[Link]:spring-boot-
starter-test')
}
Now, you can create an executable JAR file, and run the Spring
Boot application by using the Maven or Gradle commands shown
below −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command given below −
You can see that the application has started on the Tomcat port
8080.
Now hit the following URL from your web browser and you will
receive an email.
[Link]
Spring Boot - Hystrix
Hystrix is a library from Netflix. Hystrix isolates the points of
access between the services, stops cascading failures across
them and provides the fallback options.
For example, when you are calling a 3rd party application, it takes
more time to send the response. So at that time, the control goes
to the fallback method and returns the custom response to your
application.
In this chapter you are going to see How to implement the Hystrix
in a Spring Boot application.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
compile('[Link]:spring-cloud-starter-hystrix')
The main Spring Boot application class file code is given below −
package [Link];
import [Link];
import
[Link]
ation;
import
[Link]
;
@SpringBootApplication
@EnableHystrix
public class HystrixappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Now write a simple Rest Controller such that it returns the String
after 3 seconds from the requested time.
@RequestMapping(value = "/")
public String hello() throws InterruptedException {
[Link](3000);
return "Welcome Hystrix";
}
@HystrixCommand(fallbackMethod = "fallback_hello",
commandProperties = {
@HystrixProperty(name =
"[Link]",
value = "1000")
})
The complete Rest Controller class file that contains REST API and
Hystrix properties is shown here −
@RequestMapping(value = "/")
@HystrixCommand(fallbackMethod = "fallback_hello",
commandProperties = {
@HystrixProperty(name =
"[Link]",
value = "1000")
})
public String hello() throws InterruptedException {
[Link](3000);
return "Welcome Hystrix";
}
private String fallback_hello() {
return "Request fails. It takes long time to
response";
}
package [Link];
import [Link];
import
[Link]
Property;
import
[Link]
ation;
import
[Link]
;
import
[Link];
import
[Link];
import
[Link]
Command;
@SpringBootApplication
@EnableHystrix
@RestController
public class HystrixappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
@HystrixCommand(fallbackMethod = "fallback_hello",
commandProperties = {
@HystrixProperty(name =
"[Link]",
value = "1000")
})
public String hello() throws InterruptedException {
[Link](3000);
return "Welcome Hystrix";
}
private String fallback_hello() {
return "Request fails. It takes long time to
response";
}
}
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>hystrixapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hystrixapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
<[Link]>[Link]</spring-
[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${[Link]}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
ext {
springCloudVersion = '[Link]'
}
dependencies {
compile('[Link]:spring-cloud-
starter-hystrix')
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
dependencyManagement {
imports {
mavenBom "[Link]:spring-cloud-
dependencies:${springCloudVersion}"
}
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command given below −
This will start the application on the Tomcat port 8080 as shown
below −
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>webjars-locator</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>sockjs-client</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>stomp-websocket</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.7</version> </dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jquery</artifactId>
<version>3.1.0</version>
</dependency>
compile("[Link]:spring-boot-starter-
websocket")
compile("[Link]:webjars-locator")
compile("[Link]:sockjs-client:1.0.2")
compile("[Link]:stomp-websocket:2.3.3")
compile("[Link]:bootstrap:3.3.7")
compile("[Link]:jquery:3.1.0")
package [Link];
import
[Link]
eMapping;
import
[Link]
;
import [Link];
@Controller
public class GreetingController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message)
throws Exception {
[Link](1000); // simulated delay
return new Greeting("Hello, " + [Link]()
+ "!");
}
}
Now, configure Spring for STOMP messaging. Write a
WebSocketConfig class file that extends the
AbstractWebSocketMessageBrokerConfigurer class as shown
below.
package [Link];
import
[Link];
import
[Link]
Registry;
import
[Link]
ctWebSocketMessageBrokerConfigurer;
import
[Link]
WebSocketMessageBroker;
import
[Link]
ndpointRegistry;
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends
AbstractWebSocketMessageBrokerConfigurer {
@Override
public void
configureMessageBroker(MessageBrokerRegistry config) {
[Link]("/topic");
[Link]("/app");
}
@Override
public void
registerStompEndpoints(StompEndpointRegistry registry)
{
[Link]("/tutorialspoint-
websocket").withSockJS();
}
}
<!DOCTYPE html>
<html>
<head>
<title>Hello WebSocket</title>
<link href =
"/webjars/bootstrap/css/[Link]" rel =
"stylesheet">
<link href = "/[Link]" rel = "stylesheet">
<script src =
"/webjars/jquery/[Link]"></script>
<script src =
"/webjars/sockjs-client/[Link]"></script>
<script src =
"/webjars/stomp-websocket/[Link]"></script>
<script src = "/[Link]"></script>
</head>
<body>
<noscript>
<h2 style = "color: #ff0000">
Seems your browser doesn't support
Javascript! Websocket relies on Javascript being
enabled. Please enable Javascript and
reload this page!
</h2>
</noscript>
<div id = "main-content" class = "container">
<div class = "row">
<div class = "col-md-6">
<form class = "form-inline">
<div class = "form-group">
<label for = "connect">WebSocket
connection:</label>
<button id = "connect" class =
"btn btn-default" type = "submit">Connect</button>
<button id = "disconnect" class =
"btn btn-default" type = "submit" disabled =
"disabled">Disconnect
</button>
</div>
</form>
</div>
function setConnected(connected) {
$("#connect").prop("disabled", connected);
$("#disconnect").prop("disabled", !connected);
if (connected) {
$("#conversation").show();
} else {
$("#conversation").hide();
}
$("#greetings").html("");
}
function connect() {
var socket = new SockJS('/tutorialspoint-
websocket');
stompClient = [Link](socket);
[Link]({}, function (frame) {
setConnected(true);
[Link]('Connected: ' + frame);
[Link]('/topic/greetings',
function (greeting) {
showGreeting([Link]([Link]).content);
});
});
}
function disconnect() {
if (stompClient !== null) {
[Link]();
}
setConnected(false);
[Link]("Disconnected");
}
function sendName() {
[Link]("/app/hello", {},
[Link]({'name': $("#name").val()}));
}
function showGreeting(message) {
$("#greetings").append("<tr><td>" + message +
"</td></tr>");
}
$(function () {
$( "form" ).on('submit', function (e)
{[Link]();});
$( "#connect" ).click(function() { connect(); });
$( "#disconnect" ).click(function()
{ disconnect(); });
$( "#send" ).click(function() { sendName(); });
});
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class WebsocketappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>websocketapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>websocketapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
</parent>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>webjars-locator</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>sockjs-client</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>stomp-websocket</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.7</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>jquery</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<[Link]>1.8</[Link]>
</properties>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:[Link]")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
jar {
baseName = 'websocketapp'
version = '0.1.0'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile("[Link]:spring-boot-
starter-websocket")
compile("[Link]:webjars-locator")
compile("[Link]:sockjs-client:1.0.2")
compile("[Link]:stomp-websocket:2.3.3")
compile("[Link]:bootstrap:3.3.7")
compile("[Link]:jquery:3.1.0")
testCompile("[Link]:spring-boot-
starter-test")
}
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>hsqldb</artifactId>
</dependency>
Now, add the simple CSV data file under classpath resources –
src/main/resources and name the file as [Link] as shown −
William,John
Mike, Sebastian
Lawarance, Lime
package [Link];
public class User {
private String lastName;
private String firstName;
public User() {
}
public User(String firstName, String lastName) {
[Link] = firstName;
[Link] = lastName;
}
public void setFirstName(String firstName) {
[Link] = firstName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
[Link] = lastName;
}
@Override
public String toString() {
return "firstName: " + firstName + ", lastName: " + lastName;
}
}
package [Link];
import [Link];
import [Link];
import [Link];
@Override
public User process(final User user) throws
Exception {
final String firstName =
[Link]().toUpperCase();
final String lastName =
[Link]().toUpperCase();
final User transformedPerson = new
User(firstName, lastName);
package [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
.EnableBatchProcessing;
import
[Link]
.JobBuilderFactory;
import
[Link]
.StepBuilderFactory;
import
[Link]
ementer;
import
[Link]
mSqlParameterSourceProvider;
import
[Link]
iter;
import
[Link];
import
[Link]
FieldSetMapper;
import
[Link]
Mapper;
import
[Link]
LineTokenizer;
import
[Link];
import [Link];
import
[Link];
import [Link];
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Autowired
public DataSource dataSource;
@Bean
public FlatFileItemReader<User> reader() {
FlatFileItemReader<User> reader = new
FlatFileItemReader<User>();
[Link](new
ClassPathResource("[Link]"));
[Link](new
DefaultLineMapper<User>() {
{
setLineTokenizer(new
DelimitedLineTokenizer() {
{
setNames(new String[] { "firstName",
"lastName" });
}
});
setFieldSetMapper(new
BeanWrapperFieldSetMapper<User>() {
{
setTargetType([Link]);
}
});
}
});
return reader;
}
@Bean
public UserItemProcessor processor() {
return new UserItemProcessor();
}
@Bean
public JdbcBatchItemWriter<User> writer() {
JdbcBatchItemWriter<User> writer = new
JdbcBatchItemWriter<User>();
[Link](new
BeanPropertyItemSqlParameterSourceProvider<User>());
[Link]("INSERT INTO USERS (first_name,
last_name) VALUES (:firstName, :lastName)");
[Link](dataSource);
return writer;
}
@Bean
public Job
importUserJob(JobCompletionNotificationListener
listener) {
return
[Link]("importUserJob").incrementer(
new
RunIdIncrementer()).listener(listener).flow(step1()).en
d().build();
}
@Bean
public Step step1() {
return [Link]("step1").<User,
User>chunk(10).reader(reader()).processor(processor()).
writer(writer()).build();
}
}
The reader() method is used to read the data from the CSV file
and writer() method is used to write a data into the SQL.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
tenerSupport;
import
[Link];
import [Link];
import [Link];
import [Link];
@Component
public class JobCompletionNotificationListener extends
JobExecutionListenerSupport {
private static final Logger log =
[Link](JobCompletionNotificationListen
[Link]);
private final JdbcTemplate jdbcTemplate;
@Autowired
public
JobCompletionNotificationListener(JdbcTemplate
jdbcTemplate) {
[Link] = jdbcTemplate;
}
@Override
public void afterJob(JobExecution jobExecution) {
if ([Link]() ==
[Link]) {
[Link]("!!! JOB FINISHED !! It's time to
verify the results!!");
@Override
public User mapRow(ResultSet rs, int row)
throws SQLException {
return new User([Link](1),
[Link](2));
}
});
Now, create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-kafka</artifactId>
<version>[Link]</version>
</dependency>
Producing Messages
To produce messages into Apache Kafka, we need to define the
Configuration class for Producer configuration as shown −
package [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import [Link];
import
[Link];
import
[Link]
ory;
import [Link];
import [Link];
@Configuration
public class KafkaProducerConfig {
@Bean
public ProducerFactory<String, String>
producerFactory() {
Map<String, Object> configProps = new
HashMap<>();
[Link](ProducerConfig.BOOTSTRAP_SERVERS_CONFIG
, "localhost:9092");
[Link](ProducerConfig.KEY_SERIALIZER_CLASS_CON
FIG, [Link]);
[Link](ProducerConfig.VALUE_SERIALIZER_CLASS_C
ONFIG, [Link]);
return new
DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate()
{
return new KafkaTemplate<>(producerFactory());
}
}
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
package [Link];
import [Link];
import [Link];
import
[Link];
import
[Link]
r;
import [Link];
import
[Link];
import
[Link];
import
[Link]
rContainerFactory;
import [Link];
import
[Link]
ory;
@EnableKafka
@Configuration
public class KafkaConsumerConfig {
@Bean
public ConsumerFactory<String, String>
consumerFactory() {
Map<String, Object> props = new HashMap<>();
[Link](ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
"localhost:2181");
[Link](ConsumerConfig.GROUP_ID_CONFIG, "group-
id");
[Link](ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
[Link]);
[Link](ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFI
G, [Link]);
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
public
ConcurrentKafkaListenerContainerFactory<String, String>
kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String,
String>
factory = new
ConcurrentKafkaListenerContainerFactory<>();
[Link](consumerFactory());
return factory;
}
}
Your main Spring Boot application class file code is given below −
package [Link];
import
[Link];
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import [Link];
@SpringBootApplication
public class KafkaDemoApplication implements
ApplicationRunner {
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>kafka-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>kafka-demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-kafka</artifactId>
<version>[Link]</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
compile group: '[Link]', name:
'spring-kafka', version: '[Link]'
testCompile('[Link]:spring-boot-
starter-test')
}
Now, create an executable JAR file, and run the Spring Boot
application by using the below Maven or Gradle commands as
shown −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
In this chapter, you are going to learn how to implement the SMS
sending and making voice calls by using Spring Boot with Twilio.
Note − We used the Trail account in Twilio to send the SMS and
making voice calls. You can learn more about Twilio
at [Link].
<dependency>
<groupId>[Link]</groupId>
<artifactId>twilio</artifactId>
<version>7.16.1</version>
</dependency>
static {
[Link](ACCOUNT_SID, AUTH_ID);
}
Sending SMS
To send the SMS, we need to provide a from-number and to-
number to the [Link]() method. Message body content
also we need to provide for the method [Link]()as
shown −
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
import [Link];
import [Link];
import [Link];
@SpringBootApplication
public class SmsdemoApplication implements
ApplicationRunner {
private final static String ACCOUNT_SID = "<your-
account-sid>";
private final static String AUTH_ID = "<your-auth-
id>";
static {
[Link](ACCOUNT_SID, AUTH_ID);
}
public static void main(String[] args) {
[Link]([Link],
args);
}
@Override
public void run(ApplicationArguments arg0) throws
Exception {
[Link](new PhoneNumber("to-number"), new
PhoneNumber("from-number"),
"Message from Spring Boot
Application").create();
}
}
Maven – [Link]
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "[Link]
xmlns:xsi = "[Link]
instance"
xsi:schemaLocation =
"[Link]
[Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>smsdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>smsdemo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>twilio</artifactId>
<version>7.16.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
testCompile('[Link]:spring-boot-
starter-test')
compile group: "[Link]", name:"twilio",
version: "7.11.+"
}
You can create an executable JAR file, and run the spring boot
application by using the following Maven or Gradle commands −
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Voice Calls
To make voice calls by using Twilio, we need to call the
[Link]() method. For this method, we need to provide a to-
number, from-number, and voice-note as shown here.
The code for main Spring Boot application class file is given
below.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
ation;
import [Link];
import [Link];
import [Link];
@SpringBootApplication
public class SmsdemoApplication implements
ApplicationRunner {
private final static String ACCOUNT_SID = "<ACCOUNT-
SID>";
private final static String AUTH_ID = "AUTH-ID";
static {
[Link](ACCOUNT_SID, AUTH_ID);
}
public static void main(String[] args) {
[Link]([Link],
args);
}
@Override
public void run(ApplicationArguments arg0) throws
Exception {
[Link](new PhoneNumber("<to-number>"), new
PhoneNumber("<from-number>"),
new
URI("[Link]
}
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>smsdemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>smsdemo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>twilio</artifactId>
<version>7.16.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
testCompile('[Link]:spring-boot-
starter-test')
compile group: "[Link]", name:"twilio",
version: "7.11.+"
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command given here −
Press any key after attending the call, you will hear the voice note
from [Link]
Note − In this example, we used the Trail account. So, you should
verify the numbers before making calls.
In this tutorial, we are going to see how to write a unit test case
by using Mockito and Web Controller.
Mockito
For injecting Mockito Mocks into Spring Beans, we need to add the
Mockito-core dependency in our build configuration file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>mockito-core</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
package [Link];
import [Link];
@Service
public class ProductService {
public String getProductName() {
return "Honey";
}
}
Now, inject the ProductService class into another Service class file
as shown.
package [Link];
import
[Link];
import [Link];
@Service
public class OrderService {
@Autowired
ProductService productService;
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class MockitoDemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
package [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
import [Link];
@Profile("test")
@Configuration
public class ProductServiceTestConfiguration {
@Bean
@Primary
public ProductService productService() {
return [Link]([Link]);
}
}
Now, you can write a Unit Test case for Order Service under
the src/test/resources package.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import [Link];
import
[Link].junit4.SpringJUnit4Cla
ssRunner;
@SpringBootTest
@ActiveProfiles("test")
@RunWith([Link])
public class MockitoDemoApplicationTests {
@Autowired
private OrderService orderService;
@Autowired
private ProductService productService;
@Test
public void
whenUserIdIsProvided_thenRetrievedNameIsCorrect() {
[Link]([Link]()).thenRetur
n("Mock Product Name");
String testName = [Link]();
[Link]("Mock Product Name",
testName);
}
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>mockito-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mockito-demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>mockito-core</artifactId>
<version>2.13.0</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
compile group: '[Link]', name: 'mockito-core',
version: '2.13.0'
testCompile('[Link]:spring-boot-
starter-test')
}
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle1 commands.
For Writing a Unit Test, we need to add the Spring Boot Starter
Test dependency in your build configuration file as shown below.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
testCompile('[Link]:spring-boot-starter-test')
package [Link];
import [Link];
import [Link];
import
[Link];
import
[Link];
import
[Link].junit4.SpringJUnit4Cla
ssRunner;
import
[Link]
n;
import [Link];
import
[Link]
ers;
import
[Link];
import [Link];
import
[Link];
import
[Link];
import [Link];
@RunWith([Link])
@SpringBootTest(classes = [Link])
@WebAppConfiguration
public abstract class AbstractTest {
protected MockMvc mvc;
@Autowired
WebApplicationContext webApplicationContext;
protected void setUp() {
mvc =
[Link](webApplicationContex
t).build();
}
protected String mapToJson(Object obj) throws
JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
return [Link](obj);
}
protected <T> T mapFromJson(String json, Class<T>
clazz)
throws JsonParseException, JsonMappingException,
IOException {
Next, write a class file that extends the AbstractTest class and
write a Unit Test for each method such GET, POST, PUT and
DELETE.
The code for GET API Test case is given below. This API is to view
the list of products.
@Test
public void getProductsList() throws Exception {
String uri = "/products";
MvcResult mvcResult =
[Link]([Link](uri)
.accept(MediaType.APPLICATION_JSON_VALUE)).andRet
urn();
The code for POST API test case is given below. This API is to
create a product.
@Test
public void createProduct() throws Exception {
String uri = "/products";
Product product = new Product();
[Link]("3");
[Link]("Ginger");
The code for PUT API Test case is given below. This API is to
update the existing product.
@Test
public void updateProduct() throws Exception {
String uri = "/products/2";
Product product = new Product();
[Link]("Lemon");
The code for Delete API Test case is given below. This API will
delete the existing product.
@Test
public void deleteProduct() throws Exception {
String uri = "/products/2";
MvcResult mvcResult =
[Link]([Link](uri)).andRetu
rn();
int status = [Link]().getStatus();
assertEquals(200, status);
String content =
[Link]().getContentAsString();
assertEquals(content, "Product is deleted
successsfully");
}
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link]
uestBuilders;
import [Link];
public class ProductServiceControllerTest extends
AbstractTest {
@Override
@Before
public void setUp() {
[Link]();
}
@Test
public void getProductsList() throws Exception {
String uri = "/products";
MvcResult mvcResult =
[Link]([Link](uri)
.accept(MediaType.APPLICATION_JSON_VALUE)).and
Return();
You can create an executable JAR file, and run the Spring Boot
application by using the Maven or Gradle commands given below
−
You can see the rest results in console window as shown below.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
Connect to H2 database
To connect the H2 database, we need to add the H2 database
dependency in our build configuration file.
For Maven users, add the below dependency in your [Link] file.
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
compile('com.h2database:h2')
We need to create the [Link] file and [Link] file under the
classpath src/main/resources directory to connect the H2
database.
Connect MySQL
To connect the MySQL database, we need to add the MySQL
dependency into our build configuration file.
compile('mysql:mysql-connector-java')
[Link] =
[Link]
[Link] =
jdbc:mysql://localhost:3306/PRODUCTSERVICE?
autoreconnect = true
[Link] = root
[Link] = root
[Link] = true
[Link] = true
[Link] = 60000
[Link] = 30000
[Link] = SELECT 1
[Link]-active = 15
[Link]-idle = 10
[Link]-wait = 8000
spring:
datasource:
driverClassName: [Link]
url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?
autoreconnect=true"
username: "root"
password: "root"
testOnBorrow: true
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1
max-active: 15
max-idle: 10
max-wait: 8000
Connect Redis
Redis is an open source database used to store the in-memory
data structure. To connect the Redis database in Spring Boot
application, we need to add the Redis dependency in our build
configuration file.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
compile('[Link]:spring-boot-starter-data-redis')
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory = new
JedisConnectionFactory();
[Link]("localhost");
[Link](6000);
[Link](true);
return jedisConFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new
RedisTemplate<>();
[Link](jedisConnectionFactory())
;
[Link](new
StringRedisSerializer());
[Link](new
StringRedisSerializer());
[Link](new
StringRedisSerializer());
[Link](new
StringRedisSerializer());
return template;
}
Now auto wire the RedisTemplate class and access the data from
Redis database.
@Autowired
JDBCTemplate
To access the Relational Database by using JdbcTemplate in
Spring Boot application, we need to add the Spring Boot Starter
JDBC dependency in our build configuration file.
@Autowired
JdbcTemplate jdbcTemplate;
Collection<Map<String, Object>> rows =
[Link]("SELECT QUERY");
@Repository
public class ProductServiceDAO {
}
Multiple DataSource
We can keep ‘n’ number Datasources in a single Spring Boot
application. The example given here shows how to create more
than 1 data source in Spring Boot application. Now, add the two
data source configuration details in the application properties file.
For properties file users, add the following properties into your
[Link] file.
[Link] =
[Link]
[Link] =
jdbc:mysql://localhost:3306/PRODUCTSERVICE?
autoreconnect = true
[Link] = root
[Link] = root
[Link] = true
[Link] = true
[Link] =
60000
[Link] =
30000
[Link] = SELECT 1
[Link]-active = 15
[Link]-idle = 10
[Link]-wait = 8000
[Link] =
[Link]
[Link] =
jdbc:mysql://localhost:3306/USERSERVICE?autoreconnect =
true
[Link] = root
[Link] = root
[Link] = true
[Link] = true
[Link] =
60000
[Link] = 30000
[Link] = SELECT 1
[Link]-active = 15
[Link]-idle = 10
[Link]-wait = 8000
spring:
dbProductService:
driverClassName: [Link]
url: "jdbc:mysql://localhost:3306/PRODUCTSERVICE?
autoreconnect=true"
password: "root"
username: "root"
testOnBorrow: true
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1
max-active: 15
max-idle: 10
max-wait: 8000
dbUserService:
driverClassName: [Link]
url: "jdbc:mysql://localhost:3306/USERSERVICE?
autoreconnect=true"
password: "root"
username: "root"
testOnBorrow: true
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1
max-active: 15
max-idle: 10
max-wait: 8000
import [Link];
import
[Link];
import
[Link];
import
[Link]
uilder;
import
[Link]
onProperties;
import [Link];
import
[Link];
import [Link];
import [Link];
@Configuration
public class DatabaseConfig {
@Bean(name = "dbProductService")
@ConfigurationProperties(prefix =
"[Link]")
@Primary
public DataSource createProductServiceDataSource() {
return [Link]().build();
}
@Bean(name = "dbUserService")
@ConfigurationProperties(prefix =
"[Link]")
public DataSource createUserServiceDataSource() {
return [Link]().build();
}
@Bean(name = "jdbcProductService")
@Autowired
public JdbcTemplate
createJdbcTemplate_ProductService(@Qualifier("dbProduct
Service") DataSource productServiceDS) {
return new JdbcTemplate(productServiceDS);
}
@Bean(name = "jdbcUserService")
@Autowired
public JdbcTemplate
createJdbcTemplate_UserService(@Qualifier("dbUserServic
e") DataSource userServiceDS) {
return new JdbcTemplate(userServiceDS);
}
}
@Qualifier("jdbcProductService")
@Autowired
JdbcTemplate jdbcTemplate;
@Qualifier("jdbcUserService")
@Autowired
JdbcTemplate jdbcTemplate;
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
compile("[Link]:spring-boot-starter-security")
<head>
<title>Spring Security Example</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Click <a th:href = "@{/hello}">here</a> to see
a greeting.</p>
</body>
</html>
<!DOCTYPE html>
<html xmlns = "[Link]
xmlns:th = "[Link]
xmlns:sec = "[Link]
extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1>Hello world!</h1>
</body>
</html>
Now, we need to setup the Spring MVC – View controller for home
and hello views.
import
[Link];
import
[Link]
ontrollerRegistry;
import
[Link]
cConfigurerAdapter;
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter
{
@Override
public void
addViewControllers(ViewControllerRegistry registry) {
[Link]("/home").setViewName("home")
;
[Link]("/").setViewName("home");
[Link]("/hello").setViewName("hello
");
[Link]("/login").setViewName("login
");
}
}
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Gradle users can add the following dependency in the [Link]
file.
compile("[Link]:spring-boot-starter-security")
package [Link];
import
[Link];
import
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws
Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void
configureGlobal(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("
USER");
}
}
<!DOCTYPE html>
<html xmlns = "[Link] xmlns:th =
"[Link]
xmlns:sec = "[Link]
extras-springsecurity3">
<head>
<title>Spring Security Example </title>
</head>
<body>
<div th:if = "${[Link]}">
Invalid username and password.
</div>
<div th:if = "${[Link]}">
You have been logged out.
</div>
</body>
</html>
<!DOCTYPE html>
<html xmlns = "[Link] xmlns:th =
"[Link]
xmlns:sec = "[Link]
extras-springsecurity3">
<head>
<title>Hello World!</title>
</head>
<body>
<h1 th:inline = "text">Hello [[$
{#[Link]}]]!</h1>
<form th:action = "@{/logout}" method = "post">
<input type = "submit" value = "Sign Out"/>
</form>
</body>
</html>
package [Link];
import [Link];
import
[Link]
ation;
@SpringBootApplication
public class WebsecurityDemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
}
Maven – [Link]
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>websecurity-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>websecurity-demo</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath/> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-security')
compile('[Link]:spring-boot-
starter-thymeleaf')
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
testCompile('[Link]:spring-
security-test')
}
Now, create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under target
directory.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Now, run the JAR file by using the command shown below −
Authorization Server
Authorization Server is a supreme architectural component for
Web API Security. The Authorization Server acts a centralization
authorization point that allows your apps and HTTP endpoints to
identify the features of your application.
Resource Server
Resource Server is an application that provides the access token
to the clients to access the Resource Server HTTP Endpoints. It is
collection of libraries which contains the HTTP Endpoints, static
resources, and Dynamic web pages.
OAuth2
OAuth2 is an authorization framework that enables the
application Web Security to access the resources from the client.
To build an OAuth2 application, we need to focus on the Grant
Type (Authorization code), Client ID and Client secret.
JWT Token
JWT Token is a JSON Web Token, used to represent the claims
secured between two parties. You can learn more about the JWT
token at [Link]/.
You can use the following steps to implement the Spring Boot
Security with JWT token by accessing the database.
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
compile('[Link]:spring-boot-starter-
security')
compile('[Link]:spring-boot-starter-
web')
testCompile('[Link]:spring-boot-
starter-test')
testCompile('[Link]:spring-
security-test')
compile("[Link]:spring-
security-oauth2")
compile('[Link]:spring-security-
jwt')
compile("[Link]:spring-boot-starter-
jdbc")
compile("com.h2database:h2:1.4.191")
where,
<modelVersion>4.0.0</modelVersion>
<groupId>[Link]</groupId>
<artifactId>websecurityapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>websecurityapp</name>
<description>Demo project for Spring
Boot</description>
<parent>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>[Link]</version>
<relativePath /> <!-- lookup parent from
repository -->
</parent>
<properties>
<[Link]>UTF-8</[Link]
ceEncoding>
<[Link]>UTF-8</[Link]
[Link]>
<[Link]>1.8</[Link]>
</properties>
<dependencies>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-jwt</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>[Link]</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Gradle – [Link]
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: '[Link]'
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-security')
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
testCompile('[Link]:spring-
security-test')
compile("[Link]:spring-
security-oauth2")
compile('[Link]:spring-
security-jwt')
compile("[Link]:spring-boot-
starter-jdbc")
compile("com.h2database:h2:1.4.191")
}
Also, you can use the following code to write a simple HTTP
endpoint to access the API with Spring Security by using JWT
Token.
package [Link];
import [Link];
import
[Link]
ation;
import
[Link].w
[Link];
import
[Link].w
[Link];
import
[Link];
import
[Link];
@SpringBootApplication
@EnableAuthorizationServer
@EnableResourceServer
@RestController
public class WebsecurityappApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/products")
public String getProductName() {
return "Honey";
}
}
Use the following code to define the POJO class to store the User
information for authentication.
package [Link];
import [Link];
import [Link];
import
[Link];
Now, use the following code and define the CustomUser class that
extends the [Link]
class for Spring Boot authentication.
package [Link];
import
[Link];
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import
[Link];
import [Link];
import
[Link];
import
[Link]
edAuthority;
import [Link];
@Repository
public class OAuthDao {
@Autowired
private JdbcTemplate jdbcTemplate;
[Link](0).setGrantedAuthoritiesList(grantedAuthoritie
sList);
return [Link](0);
}
return null;
}
}
You can create a Custom User detail service class that extends
the
[Link]
to call the DAO repository class as shown.
package [Link];
import
[Link];
import
[Link]
lsService;
import
[Link]
otFoundException;
import [Link];
@Service
public class CustomDetailsService implements
UserDetailsService {
@Autowired
OAuthDao oauthDao;
@Override
public CustomUser loadUserByUsername(final String
username) throws UsernameNotFoundException {
UserEntity userEntity = null;
try {
userEntity =
[Link](username);
CustomUser customUser = new
CustomUser(userEntity);
return customUser;
} catch (Exception e) {
[Link]();
throw new UsernameNotFoundException("User " +
username + " was not found in the database");
}
}
}
package [Link];
import
[Link];
import [Link];
import
[Link];
import
[Link]
ionManager;
import
[Link]
[Link];
import
[Link].c
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
import
[Link]
nPolicy;
import
[Link]
rdEncoder;
import
[Link]
coder;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends
WebSecurityConfigurerAdapter {
@Autowired
private CustomDetailsService customDetailsService;
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
@Override
@Autowired
protected void
configure(AuthenticationManagerBuilder auth) throws
Exception {
[Link](customDetailsService).passwordE
ncoder(encoder());
}
@Override
protected void configure(HttpSecurity http) throws
Exception {
[Link]().anyRequest().authenticated().a
nd().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.N
EVER);
}
@Override
public void configure(WebSecurity web) throws
Exception {
[Link]();
}
@Override
@Bean
public AuthenticationManager
authenticationManagerBean() throws Exception {
return [Link]();
}
}
Now, define the OAuth2 Configuration class to add the Client ID,
Client Secret, Define the JwtAccessTokenConverter, Private key
and Public key for token signer key and verifier key, and configure
the ClientDetailsServiceConfigurer for the Token validity with
scopes.
package [Link];
import
[Link];
import
[Link];
import [Link];
import
[Link];
import
[Link]
ionManager;
import
[Link].c
[Link];
import
[Link].w
[Link];
import
[Link].w
[Link];
import
[Link].w
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
@Configuration
public class OAuth2Config extends
AuthorizationServerConfigurerAdapter {
private String clientid = "tutorialspoint";
private String clientSecret = "my-secret-key";
private String privateKey = "private key";
private String publicKey = "public key";
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;
@Bean
public JwtAccessTokenConverter tokenEnhancer() {
JwtAccessTokenConverter converter = new
JwtAccessTokenConverter();
[Link](privateKey);
[Link](publicKey);
return converter;
}
@Bean
public JwtTokenStore tokenStore() {
return new JwtTokenStore(tokenEnhancer());
}
@Override
public void
configure(AuthorizationServerEndpointsConfigurer
endpoints) throws Exception {
[Link](authenticationManager).
tokenStore(tokenStore())
.accessTokenConverter(tokenEnhancer());
}
@Override
public void
configure(AuthorizationServerSecurityConfigurer
security) throws Exception {
[Link]("permitAll()").checkTokenAccess
("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer
clients) throws Exception {
[Link]().withClient(clientid).secret(clientSe
cret).scopes("read", "write")
.authorizedGrantTypes("password",
"refresh_token").accessTokenValiditySeconds(20000)
.refreshTokenValiditySeconds(20000);
}
}
You can use the following commands for generating private key.
You can use For public key generation use the below commands.
For the version of Spring Boot latter than 1.5 release, add the
below property in your [Link] file to define OAuth2
Resource filter order.
[Link]-order=3
YAML file users can add the below property in YAML file.
security:
oauth2:
resource:
filter-order: 3
You can create an executable JAR file, and run the Spring Boot
application by using the following Maven or Gradle commands.
After “BUILD SUCCESS”, you can find the JAR file under the target
directory.
Now, run the JAR file by using the command shown here −
Now hit the POST method URL via POSTMAN to get the OAUTH2
token.
[Link]
grant_type = password
username = your username
password = your password
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
classpath '[Link]:appengine-
gradle-plugin:1.3.3'
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
package [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class AppengineDemoApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/")
public String success() {
return "APP Engine deployment success";
}
}
runtime: java
env: flex
handlers:
- url: /.*
script: this field is required, but ignored
Now, move your source files and Gradle file into home directory of
your google cloud machine by using google cloud shell.
jdbc:mysql://google/<DATABASE-NAME>?cloudSqlInstance =
<GOOGLE_CLOUD_SQL_INSTANCE_NAME> &socketFactory =
[Link]&user = <USERNAME>&password
= <PASSWORD>
Note − The Spring Boot application and Google Cloud SQL should
be in same GCP project.
[Link] =
[Link]
[Link] =
jdbc:mysql://google/PRODUCTSERVICE?cloudSqlInstance =
springboot-gcp-cloudsql:asia-northeast1:springboot-gcp-
cloudsql-instance&socketFactory =
[Link]&user =
root&password = [Link] =
root
[Link] = root
[Link] = true
[Link] = true
[Link] =
60000
[Link] =
30000
[Link] = SELECT 1
[Link]-active = 15
[Link]-idle = 10
[Link]-wait = 8000
spring:
datasource:
driverClassName: [Link]
url: "jdbc:mysql://google/PRODUCTSERVICE?
cloudSqlInstance=springboot-gcp-cloudsql:asia-
northeast1:springboot-gcp-cloudsql-
instance&socketFactory=[Link]
tFactory&user=root&password=root"
password: "root"
username: "root"
testOnBorrow: true
testWhileIdle: true
validationQuery: SELECT 1
max-active: 15
max-idle: 10
max-wait: 8000
buildscript {
ext {
springBootVersion = '[Link]'
}
repositories {
mavenCentral()
}
dependencies {
classpath("[Link]:spring-boot-
gradle-plugin:${springBootVersion}")
}
}
group = '[Link]'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile('[Link]:spring-boot-
starter')
testCompile('[Link]:spring-boot-
starter-test')
compile('[Link]:spring-
security-oauth2')
compile('[Link]:spring-boot-
starter-web')
testCompile('[Link]:spring-boot-
starter-test')
}
Now, add the HTTP Endpoint to read the User Principal from the
Google after authenticating via Spring Boot in main Spring Boot
application class file as given below −
package [Link];
import [Link];
import [Link];
import
[Link]
ation;
import
[Link];
import
[Link];
@SpringBootApplication
@RestController
public class GoogleserviceApplication {
public static void main(String[] args) {
[Link]([Link],
args);
}
@RequestMapping(value = "/user")
public Principal user(Principal principal) {
return principal;
}
}
package [Link];
import
[Link].oauth2.
client.EnableOAuth2Sso;
import
[Link];
import
[Link]
[Link];
import
[Link]
[Link];
@Configuration
@EnableOAuth2Sso
public class WebSecurityConfiguration extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws
Exception {
http
.csrf()
.disable()
.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/[Link]")
.permitAll()
.anyRequest()
.authenticated();
}
}
Next, add the [Link] file under static resources and add the
link to redirect into user HTTP Endpoint to read the Google user
Principal as shown below −
<!DOCTYPE html>
<html>
<head>
<meta charset = "ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href = "user">Click here to Google Login</a>
</body>
</html>
Note − In Google Cloud console - Enable the Gmail Services,
Analytics Services and Google+ service API(s).
[Link] = <CLIENT_ID>
[Link] = <CLIENT_SECRET>
[Link] =
[Link]
[Link] =
[Link]
[Link] = oauth_token
[Link] = query
[Link] =
form
[Link] = profile email
[Link] =
[Link]
[Link] = false
Now, you can create an executable JAR file, and run the Spring
Boot application by using the following Gradle command.
After “BUILD SUCCESSFUL”, you can find the JAR file under the
build/libs directory.
Run the JAR file by using the command java –jar <JARFILE> and
application is started on the Tomcat port 8080.