Il 0% ha trovato utile questo documento (0 voti)
98 visualizzazioni81 pagine

Introduction To Spring Citro 2023

Questo documento introduce Spring, uno dei framework Java più popolari. Descrive le principali caratteristiche e componenti di Spring come l'inversione di controllo, l'iniezione delle dipendenze e la modularità. Vengono inoltre introdotti Spring Boot per semplificare la configurazione delle applicazioni Spring, e concetti chiave come gli stereotipi e gli scope dei bean.

Caricato da

biancoreo000
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
98 visualizzazioni81 pagine

Introduction To Spring Citro 2023

Questo documento introduce Spring, uno dei framework Java più popolari. Descrive le principali caratteristiche e componenti di Spring come l'inversione di controllo, l'iniezione delle dipendenze e la modularità. Vengono inoltre introdotti Spring Boot per semplificare la configurazione delle applicazioni Spring, e concetti chiave come gli stereotipi e gli scope dei bean.

Caricato da

biancoreo000
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 81

Introduzione

Tiziano Citro
1 Spring
Outline

Spring Boot

Spring Stereotype

Spring Web MVC

Spring Data
1 Spring Session
Outline

Spring Security

Spring Cloud

Thymeleaf

Tips e ambiente di sviluppo


SPRING

Spring
Spring è considerato il più popolare tra i framework per lo sviluppo di applicazioni Java Enterprise.

Ha l’obiettivo di gestire la complessità relativa allo sviluppo di applicazioni enterprise in Java.

Fornisce tutto il necessario per utilizzare il linguaggio Java in un ambiente enterprise offrendo
soluzioni ai problemi comuni allo sviluppo di questa tipologia di applicazioni.

Essendo il framework Java più popolare al mondo vanta una grande e attiva community che fornisce
feedback sulla base di casi d’uso reali.

4
SPRING

Architettura
Il modulo Core fornisce le funzionalità fondamentali,
come: Inversion of Control, Dependency injection,
application context (come un registro JNDI), ecc.

Il modulo di Data Access fornisce integrazione con


sorgenti dati (database, cache, ecc.), astraendo
tecnologie come JDBC, JMS, ecc.

Il modulo Web fornisce le funzionalità necessarie


alle applicazioni Web, come gestione richieste e risposte.

I moduli AOP e Instrumentation offrono funzionalità


trasversali, come interceptor, logging, ecc.

Il modulo Test fornisce funzionalità di test integrate


con gli altri moduli. 5
SPRING

Struttura modulare
Il framework è progettato con una struttura modulare.

Il modulo core è sempre necessario mentre gli altri moduli possono essere introdotti se necessari
all’applicazione.

Ci sono moduli (dipendenze) per diverse necessità:

● Spring Data JPA per l’interazione con database relazionali;


● Spring Data Mongo per l’interazione con MongoDB;
● Spring Security per la gestione della sicurezza;
● ecc.

6
SPRING

Apache Maven è uno strumento di gestione dei progetti software.

Basato sul concetto di un Project Object Model (POM), Maven può gestire la build e documentazione di un
progetto in maniera centralizzata.

Un POM è l'unità fondamentale di lavoro in Maven. È un file XML chiamato pom.xml che contiene
informazioni sul progetto e dettagli di configurazione utilizzati da Maven per il processo di build.

Contiene ad esempio le dipendenze del progetto.

7
SPRING

Gestione dipendenze in Spring


Tutte le dipendenze necessarie ad un’app
(come moduli, librerie, ecc.) vengono gestite
tramite software di build automation e
dependency management, come
Maven e Gradle.

Nel caso di Maven, le dipendenze di un’app


sono indicate in un file pom.xml.

Nell’esempio stiamo aggiungendo il modulo


web e il modulo test.

8
SPRING BOOT

Spring Boot
Configurare un’applicazione Spring non è banale, oltre alle dipendenze è necessario configurare
manualmente molte delle funzionalità, ad esempio tramite XML.

Spring Boot semplifica la creazione di applicazioni Spring-based, richiedendo una configurazione minima.

Alcuni vantaggi nel configurare un’applicazione Spring tramite Spring Boot:

● Riduzione del tempo necessario per la configurazione, ad esempio eliminando le configurazioni XML;
● Una soluzione opinionata ma che possa essere facilmente estesa e personalizzata;
● Funzionalità comuni a tutte le app, come sicurezza, health-check, configurazione esternalizzata, ecc.

9
SPRING BOOT

Embedded web server


Spring Boot fornisce anche un web server insieme al necessario per l’applicazione.

In questo modo non è necessario dover configurare un web server in cui deployare l’app ma basterà avviare
l’app e il web server sarà avviato automaticamente con l’applicazione deployata al suo interno.

Di default, il web server è Apache Tomcat (o semplicemente Tomcat).

Tomcat è open source e sviluppato dalla Apache Software Foundation, che implementa diverse specifiche
come JavaServer Pages e servlet, fornendo quindi una piattaforma software per l'esecuzione di applicazioni
web sviluppate in Java.

Tomcat include anche funzionalità di web server tradizionali, ereditate da Apache HTTP Server.

10
SPRING BOOT

Creazione progetto
Creare un’applicazione con Spring Boot è estremamente semplice.

Tramite Spring Initializer è possibile generare un progetto Spring Boot con pochi click. Integrato nella
maggior parte degli IDE, è anche disponibile online (https://start.spring.io).

Le dipendenze si gestiscono come per Spring, ad esempio con un file pom.xml nel caso di Maven.

È possibile selezionare un pool di dipendenze di partenza al momento della creazione del progetto.

11
SPRING BOOT

Esempio creazione progetto

12
SPRING BOOT

Struttura progetto
Un progetto Spring Boot ha sempre:

● Un file pom.xml;
● Una directory src/main/java in cui scrivere il codice
dell’applicazione;
● Una directory src/main/resources in cui aggiungere risorse
statiche o configurazioni;
● Una directory src/test in cui scrivere i test per il codice
dell’applicazione;
● Una classe <Nome>Application.java contente lo starting point
dell’applicazione.

13
SPRING BOOT

Starting Point dell'applicazione


Una classe <Nome>Application.java contiene lo starting point dell’applicazione.

14
SPRING BOOT

Configurare proprietà dell’applicazione


Un’applicazione necessità spesso di proprietà il cui valore non può essere configurato automaticamente da
Spring Boot, come ad esempio la stringa di connessione per un database.

Queste proprietà possono essere specificate all'interno del file application.properties o del file
application.yml.

Esempio di proprietà di base e comuni a tutte le applicazioni Spring-based:

15
SPRING
STEREOTYPE

Spring IoC Container


Lo Spring IoC Container è una componente cruciale del modulo core. Responsabile per la creazione, la
configurazione e la gestione dell'intero ciclo di vita degli oggetti.

Gli oggetti gestiti dal container sono detti Spring Beans e sono gestiti tramite la dependency injection.

Il container riceve istruzioni su quali oggetti istanziare, configurare e gestire tramite i metadati di
configurazione forniti.

I metadati di configurazione possono essere rappresentati tramite XML, annotazioni o codice.

16
SPRING
STEREOTYPE

Spring Stereotype
Spring fornisce annotazioni speciali usate per creare automaticamente i bean nel contesto
dell'applicazione.

L'annotazione @Component rappresenta lo stereotype principale e generico per definire uno Spring Bean.

Altre annotazioni derivano da @Component, come @Service, @Repository, @Controller e @RestController.

17
SPRING
STEREOTYPE

Principali Spring Stereotype


@Service: una classe è annotata con @Service se contiene la logica di business.

@Repository: una classe è annotata con @Repository per indicare che si occupa di operazioni CRUD, di solito
viene utilizzata con implementazioni DAO (Data Access Object) o repository che interagiscono con database,
cache, ecc.

@Controller: una classe annotata con @Controller indica una componente responsabile di gestire le richieste
degli utenti e restituire la risposta appropriata, che può anche essere HTML.

@RestController: una classe annotata con @RestController è simile ad una classe annotata con @Controller
ma che si occupa solo di API backend e quindi invierà solo risposte in formati come JSON.

18
SPRING
STEREOTYPE

Esempio @Component

Vedremo più avanti esempi di @Repository, @Service, @Controller e @RestController.

19
SPRING
STEREOTYPE

@Configuration e @Bean
Una delle annotazioni più importanti in Spring è l'annotazione @Configuration.

@Configuration indica che la classe ha metodi annotati con @Bean e che quindi definiscono come creare
particolari Spring Bean necessari all’applicazione.

Spring al momento di creare il bean della classe @Configuration, genererà i Spring Bean definiti dai metodi
@Bean, che potranno essere usati tramite dependency injection.

Vedremo un esempio di @Configuration e @Bean più avanti.

20
SPRING
STEREOTYPE

Scope dei Spring Bean


Di default i bean sono gestiti come singleton, ma possono essere configurati per far si che ne venga
generata una nuova istanza per ogni richiesta oppure per ogni sessione.

La maniera in cui il container gestisce il ciclo di vita del bean, definisce lo scope del bean.

Esempi di scopo:
● Singleton;
● Request;
● Session;
● Prototype.

21
SPRING WEB MVC

Spring Web MVC


Anche noto come Spring Web o Spring MVC.

Spring Web MVC è il framework web costruito sulla


Servlet API di Java ed è stato incluso in Spring fin dal
principio.

Fornisce tutto il necessario per sviluppare applicazioni


web, REST API, backend, ecc.

Importato nei progetti aggiungendo il modulo


spring-boot-starter-web.

22
SPRING WEB MVC

@Controller e @RestController
Spring Web Consente di creare bean controller per gestire le richieste HTTP in ingresso, tramite le annotazioni
@Controller o @RestController.

Il mapping dei controller alle richieste HTTP avviene utilizzando l’annotazione @RequestMapping, che indica il path
base della richiesta che il controller deve gestire (ad es. /users).

I metodi dei controller vengono etichettati con annotazioni che permettono di specificare il path della richiesta HTTP
che il singolo metodo deve gestire: @GetMapping, @PostMapping, @DeleteMapping, ecc.
● Permettono anche di specificare parti del path da usare come variabili (vedremo dopo un esempio).

23
SPRING WEB MVC

Esempio di @RestController
Il controller UserController gestirà le richieste all’URL
https://my-domain/users.

Nel dettaglio:
● Il metodo getUsers() gestirà le richieste GET
all’URL https://my-domain/users.
● Il metodo saveUser() gestirà le richieste POST
all’URL https://my-domain/users.
● Il metodo deleteUsers() gestirà le richieste DELETE
all’URL https://my-domain/users/delete-users.

24
SPRING WEB MVC

Elementi delle richieste HTTP


Spring Web fornisce nel contesto dell’applicazione dei bean HttpMessageConverters che si occupano di
convertire in tipi primitivi e oggetti istanze di classi Java i seguenti elementi:
● Parametri nella query string della richiesta: @RequestParam
● Parametri nel path della richiesta: @PathVariable
● Header della richiesta: @RequestHeader
● Body della richiesta: @RequestBody

25
SPRING WEB MVC

Esempio mapping delle richieste


● Il metodo getUser() gestirà le richieste GET all’URL
https://my-domain/users/:userId, dove userId è una
variabile con valore diverso in ogni richiesta.
● Il metodo saveUser() gestirà le richieste POST all’URL
https://my-domain/users e riceverà un body da
mappare ad un’istanza della classe User e un
parametro retries nell’header HTTP indicante il
numero massimo di tentativi per effettuare il
salvataggio.
● Il metodo deleteUser() gestirà le richieste DELETE
all’URL https://my-domain/users/:userId, dove userId è
una variabile con valore diverso in ogni richiesta.

26
SPRING WEB MVC

@Service e @Autowired
Buona pratica di sviluppo prevede che i controller si occupino solo della gestione della richieste e risposte e che la
logica di business dell’applicazione sia gestita da dei servizi.

I servizi vengono forniti ai controller tramite dependency injection. La dependency injection in Spring è dichiarata
tramite l’annotazione @Autowired.

Implementare un servizio prevede la definizione di un’interfaccia e una classe per implementare i metodi definiti da
annotare con l’annotazione @Service.

27
SPRING WEB MVC

Esempio @Service
Interfaccia Implementazione

28
SPRING WEB MVC

Esempio @Autowired
Facciamo dependency injection del servizio nel controller.

29
SPRING WEB MVC

Intercettare richieste HTTP


In Spring ci sono due componenti in grado di intercettare richieste HTTP:
● Filtri: eseguiti prima di individuare il controller che gestirà la richiesta;
● HandlerInterceptor: eseguiti prima, durante e dopo la gestione della richiesta.

DispatcherServlet è la componente che si occupa di fare il forwarding delle richieste ai controller.


30
SPRING WEB MVC

Filtri
I filtri vengono eseguiti prima della DispatcherServlet e quindi prima che le richieste siano gestite dall'applicazione.

Possiamo utilizzare i filtri per manipolare e bloccare le richieste in ingresso prima che raggiungano i controller.

Allo stesso modo, possiamo anche bloccare le risposte prima che raggiungano il client.

Possiamo usare i filtri per innumerevoli funzionalità, tra cui:


● Autenticazione;
● Auditing;
● Compressione di immagini e dati;
● Qualsiasi funzionalità che vogliamo disaccoppiare da Spring MVC.

31
SPRING WEB MVC

Esempio Filtro
Il filtro intercetta solo le richieste per il path /users come
definito dal metodo shouldNotFilter().

Per ogni richiesta:


● Ottiene il metodo HTTP utilizzato;
● Se POST allora inserisce un log indicante il numero
di tentativi per il salvataggio dell’utente;
● Prima di terminare, indica che la richiesta può
proseguire con il metodo doFilter().

La richiesta sarà poi gestita dal metodo saveUser() del


controller nell’esempio precedente.

32
SPRING WEB MVC

Handler Interceptor
Eseguiti dopo la DispatcherServlet e forniscono metodi per eseguire logica:
● Prima che le richieste siano gestite dai controller;
● Dopo che sono state gestite dai controller ma prima che vengano renderizzate eventuali pagine;
● Dopo il completamento della richiesta.

Possono essere usati per funzionalità come:


● Modificare una pagina prima che sia renderizzata;
● Controlli specifici legati all’autorizzazione;
● Manipolazione del contesto dell’applicazione.

33
SPRING WEB MVC

Esempio Handler Interceptor


preHandle() è eseguito prima che le richieste siano gestite
dai controller.

postHandle() è eseguito dopo che sono state gestite dai


controller ma prima che vengano renderizzate le pagine.
● Il parametro di tipo ModelAndView fornisce accesso
alle pagine e al loro contenuto.

afterCompletion() è eseguito dopo il completamento della


richiesta.
● Il parametro di tipo Exception permette di eseguire
logiche condizionate dalla presenza di un errore.

34
SPRING DATA

Spring Data
La missione di Spring Data è fornire un modello di programmazione Spring-based per l'accesso ai dati.

Semplifica l'uso di tecnologie di storage, come database relazionali e non relazionali, framework di
map-reduce, servizi di dati basati su cloud, ecc.

Spring Data è una famiglia di moduli che contiene numerosi sotto-moduli specifici per tecnologia.

Un modulo di base Spring Data Commons funge da building block per tutti gli altri moduli.

35
SPRING DATA

Esempi di moduli di Spring Data


● Spring Data JPA: modulo di Spring Data per JPA.
● Spring Data MongoDB: modulo di Spring Data per lavorare con MongoDB.
● Spring Data Redis: modulo per il caching in Redis.
● Spring Data Azure Cosmos DB: modulo di Spring Data per Microsoft Azure Cosmos DB.
● Spring Data Cloud Datastore: modulo di Spring Data per Google Datastore.
● Spring Data DynamoDB: modulo di Spring Data per DynamoDB.
● …

Ci focalizzeremo su Spring Data JPA.

36
SPRING DATA

Spring Data JPA


Semplifica l'implementazione di repository basate su JPA (Java Persistence API) per l’accesso a database
relazionali.
● Una repository è una componente che si occupa di operazioni CRUD verso una soluzione di storage.

Gestire l’accesso ai dati per un'applicazione può essere oneroso. Tanto codice boilerplate può dover essere
scritto per eseguire anche le query più semplici e se si aggiungono funzionalità come la paginazione, l'auditing
e altre opzioni spesso necessarie, il boilerplate e la complessità aumentano.

Spring Data JPA mira a migliorare l'implementazione di funzionalità tipiche per l’accesso ai dati riducendo lo
sforzo di sviluppo.
● Tipicamente la definizione di interfacce per repository a cui Spring fornirà una implementazione.

37
SPRING DATA

Hibernate è un Object Relational Mapping (ORM) che permette di semplificare la gestione dello strato di
persistenza delle applicazioni.

Hibernate è anche un'implementazione della specifica JPA. Di conseguenza, può essere facilmente utilizzato
in qualsiasi ambiente che supporti JPA, incluse le applicazioni Java SE e Java EE.

Spring Data JPA è un’astrazione al di sopra di Hibernate che lo compatibile con il framework Spring.

38
SPRING DATA

Importare Spring Data JPA


Bisogna aggiungere il modulo
spring-boot-starter-data-jpa.

Bisogna poi aggiungere il connector


Java dello specifico database a cui
ci si connetterà, nell’esempio MySQL.

39
SPRING DATA

Configurare l’accesso al database


Bisogna indicare il database a cui connettersi.

Si utilizzano delle proprietà definite da Spring Data JPA nel file application.properties.

40
SPRING DATA

Entità
Oggetti POJO che rappresentano dati che possono essere memorizzati nel database.

Esempio entità per un utente


@Entity permette di definire un POJO
come un entità.

@Id permette di definire la chiave


primaria, che sarà generata
automaticamente perché annotata
con @GeneratedValue.

41
SPRING DATA

Esempio di @Repository con Spring Data JPA


Definiamo l’interfaccia per la repository a cui Spring fornirà l’implementazione:

La sola definizione di questa interfaccia ci fornirà metodi comuni come:


● findById();
● findAll();
● save();
● saveAll();
● count();
● …

42
SPRING DATA

Metodi custom nelle repository


All’interfaccia per la repository:

Aggiungiamo un metodo custom per recuperare un utente tramite username:

Il solo dichiare il metodo ci permette di indicare a Spring Data di fornire un’implementazione.

43
SPRING DATA

@Autowired repository nel servizio


Facciamo dependency injection della repository nel servizio.

44
SPRING SESSION

Spring Session
Spring Session ha l'obiettivo di superare i limiti attuali della gestione delle sessioni HTTP memorizzate direttamente
sui web server.

Facilita la condivisione dei dati di sessione tra servizi locali o anche nel cloud senza essere vincolati a un singolo
contenitore per la sessione (ad esempio Tomcat).
● Può aiutare ad alleggerire il carico di memoria del server, ad esempio.

Vedremo un esempio molto semplice di migrazione della sessione in Redis.

45
SPRING SESSION

Redis
Redis è un progetto open source che fornisce uno store in-memory di coppie chiave-valore.

Redis offre una serie di strutture dati in memoria molto versatili, che permettono di supportare un'ampia gamma di
applicazioni con diverse necessità.

Tra i principali casi d'uso per Redis ci sono il caching e la gestione di sessioni.

Può essere usato anche come database.

46
SPRING SESSION

Configurare Spring Session con Redis


Aggiungere due semplici dipendenze:

E utilizzare la sessione
come nell’esempio:

47
SPRING SECURITY

Spring Security
Spring Security è un framework potente e altamente personalizzabile per l'autenticazione e il controllo degli
accessi.

È lo standard de facto per la sicurezza delle applicazioni basate su Spring.

Come tutti i moduli Spring, la vera potenza di Spring Security si trova nella facilità con cui può essere esteso per
soddisfare requisiti personalizzati.

Sicuramente tra i più complessi da utilizzare nel modo corretto.

48
SPRING SECURITY

Configurare Spring Security


Aggiungere Spring Security ad un progetto:

Abilitare Spring Security creando una classe con le annotazione @Configuration e @EnableWebSecurity.

49
SPRING SECURITY

Esempio regole di autenticazione


The SecurityFilterChain bean defines which URL paths
should be secured and which should not:
● / and /home paths are configured to not require
any authentication.
● All other paths must be authenticated.

There is a custom /login page specified by loginPage(),


and everyone is allowed to view it.

When a user successfully logs in, they are redirected to


the previously requested page that required
authentication.

50
SPRING SECURITY

Pagina di login di default


Anche se non specificate una pagina di login personalizzata, Spring Security ne fornisce una di default.

51
SPRING SECURITY

Flusso di autenticazione

52
SPRING SECURITY

Disabilitare pagina di login di default


Talvolta le applicazioni non possono richiedere autenticazione manuale.

Si disabilita l’autenticazione manuale configurata di default e si implementano meccanismi “automatici” supportati da


Spring Security, ad esempio usando token JWT (JSON Web Token).

53
SPRING CLOUD

Spring Cloud
Spring Cloud fornisce strumenti per consentire agli sviluppatori di sviluppare e gestire agilmente alcuni dei
pattern comuni nei sistemi distribuiti.

Esempi: service discovery, API gateway, circuit breaker, lock globali, sessioni distribuite, ecc.

La coordinazione dei sistemi distribuiti può portare a implementazioni ripetitive.

Con Spring Cloud è possibile ottenere soluzioni a problematiche comuni con effort minore.

54
SPRING CLOUD

API Gateway
L’API gateway è il singolo punto d’ingresso per tutti i client
ai dati o ai servizi back-end.

Gestisce tutte le attività di accettazione ed elaborazione


relative alle chiamate API, incluse:
● Gestione del traffico;
● Supporto CORS;
● Controllo di accessi e autorizzazioni;
● Monitoraggio;
● Terminazione TLS/SSL.
● Gestione delle versioni delle API.

55
SPRING CLOUD

Service Discovery
Un’applicazione distribuita è eseguita in ambienti dove il numero di istanze dei servizi e la loro locazione
cambiano dinamicamente.

Risulta necessario un meccanismo che permetta ai client di un servizio di inviare richieste ad un insieme di
istanze di servizi che cambia dinamicamente.

La service discovery permette a client, API gateway e altri servizi di scoprire la locazione delle istanze di un
servizio.

Distinguiamo:
● client-side service discovery
● server-side service discovery
56
SPRING CLOUD

Service Registry
Il service registry è un database dei servizi, delle loro istanze e delle loro locazioni.

Interrogato per individuare le locazioni delle istanze dei servizi.

I servizi si registrano durante la fase di avvio e rimuovono la propria registrazione durante la fase di
spegnimento.

57
SPRING CLOUD

Client-side Service Discovery


Quando il client effettua una chiamata ad un
servizio, interroga il service registry per ottenere
le locazioni delle istanze del servizio.

Il client esegue load balancing ed inoltra la


richiesta ad un’istanza disponibile del servizio.

58
SPRING CLOUD

Server-side Service Discovery


Quando il client effettua una chiamata ad un
servizio, invia una richiesta ad un load balancer
che è in esecuzione ad una locazione ben nota.

Il load balancer interroga il service registry e


inoltra la richiesta ad un’istanza disponibile del
servizio.

59
SPRING CLOUD

Netflix OSS
Soluzioni software open-source sviluppate da Netflix (https://github.com/Netflix).

Alcune di queste soluzione sono state integrate da Spring all’interno di Spring Cloud.

Esempi:
● Zuul: un API gateway a livello 7 che offre funzionalità per routing dinamico, monitoraggio, resilienza,
sicurezza, ecc.
● Eureka: un servizio utilizzato per service discovery, bilanciamento del carico e il failover, che gioca un
ruolo critico anche nell'infrastruttura di Netflix.
● Hystrix: è una soluzione di circuit breaking progettata per isolare punti di accesso in caso di fallimento
per fermare il fallimento a cascata di servizi dipendenti punto di accesso.

60
SPRING CLOUD

Spring Cloud Netflix


Spring Cloud Netflix fornisce integrazioni di Netflix OSS per le applicazioni Spring-based.

Tramite annotazioni è possibile abilitare e configurare rapidamente pattern comuni all'interno delle
applicazioni in ambiente distribuito.

Particolarmente utile per lo sviluppo di applicazioni basate su architetture orientate ai microservizi.

Ad esempio, permette di creare un Server Eureka che gestisca il service registry e poi far si che le applicazioni
si registrino a questo server.

61
SPRING CLOUD

Creare un server Eureka (1)


● Aggiungere la dipendenza per il server Eureka:

● Configurare le proprietà necessarie nel file application.yml (alternativa ad application.properties):

62
SPRING CLOUD

Creare un server Eureka (2)


● Annotare la classe di partenza del progetto Spring Boot con @EnableEurekaServer:

63
SPRING CLOUD

Accedere alla dashboard di Eureka

64
SPRING CLOUD

Creare un client Eureka (1)


● Aggiungere la dipendenza per il client Eureka:

● Configurare le proprietà necessarie nel file application.yml:

65
SPRING CLOUD

Creare un client Eureka (2)


● Annotare la classe di partenza del progetto Spring Boot con @EnableEurekaClient:

66
SPRING CLOUD

Visualizzare i client registrati ad Eureka


Accedendo nuovamente alla dashboard è possibile vedere la nuova applicazione registrata ad Eureka.

67
SPRING CLOUD

Utilizzare Eureka per la service discovery


Un bean EurekaClient permette di accedere al
service registry per ottenere le informazioni sulle
applicazione connesse.

Si utilizza il metodo getApplication() per ottenere


il riferimento all’applicazione.

Con il metodo getInstances() si accede alle


istanze dell’applicazione.

Dalle istanze possiamo ottenere host e porta per


le chiamate HTTP, il tutto conoscendo
inizialmente solo il nome dell’applicazione da
chiamare, ovvero spring-cloud-eureka-client.
68
THYMELEAF

Thymeleaf
Thymeleaf è un template engine per Java per elaborare e gestire HTML, XML, JavaScript e CSS.

Per aggiungerlo ad un progetto Spring Boot usare la dipendenza:

E creare una directory templates nella directory src/main/resources del progetto, dove aggiungere le pagine
HTML create.

69
THYMELEAF

Esempio pagina HTML con Thymeleaf


Thymeleaf fornisce degli attributi identici a quelli dei tag HTML ma che hanno il prefisso th: e che permettono di
mostrare valori “dinamici”.

Creiamo un file userDetails.html


nella directory
src/main/resources/templates.

Nell’esempio th:text è usato per


parametrizzare il testo da
mostrare nell’elemento <h1>.

70
THYMELEAF

Come fornire i parametri alle pagine HTML


Creiamo un @Controller per fornire dati alla pagina.
● La stringa restituita dal controller deve
corrispondere al nome del file HTML.

Usiamo un oggetto Model iniettato nel metodo del


controller per passare i parametri alla pagina
tramite coppie chiave-valore.

La chiama sarà l’identificativo del dato nella pagina,


difatti accediamo al nome dell’utente come segue:

71
TIPS E
AMBIENTE

Librerie utili
● Lombok: libreria per l’autogenerazione di boilerplate tramite annotazioni. Ad esempio @Getter per
generare metodi getter per tutti i campi di una classe;
● ModelMapper: libreria per la conversione tra oggetti istanze di due classi Java per ridurre il boilerplate;
● Jackson: libreria per serializzare e deserializzare JSON in Java (esiste anche per XML);
● Apache Commons: fornisce una serie di librerie per semplificare la gestione di stringhe, collezioni, ecc.

72
TIPS E
AMBIENTE

Esempio Lombok
Aggiungiamo la dipendenza per Lombok.

Con le annotazioni @NoArgsConstructor e


@AllArgsConstructor generiamo due costruttori.

Con l’annotazione @ToString generiamo un metodo


ToString() con tutti i campi della classe.

Con le annotazioni @Getter e @Setter generiamo i


metodi getter e setter per tutti i campi della classe.
● Esempio: getName() e setName().

73
TIPS E
AMBIENTE

Esempio ModelMapper
Aggiungiamo la dipendenza:

Sviluppiamo una classe UserMapper che usa ModelMapper per convertire le istanze di una classe UserEntity in delle
istanze di una classe UserDTO:

74
TIPS E
AMBIENTE

Esempio Jackson
Aggiungiamo la dipendenza:

Sviluppiamo una classe UserSerializer che usa Jackson per serializzare in JSON le istanze di una classe UserDTO:

75
TIPS E
AMBIENTE

Ambiente di sviluppo
IDE & Text Editor

Linguaggi di Programmazione e Scripting

76
TIPS E
AMBIENTE

Ambiente di sviluppo
Framework

Version Control

77
TIPS E
AMBIENTE

Ambiente di sviluppo
Monitoraggio e gestione delle applicazioni

Distribuzione delle applicazioni

78
TIPS E
AMBIENTE

Ambiente di sviluppo
Caching & Comunicazione Autenticazione e autorizzazione

Database

79
Domande?
Esempio Pratico

Prossimamente su
https://github.com/tizianocitro/pdtify

Tiziano Citro

Potrebbero piacerti anche