Spring Boot makes it easy to create
stand-alone, production-grade Spring based Applications that you can “just
run”. We take an opinionated view of the Spring platform and third-party
libraries so you can get started with minimum fuss. Most Spring Boot applications
need very little Spring configuration.
•Provide a radically faster and widely
accessible getting started experience for all Spring development.
•Be opinionated out of the box, but get
out of the way quickly as requirements start to diverge from the defaults.
•Provide a range of non-functional
features that are common to large classes of projects (e.g. embedded servers,
security, metrics, health checks, externalized configuration).
•Absolutely no code generation and no
requirement for XML configuration.
AutoConfiguration
>Embedded Servlet Container , Datsource,
JDBCTemplate,
JPA
ØBatch
Processing : Event & async processing
Ø
Actuator –
Non functional features – MVC
endpoints
Security,
Audit,
Metrics
&
trace
Sample POM-
xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-crud-with-vaadin</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-bom</artifactId>
<version>7.6.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Example
package com.example.mvc;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/hello-world")
public class HelloWorldController {
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping(method=RequestMethod.GET)
public @ResponseBody Greeting sayHello(@RequestParam(value="name", required=false, defaultValue="Stranger") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
package com.example.mvc;
public class Greeting {
private final long id;
private final String content;
public Greeting(long id, String content) {
this.id = id;
this.content = content;
}
public long getId() {
return id;
}
public String getContent() {
return content;
}
}
RestController
package com.example.rest;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@RequestMapping("/thing")
public MyThing thing() {
return new MyThing("Vikalp");
}
}
package com.example.rest;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class MyThing {
public MyThing()
{
}
public MyThing(String name){
this.name = name;
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Boot Application
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class DemoApplication {
private static final Logger log = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class);
}
@Bean
public CommandLineRunner loadData(CustomerRepository repository) {
return (args) -> {
// save a couple of customers
repository.save(new Customer("Jack", "Bauer"));
repository.save(new Customer("Chloe", "O'Brian"));
repository.save(new Customer("Kim", "Bauer"));
repository.save(new Customer("David", "Palmer"));
repository.save(new Customer("Michelle", "Dessler"));
// fetch all customers
log.info("Customers found with findAll():");
log.info("-------------------------------");
for (Customer customer : repository.findAll()) {
log.info(customer.toString());
}
log.info("");
// fetch an individual customer by ID
Customer customer = repository.findOne(1L);
log.info("Customer found with findOne(1L):");
log.info("--------------------------------");
log.info(customer.toString());
log.info("");
// fetch customers by last name
log.info("Customer found with findByLastNameStartsWithIgnoreCase('Bauer'):");
log.info("--------------------------------------------");
for (Customer bauer : repository
.findByLastNameStartsWithIgnoreCase("Bauer")) {
log.info(bauer.toString());
}
log.info("");
};
}
}
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import com.vaadin.annotations.Theme;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.server.FontAwesome;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
/*
* The UI code (and the Servlet declaration) used by the application stub can be found
* in the MyUI.java file. Let us read it through to see how it works. The init()
* method of a UI class is triggered when a user enters your web application.
* The VerticalLayout is one of the most used layout components,
* which are used to position and display other Vaadin components in your UI classes.
* The example code creates one TextField to allow the user to input her name and a
* Button whose click listener dynamically adds a new Label component to the main layout.
* In the end of the init() method, we just configure the main layout and place
* components into it and set it to be the content of MyUI.
* To test your first Vaadin application, right-click on the project and choose Debug as
▸ Maven build…. The debug mode is slightly slower than the basic run mode, but it often
helps you to figure out what is happening in your application.
*/
@SpringUI
@Theme("valo")
public class VaadinUI extends UI {
private final CustomerRepository repo;
private final CustomerEditor editor;
private final Grid grid;
private final TextField filter;
private final Button addNewBtn;
@Autowired
public VaadinUI(CustomerRepository repo, CustomerEditor editor) {
this.repo = repo;
this.editor = editor;
this.grid = new Grid();
this.filter = new TextField();
this.addNewBtn = new Button("New customer", FontAwesome.ALIGN_CENTER);
}
@Override
protected void init(VaadinRequest request) {
// build layout
HorizontalLayout actions = new HorizontalLayout(filter, addNewBtn);
VerticalLayout mainLayout = new VerticalLayout(actions, grid, editor);
setContent(mainLayout);
// Configure layouts and components
actions.setSpacing(true);
mainLayout.setMargin(true);
mainLayout.setSpacing(true);
grid.setHeight(300, Unit.PIXELS);
grid.setColumns("id", "firstName", "lastName");
filter.setInputPrompt("Filter by last name");
// Hook logic to components
// Replace listing with filtered content when user changes filter
filter.addTextChangeListener(e -> listCustomers(e.getText()));
// Connect selected Customer to editor or hide if none is selected
grid.addSelectionListener(e -> {
if (e.getSelected().isEmpty()) {
editor.setVisible(false);
} else {
editor.editCustomer((Customer) grid.getSelectedRow());
}
});
// Instantiate and edit new Customer the new button is clicked
addNewBtn.addClickListener(e -> editor.editCustomer(new Customer("", "")));
// Listen changes made by the editor, refresh data from backend
editor.setChangeHandler(() -> {
editor.setVisible(false);
listCustomers(filter.getValue());
});
// Initialize listing
listCustomers(null);
}
// tag::listCustomers[]
private void listCustomers(String text) {
if (StringUtils.isEmpty(text)) {
grid.setContainerDataSource(new BeanItemContainer(Customer.class, repo.findAll()));
} else {
grid.setContainerDataSource(
new BeanItemContainer(Customer.class, repo.findByLastNameStartsWithIgnoreCase(text)));
}
}
// end::listCustomers[]
}
package com.example;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
public interface CustomerRepository extends JpaRepository {
List findByLastNameStartsWithIgnoreCase(String lastName);
}
package com.example;
import org.springframework.beans.factory.annotation.Autowired;
import com.vaadin.data.fieldgroup.BeanFieldGroup;
import com.vaadin.event.ShortcutAction;
import com.vaadin.server.FontAwesome;
import com.vaadin.spring.annotation.SpringComponent;
import com.vaadin.spring.annotation.UIScope;
import com.vaadin.ui.Button;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.ValoTheme;
/**
* A simple example to introduce building forms. As your real application is
* probably much more complicated than this example, you could re-use this form in
* multiple places. This example component is only used in VaadinUI.
*
* In a real world application you'll most likely using a common super class for all your
* forms - less code, better UX. See e.g. AbstractForm in Virin
* (https://vaadin.com/addon/viritin).
*/
@SpringComponent
@UIScope
public class CustomerEditor extends VerticalLayout {
private final CustomerRepository repository;
/**
* The currently edited customer
*/
private Customer customer;
/* Fields to edit properties in Customer entity */
TextField firstName = new TextField("First name");
TextField lastName = new TextField("Last name");
/* Action buttons */
Button save = new Button("Save", FontAwesome.SAVE);
Button cancel = new Button("Cancel");
Button delete = new Button("Delete", FontAwesome.TRASH_O);
CssLayout actions = new CssLayout(save, cancel, delete);
@Autowired
public CustomerEditor(CustomerRepository repository) {
this.repository = repository;
addComponents(firstName, lastName, actions);
// Configure and style components
setSpacing(true);
actions.setStyleName(ValoTheme.LAYOUT_COMPONENT_GROUP);
save.setStyleName(ValoTheme.BUTTON_PRIMARY);
save.setClickShortcut(ShortcutAction.KeyCode.ENTER);
// wire action buttons to save, delete and reset
save.addClickListener(e -> repository.save(customer));
delete.addClickListener(e -> repository.delete(customer));
cancel.addClickListener(e -> editCustomer(customer));
setVisible(false);
}
public interface ChangeHandler {
void onChange();
}
public final void editCustomer(Customer c) {
final boolean persisted = c.getId() != null;
if (persisted) {
// Find fresh entity for editing
customer = repository.findOne(c.getId());
}
else {
customer = c;
}
cancel.setVisible(persisted);
// Bind customer properties to similarly named fields
// Could also use annotation or "manual binding" or programmatically
// moving values from fields to entities before saving
BeanFieldGroup.bindFieldsUnbuffered(customer, this);
setVisible(true);
// A hack to ensure the whole form is visible
save.focus();
// Select all text in firstName field automatically
firstName.selectAll();
}
public void setChangeHandler(ChangeHandler h) {
// ChangeHandler is notified when either save or delete
// is clicked
save.addClickListener(e -> h.onChange());
delete.addClickListener(e -> h.onChange());
}
}
package com.example;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Customer {
@Id
@GeneratedValue
private Long id;
private String firstName;
private String lastName;
protected Customer() {
}
public Customer(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public Long getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return String.format("Customer[id=%d, firstName='%s', lastName='%s']", id,
firstName, lastName);
}
}
Deployable war file
The
first step in producing a deployable war file is to provide a SpringBootServletInitializer subclass and override its configure method. This makes use of Spring
Framework’s Servlet 3.0 support and allows you to configure your application
when it’s launched by the servlet container.
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
SpringApplication.run(Application.class, args);
}
}
Applications can fall into more than one
category:
- Servlet 3.0+ applications with no web.xml.
- Applications with a web.xml.
- Applications with a context hierarchy.
- Applications without a context hierarc
Very nice post here thanks for it .I always like and such a super contents of these
ReplyDeletepost.Excellent and very cool idea and great content of different kinds of the valuable
information's. seo company in chennai
This post is really nice and informative. The explanation given is really comprehensive and informative.. Android Training in Chennai
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteVery Much Usefull inforamtion for Java job seekers Like me and thank you for sharing ......
ReplyDeleteThank you for sharing useful information about Interview. Here I prefer some more useful information aboutInterview Tips for Job
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteNice post. Thanks for this awesome blog. Keep sharing
ReplyDeleteJava Training in Noida
ReplyDeleteMost companies use telephone interviews as part of their
recruitment process to whittle down a pile of CVs into a
manageable interview shortlist. Visit interviewguidance.com
Thank you for taking the time to provide us with your valuable information. We strive to provide our candidates with excellent care and we take your comments to heart.As always, we appreciate your confidence and trust in us
ReplyDeletejava training in chennai | java training in bangalore
java online training | java training in pune
selenium training in chennai
selenium training in bangalore
Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
ReplyDeleteangularjs Training in chennai
angularjs Training in chennai
angularjs-Training in tambaram
angularjs-Training in sholinganallur
Greetings. I know this is somewhat off-topic, but I was wondering if you knew where I could get a captcha plugin for my comment form? I’m using the same blog platform like yours, and I’m having difficulty finding one? Thanks a lot.
ReplyDeleteAmazon Web Services Training in Pune | Best AWS Training in Pune
AWS Online Training | Online AWS Certification Course - Gangboard
I would really like to read some personal experiences like the way, you've explained through the above article. I'm glad for your achievements and would probably like to see much more in the near future. Thanks for share.
ReplyDeletepython online training
python training in OMR
python training course in chennai
Read all the information that i've given in above article. It'll give u the whole idea about it.
ReplyDeleteOnline DevOps Certification Course - Gangboard
Best Devops Training institute in Chennai
This is very good content you share on this blog. it's very informative and provide me future related information.
ReplyDeleteangularjs online Training
angularjs Training in marathahalli
angularjs interview questions and answers
angularjs Training in bangalore
angularjs Training in bangalore
angularjs online Training
Nice blog..! I really loved reading through this article. Thanks for sharing such an amazing post with us and keep blogging...Well written article Thank You for Sharing with Us Please keep Sharing For More info on java pmp training institute in chennai | pmp training in chennai | pmp training class in chennai | pmp training near me | pmp training courses online | pmp training fee
ReplyDeleteYour new valuable key points imply much a person like me and extremely more to my office workers. With thanks; from every one of us.
ReplyDeleteapple service center chennai | Mac service center in chennai | ipod service center in chennai | Apple laptop service center in chennai
It's interesting that many of the bloggers to helped clarify a few things for me as well as giving.Most of ideas can be nice content.The people to give them a good shake to get your point and across the command
ReplyDeleteapple iphone service center in chennai | apple ipad service center in chennai | iWatch service center chennai | apple iphone service center in chennai
This is an excellent suggestion. I will definitely say thank you.
ReplyDeleteiphone service center in chennai | Mac service center in chennai | ipod service center in chennai | apple ipad service center in chennai | apple iphone service center in chennai
Just found your post by searching on the Google, I am Impressed and Learned Lot of new thing from your post. I am new to blogging and always try to learn new skill as I believe that blogging is the full time job for learning new things day by day.
ReplyDeleteBest Spring Classroom Training Institute
Best Devops Classroom Training Institute
Best Corejava Classroom Training Institute
Best Advanced Classroom Training Institute
This blog is the general information for the feature. You got a good work for these blog.We have a developing our creative content of this mind.Thank you for this blog. This for very interesting and useful.
ReplyDeleteAcer service centre in Chennai | Authorized apple service center in Chennai | iphone display replacement | Authorized ipad service center in Chennai | Mobile phone Water damage service | Mobile service center in chennai | 100% genuine mobile parts | Mobile phone Battery replacement
I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it.
ReplyDeleteAI learning course malaysia
ReplyDeleteLovely post! This is a very fruitful post and I am impressed with the effort you have so obviously put into this content. Thanks for sharing.
Oracle Training in Chennai
Oracle Training
Social Media Marketing Courses in Chennai
Tableau Training in Chennai
Primavera Training in Chennai
Unix Training in Chennai
Pega Training in Chennai
Oracle DBA Training in Chennai
Power BI Training in Chennai
Oracle Training in Velachery
Awesome Blog...waiting for next update...
ReplyDeletecore java training in chennai
core java training
core java course
core java training in T nagar
core java training in Guindy
C C++ Training in Chennai
javascript training in chennai
Hibernate Training in Chennai
LoadRunner Training in Chennai
Mobile Testing Training in Chennai
ReplyDeleteValuable one...thanks for sharing...
javascript training in chennai
javascript course in chennai
javascript training institute in chennai
javascript training in Thiruvanmiyur
javascript training in Tambaram
javascript training in chennai
core java training in chennai
Photoshop Classes in Chennai
Manual Testing Training in Chennai
Drupal Training in Chennai
Great Post
ReplyDeleteYaaron Studios is one of the rapidly growing editing studios in Hyderabad. We are the best Video Editing services in Hyderabad. We provides best graphic works like logo reveals, corporate presentation Etc. And also we gives the best Outdoor/Indoor shoots and Ad Making services.
Best video editing services in Hyderabad,ameerpet
Best Graphic Designing services in Hyderabad,ameerpet
Best Ad Making services in Hyderabad,ameerpet
I Got Job in my dream company with decent 12 Lacks Per Annum salary, I have learned this world most demanding course out there in the current IT Market from the Hkbk group of institutions experts who helped me a lot to achieve my dreams comes true. Really worth trying
ReplyDeleteGreat blog thanks for sharing Your website is the portal to your brand identity. The look and feel of every page carry a strong message. This is why your brand needs the best web design company in chennai to capture your visions and make it art. Adhuntt Media is graced with the most creative design team in Chennai. Our creations and aims at customer and client satisfaction.
ReplyDeletesocial media marketing company in chennai
Excellent blog thanks for sharing It’s very important to have the best beauty parlour equipment to run a successful salon. Pixies Beauty Shop is the best place in Chennai to get high quality imported top brands at the best price.
ReplyDeleteCosmetics Shop in Chennaia
very informative post
ReplyDeletedenmark web hosting
inplant training in chennai
useful..
ReplyDeleteAustralia hosting
Bermuda web hosting
Botswana hosting
mexico web hosting
moldova web hosting
albania web hosting
andorra hosting
armenia web hosting
australia web hosting
Good Information
ReplyDeleteSanjary kids is the best playschool, preschool in Hyderabad, India. Start your play school,preschool in Hyderabad with sanjary kids. Sanjary kids provides programs like Play group,Nursery,Junior KG,Serior KG,and Teacher Training Program.
play school in hyderabad
Preschool in hyderabad
Preschool teacher training course in hyderabad
pre and primary teacher training course in hyderabad
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDelete
ReplyDeleteThe blog you shared is very good. I expect more information from you like this blog. Thankyou.
Python Training in bangalore
Python Course in Bangalore
Angularjs course Bangalore
Angularjs Training in Bangalore
Web Designing Course in bangalore
Web Development courses in bangalore
Salesforce Course in Bangalore
salesforce training in bangalore
Big Data Training in Bangalore
Hadoop Training in Bangalore
Great Blog. Thnaks.
ReplyDeleteSAP Training in Chennai
Java Training in Chennai
Software Testing Training in Chennai
.Net Training in Chennai
Hardware and Networking Training in Chennai
AWS Training in Chennai
Azure Training in Chennai
Selenium Training in Chennai
QTP Training in Chennai
Android Training in Chennai
I really like your post. Thanks for sharing such a valuable post. Please keep sharing such kind of post. It will be helpful for other. thanks for ur effort
ReplyDeleteAi & Artificial Intelligence Course in Chennai
PHP Training in Chennai
Ethical Hacking Course in Chennai Blue Prism Training in Chennai
UiPath Training in Chennai
Good job in presenting the correct content with the clear explanation. The content looks real with valid information. Good Work
ReplyDeleteDot Net Training in Chennai | Dot Net Training in anna nagar | Dot Net Training in omr | Dot Net Training in porur | Dot Net Training in tambaram | Dot Net Training in velachery
Thanks for sharing a very nice information & it’s really very helpful for us. oracle training in chennai
ReplyDeleteThank you for taking the time to provide us with your valuable information. We are technology/news/smartphone company, If you want to read such useful news then, Visit us: https://techmie.com/
ReplyDeleteGreat post. Thanks for sharing such a useful blog.
ReplyDeleteTally Course in T Nagar
Tally course in Chennai
Great Blog!!! thanks for sharing this information with us.
ReplyDeleteGoogle Ads Job
Job in Google Ads