Permalink
Fetching contributors…
Cannot retrieve contributors at this time
484 lines (276 sloc) 8.68 KB

1. Moje źródła wiedzy

  • spring boot project

  • spring boot reference

  • Moje Książki

    • Learing Spring Boot

    • Spring Boot in Action

    • Pro Spring Boot

    • Spring Boot CookBook

    • Building MicroServices

    • The_Tao_of_MicroServices (MEP)

    • Spring MicroServices

    • Testing Java MicroServices (MEP)

    • Mastering MicroServices with JAVA

    • Spring MVC Cookbook

    • Spring Security 3.1

    • Mastering Spring MVC 4

    • Building A Restful Web Service with Spring

    • Spring REST

    • Mockito for Spring

3. Moduły

  • Spring Boot

  • Spring Boot Autoconfigure

    @EnableAutoConfiguration, tworzenie kontekstu
  • Spring Boot Starters

    zależności
  • Spring Boot CLI

    • groovy

    • java

    • java command line runner

Przykładowy kontroller - groovy

@RestController
class Simple{

@RequestMapping("/hello")
 String hello(){
 return "hello boot"
 }
}

Przykładowe wywołanie :

spring run simpleController.groovy -- --server.port=9009
  • Spring Boot Actuator

    production ready features
    • auto-config

    • konwencje

    • wbudowany kontener servletów

    • metryki

    • logi

    • funkcje 'życiowe'

  • Spring Boot Tools

    budowanie jar / war
  • Spring Boot Samples

    przykłady

4. Cechy frameworka

  • Błyskawiczne wytwarzanie

  • Prototypowanie

  • Eliminacja XML

  • Autokonfiguracja

    • Prostota konfiguracji zależności

    • Prostota konfiguracji aplikacji

  • Starters dependencies

  • Command-line interface

  • Wbudowany kontener Tomcat lub Jetty

  • Zcentralizowana konfiguracja

    • application.properties

    • application.yml

  • Profile

  • JAR !

  • Monitoring

    • Actuator

  • Microservices :)

Richardson microservices part1 1 monolithic architecture

Richardson microservices part2 3 api gateway

Richardson microservices part3 monolith vs microservices

Richardson microservices part3 taxi service

mono vs micro

Za :

  • łatwość wytwarzania aplikacji typu 'stand-alone' gotowych na wdrożenie produkcyjne

  • szybka konfiguracja wykorzystująca model Convention over Configuration

  • możliwość wyrzucenia konfiguracji poza projekt

  • wczechobecny jar zamiast starego ear czy war

  • szybki deploy

  • wielkie serwery aplikacyjne

  • monolit - utrzymywanie i rozwijanie

  • splątane zależności

  • małe autonomiczne usługi

  • małe autonomiczne zespoły

  • łatwość zrozumienia domeny

  • łatwa skalowalność

  • izolacja sytuacji krytycznych

  • dobór odpowiednich narzędzi i języków do danej domeny


Przeciw :

  • testowanie

  • debugowanie

  • próg wejścia

  • nowe wzorce architektoniczne

  • zwiększona pamięciożerność

Note
Aktualna wersja 1.4.0.RELEASE wymaga Java 7 i Spring Framework 4.3.2.RELEASE lub wyżej

5. Dokumentacja

6. Narzędzia i generowanie rusztowania Spring Boot

6.1. Spring Boot CLI

spring init -dweb,data-jpa,h2,thymeleaf --build gradle mySimpleApp --force

6.2. STS

6.3. IDEA

6.4. Initializr

7. Spring Boot 1.4 features

7.1. Startup Error Improvements

krótszy i przejrzysty **stacktrace** w przypadku błędu

7.2. Actuator Improvements

  • informacje o Git generowane prostu z pluginów maven czy gradle

  • nowe konfiguracje dla : Neo4j, Caffeine Cache (guava), CouchBase, etc

7.3. wsparcie dla testów

  • @SpringBootTest

  • @WebMvcTest - testowanie warstwy WEB/Controller

    @RunWith(SpringRunner.class)
    @WebMvcTest(MyController.class)
    public class MyControllerTests {

        @Autowired
        private MockMvc mvc;

        @MockBean
        private MyService myService;

        @Test
        public void getSource() throws Exception {
            given(myService.getLastSource()).willReturn(new Source("ok let's do this"));

            mvc.perform(get("/").accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk())
                    .andExpect(content().json("{'source':'ok let's do this'}"));
        }
    }
  • @JsonTest - testowanie marshalling/unmarshalling dla Jsona


  • @DataJpaTest - testowanie JPA

@RunWith(SpringRunner.class)
@DataJpaTest
public class ExampleRepositoryTests {

    @Autowired
    private TestEntityManager entityManager;

    @Autowired
    private UserRepository repository;

    @Test
    public void testExample() throws Exception {
        this.entityManager.persist(new User("sboot", "1234"));
        User user = this.repository.findByUsername("sboot");
        assertThat(user.getUsername()).isEqualTo("sboot");
        assertThat(user.getVin()).isEqualTo("1234");
    }

}
  • @RestClientTest

@RunWith(SpringRunner.class)
@RestClientTest(RemoteVehicleDetailsService.class)
public class ExampleRestClientTest {

    @Autowired
    private RemoteVehicleDetailsService service;

    @Autowired
    private MockRestServiceServer server;

    @Test
    public void getVehicleDetailsWhenResultIsSuccessShouldReturnDetails()
            throws Exception {
        this.server.expect(requestTo("/greet/details"))
                .andRespond(withSuccess("hello", MediaType.TEXT_PLAIN));
        String greeting = this.service.callRestService();
        assertThat(greeting).isEqualTo("hello");
    }

}

7.4. Datasource binding / wybieramy dostarczyciela ds

spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.connection-timeout=10

7.5. Image Banners

banner jako rysunek

7.6. Third Party Libraries

wsparcie nowych bibiliotek
  • Hibernate 5.1

  • Jackson 2.7

  • Solr 5.5

  • Spring Data Hopper

  • Spring Session 1.2

  • Hazelcast 3.6.

7.7. Spring 4.3.0 Support

oparty na Spring'u 4.3.0
  • niejawny @Autowired na konstuktorze

  • możliwość definiowania default method

  • nowe meta-dane dla cache oraz wsparcie dla długo działających procesów

@Cacheable(cacheNames = "foos", sync = true)
public Foo getFoo(String id) { ... }
  • uproszczone API dla opercji REST/WEB

    • @GetMapping = @RequestMapping(method = RequestMethod.GET)

    • @PostMapping

    • @PutMapping

    • @DeleteMapping

    • @PatchMapping

  • @RequestScope, @SessionScope, @ApplicationScope // określenie nowych zakresów

  • @RequestAttribute, @SessionAttribute // dostep do atrybutów sesji i requestu

@GetMapping
public String getPerson(@SessionAttribute String login, @RequestAttribute String query) {
   ..//
}
  • wsparcje dla nowych wersji bibliotek

    • Hibernate ORM 5.2

    • Jackson 2.8 min Jackson 2.6+ dla Spring 4.3

    • Netty 4.1

    • Undertow 1.4

    • Tomcat 8.5.2 oraz wczesne wesje 9

    • wsparcie dla Hibernate 5

9. Spring vs Spring Boot

9.1. Podejście standardowe

  • Projekt webowy musi zawierać folder WEB-INF

    • opjonalny plik : web.xml

    • <servlet-name>-servlet.xml

9.2. Aplikacja WEB/REST

  • Stworzenie pliku web.xml lub WebApplicationInitializer, żeby zadeklarować DispatcherServlet

  • Skonfigurowanie Spring MVC

  • Stworzenie prostego kontrolera i zarejestrowanie go

  • Odpalenie aplikacji na jakimś kontenerze servletów lub serwerze aplikacyjnym

    • Przykład / Prosty kontroller

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception { //configuration & bootstrapping
        SpringApplication.run(SampleController.class, args);
    }
}
@RestController
public class SimpleWebController {
@RequestMapping("/")
public String greetings(){
return "Hello world";
}
}