Merci à toutes et tous, c'était bien chouette!
Le repo: https://github.com/snicoll/ops-status
Comme quelqu'un me l'a fait remarquer, il n'y pas eu de séance de questions/réponses à l'amphi, donc je me suis dit que j'allais essayer de vous faire un résumé de mes discussions.
Un petit retour sur les "slice tests": https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing.spring-boot-applications.autoconfigured-tests
RestClient
vs. RestTemplate
dans le contexte de Loom (Virtual Threads) et de l'importance de préciser que RestClient
reste une interface moderne au-dessus de RestTemplate
et n'est pas une contrainte pour bénéficier de Loom. Donc si vous voulez utiliser Loom, RestTemplate
ou RestClient
, peu importe mais RestClient
offre une interface plus moderne. Je précise aussi que nous avons appliqué un peu de modernisme à JdbcTemplate
aussi, avec JdbcClient
: https://docs.spring.io/spring-framework/reference/data-access/jdbc/core.html#jdbc-JdbcClient
C'est cool d'utiliser notre base de prod mais comment ça marche avec la gestion de schéma? Et bien comme l'application, d'ailleurs le repo utilise Flyway et il est invoqué au démarrage sur notre DB postgres gérée par Testcontainers.
Si j'ai deux base de données, comment est-ce que @ServiceConnection
se connecte à la bonne base de données ? J'ai répondu, avec un peu d'ironie, par une question: Est-ce que Spring Boot supporte l'auto-configuration de deux bases de données? La réponse est, malheureusement, non. Du coup si l'application auto-configure la DataSource principale, ServiceConnection
va utiliser ça. Pour les autres cas, il faut écrire plus de code, comme ce que j'avais au début avec DynamicPropertiesRegistry
.
OK pour l'interaction des containers avec les tests d'intégration, c'est chouette, mais certains services sont gourmands en mémoire. Est-ce qu'il existe une solution pour déporter ces services et les rendre disponible? Oui et c'est exactement ce que Testcontainers cloud fait: https://testcontainers.com/cloud/ - J'en profite pour mentionner que Testcontainers a été récemment racheté par Docker.
Quelle commande ai-je utilisé pour passer à Java 21. Il s'agissait de useJava 21
dont je vous partage le code très compliqué avec plaisir:
function useJava() {
sdk use java $1
java -version
}
Et du coup 21 fonctionne parce que je fais des liens symboliques dans mes candidats SDKMan:
ll ~/.sdkman/candidates/java
total 0
lrwxr-xr-x 1 snicoll staff 14B Jan 18 16:40 17 -> 17.0.10-librca
drwxr-xr-x 12 snicoll staff 384B Jan 16 11:40 17.0.10-librca
lrwxr-xr-x 1 snicoll staff 13B Feb 28 19:54 21 -> 21.0.2-librca
drwxr-xr-x 12 snicoll staff 384B Jan 17 01:05 21.0.2-librca
drwxr-xr-x 18 snicoll staff 576B Jan 20 10:33 23.0.3.r17-nik
drwxr-xr-x 14 snicoll staff 448B Jan 21 01:06 23.1.2.r21-nik
lrwxr-xr-x 1 snicoll staff 14B Jan 27 12:42 8 -> 8.0.402-librca
drwxr-xr-x 15 snicoll staff 480B Jan 16 14:24 8.0.402-librca
lrwxr-xr-x 1 snicoll staff 41B Jan 27 12:42 current -> /Users/snicoll/.sdkman/candidates/java/17
lrwxr-xr-x 1 snicoll staff 14B Jan 27 12:40 graalvm -> 23.0.3.r17-nik
lrwxr-xr-x 1 snicoll staff 14B Jan 27 12:40 graalvm-21 -> 23.1.2.r21-nik
Bon, il doit y avoir d'autres questions, mais je ne me souviens pas. N'hésitez pas à commenter ou de poser d'autres questions!