Visualizzazione post con etichetta Spring. Mostra tutti i post
Visualizzazione post con etichetta Spring. Mostra tutti i post

martedì 27 aprile 2021

Spring - JPA - Monitor Log Slow Query

 

Per eseguire un monitoraggio delle tempistiche di esecuzione delle query è possibile creare un file di log che contenga i tempi in modo da verificare l'eventuale aggiunta di indici.

Definire le tempistiche di monitoraggio di esecuzione della query nel file di properties:

spring.jpa.properties.hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=50



Aggiungere il logger nel file logback-spring.xml

<!-- query time debug -->

<appender name="query" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>queryLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>queryLog.log.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>3</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%m%n</pattern>
</encoder>
</appender>


<logger name="org.hibernate.SQL_SLOW" level="INFO">
<appender-ref ref="query"/>
</logger>

il file generato contiene:

SlowQuery: 297 milliseconds. SQL: 'HikariProxyPreparedStatement@984805610 wrapping com.mysql.cj.jdbc.ClientPreparedStatement: select a.id as col_0_0_ from abc a where a.id > 10'


domenica 28 ottobre 2018

Comunicazione tra MicroServices in Spring Boot con RabbitMQ


Dopo attenta lettura di documentazione on-line e suggerimenti da amici provo ad eseguire qualche test di comunicazione tra Micro Services utilizzando un gestore di code di messaggi RabbitMQ.

Con una semplice app in Spring Boot, con interfaccia rest,  al richiamo di una path, viene spedito un messaggio al RabbitMQ installato sullo stesso PC in locale.

Per RabbitMQ vi consiglio vivamente di installare il plugin per il management da web

 http://localhost:15672/ guest/guest.





La parte di controller è molto semplice, è un api rest che quando viene richiamata spedisce un messaggio al RabbitMQ e nella stessa classe un metodo che rimane in ascolto sulla stessa coda.


Adesso eseguiamo alcuni stress test:

  1.  creiamo diversi file di configurazione di spring per ogni file cambiamo semplicemente la porta.
  2. eseguiamo la build del progetto e lanciamo n jar per ogni profiles creato nel file di configurazione yaml.

java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9001
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9002
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9003
java -jar rabbit-spring-test-0.0.1.jar  --spring.profiles.active=9004


il vostro desktop diventa qualcosa di delirante...

3. Configuro il jMeter per iniziare ad eseguire chiamate sui quattro server 
http://localhost:900{1-4}/sendMessage


C:\dev\apache-jmeter-5.0\bin> .\jmeter -n -t .\sendmessage.jmx -l tmp\jmeter-o.log -o tmp\dashboard

il file sendmessage.jmx



Client web di RabbitMQ



Riassumendo con jMeter abbiamo spedito 48000 richiese di invio di messaggi alle 4 app Spring Boot.
Le app hanno inviato una richiesta in coda al RabbitMQ che a sua volta per ognuno dei suddetti ha reinviato il messaggio alle 4 app.

In ingresso ha processato 48000 messaggi.
In uscita ha processato 192000 messaggi.
Tutto questo in 1 minuto.


mercoledì 19 aprile 2017

SqlServer 2014 - Spring Oauth2 Sql Table Script


Script per la creazione delle tabelle di Spring Security per la gestione del Oauth2 sul db di SQLServer 2014

https://gist.github.com/marcoberri/b02d5c523c0e511bdd18bda18ee5eb38





sabato 8 aprile 2017

Microservices : Spring Boot + Eureka + Zuul + OAuth2

Esempio completo della gestione a Microservices con Spring Boot e tutto il pacchetto completo  di gestione di proxy e bilanciamento. Per la gestione dell'autenticazione sempre attraverso i services di spring con Oauth2. L'esempio è basato su Jpa su Hibernate e MySql.

Trovate i sorgenti completi https://github.com/marcoberri/microservices-example



Gestione della security


mercoledì 9 settembre 2015

Spring MVC 4 - elenco chiamate REST

Ottimo controller REST per visualizzare l'elenco delle chiamate disponibili nel proprio MVC (tipo il file wsdl)

lunedì 27 aprile 2015

Spring 4 MVC send response image

che fatica.

l'unica soluzione trovata per servire una immagine con spring 4 mvc senza impazzire...


lunedì 17 novembre 2014

Client Retrofit - Problemi con java.util.Date

Nell'ultimo periodo sto utilizzando Retrofit per creare client di accesso a api rest.

Un problema comune è quando si vuole passare nella richiesta in @Body in post un parametro con un modello di classe che contenga un campo java.util.Date. Il problema nasce dalla conversione in Json per il client che si aspetta tutti dati in json in ingresso e a sua volta restituisce un json.

Ho risolto il problema configurando il serializzatore e deserializzatore per il client okclient:


 private static RestAdapter buildClientRestAdapter(String uri) {

final OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setReadTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
okHttpClient.setConnectTimeout(ClientDispatcher.timeout, TimeUnit.MILLISECONDS);
final OkClient httpClient = new OkClient(okHttpClient);

final GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.MILLISECOND_FIELD);

builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
   @Override
   public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
   }

});


builder.registerTypeAdapter(Date.class, new JsonSerializer<Date>() {
   @Override
   public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext  context) {
     return src == null ? null : new JsonPrimitive(src.getTime());
   }
 });

final Gson gson = builder.create();

return new RestAdapter.Builder().setEndpoint(uri).setLogLevel(RestAdapter.LogLevel.FULL).setConverter(new GsonConverter(gson)).setClient(httpClient).build();
    }

venerdì 14 settembre 2012

MBFastTrack - Online la Beta

Online la Beta di MBFastTrack. 

Applicativo realizzato in Java con Spring, MongoDB e Bootstrap.

E' una beta e prendetela come tale ancora pieni di bachi... ;)





mercoledì 11 gennaio 2012

Spring MVC + MongoDB


Primo approccio con il framework Spring 3.1, integrazione tra MVC e MongoDB.

Per installare MongoDB basta scaricarlo, ed eseguire mongod dopo avere precedentemente creato la cartella \data\db.

In questo progetto di netbeans  ho voluto utilizzare il più possibile le annotation  per ridurre al minimo il codice java da scrivere.

Da quello che ho capito esiste ancora qualche problema con il GridFs nell'integrazione con Spring, ma sarà il prossimo passo.


link utili: