[JAVA] Comment diviser un fichier de message Spring Boot

Aperçu

Cette fois, je vais vous montrer comment diviser le fichier de message (.properties) avec Spring Boot. Si vous spécifiez spring.messages.basename dans application.properties séparés par des virgules, vous pouvez le diviser en plusieurs fichiers, mais à mesure que le nombre de fichiers augmente, la gestion devient difficile, vous pouvez donc lire dynamiquement les fichiers de messages dans un dossier spécifique. Je l'ai fait.

1. Empêcher MessageSourceAutoConfiguration de démarrer

Par défaut, Spring Boot exécute la classe MessageSourceAutoConfiguration et génère un bean MessageSource si le fichier de message se trouve à l'emplacement spécifié dans spring.messages.basename. Puisque nous voulons générer nous-mêmes le MessageSource cette fois, ne placez pas resources / messages.properties, qui est la valeur par défaut de spring.messages.basename.

2. Classe de configuration

Créez la classe Config avec le contenu suivant. Je l'ai écrit en Kotlin, mais c'est la même chose en Java. Cet exemple charge le fichier de message dans resources / i18n. Cela semble un peu agressif en termes de traitement. .. ..

AppConfig.kt


package ...

import org.springframework.context.MessageSource
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.support.ResourceBundleMessageSource
import org.springframework.core.io.support.ResourcePatternResolver
import org.springframework.util.StringUtils
import java.nio.charset.StandardCharsets

@Configuration
class AppConfig {
    /**
     *Générer une source de message
     */
    @Bean
    fun messageSource(resourcePatternResolver : ResourcePatternResolver): MessageSource {

        val messageSource = ResourceBundleMessageSource()

        //Ensemble d'encodages(Si nécessaire)
        messageSource.setDefaultEncoding(StandardCharsets.UTF_8)
        
        //Autres réglages
        /*
        messageSource.setFallbackToSystemLocale(xxx)
        messageSource.setCacheMillis(xxx)
        messageSource.setAlwaysUseMessageFormat(xxx)
        messageSource.setUseCodeAsDefaultMessage(xxx)
        */

        //Recevez des messages dynamiques
        //Obtenez une liste de fichiers de propriétés en spécifiant un modèle
        resourcePatternResolver.getResources("classpath*:i18n/*.properties")
            .filter { it.isFile }.mapNotNull { it.filename }.forEach {
                val baseName = if (it.contains("_")) { //Avec locale(Dans le nom du fichier"_"C'est inclus)
                    it.substringBeforeLast("_")
                } else { //Pas de paramètres régionaux
                    it.removeSuffix(".properties")
                }
                messageSource.addBasenames("i18n/$baseName")
            }
        }
        return messageSource
    }

c'est tout.

Résumé

C'est un peu agressif, mais j'espère que cela aide. De plus, j'étais préoccupé par la dégradation des performances lorsque le nombre de divisions de fichiers était important, j'ai donc créé plus de 500 fichiers et mesuré le temps d'acquisition des messages. Le temps de récupération des messages augmentait proportionnellement au nombre de fichiers de messages uniquement pour le premier accès, mais après le deuxième accès (une autre clé de message est également possible), le message pouvait être récupéré à grande vitesse. Je ne peux pas suivre le traitement interne, mais je pense qu'il contient un cache ou un traitement de type anticipé.

Recommended Posts

Comment diviser un fichier de message Spring Boot
Comment se lier avec un fichier de propriétés dans Spring Boot
[Spring Boot] Comment se référer au fichier de propriétés
Comment configurer Spring Boot + PostgreSQL
Comment utiliser ModelMapper (Spring boot)
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Comment réduire l'image de Spring Boot Docker
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Comment ajouter un chemin de classe dans Spring Boot
Spring Boot - Comment définir le délai d'expiration de la session
Essayez Spring Boot de 0 à 100.
Comment définir l'injection de dépendance Spring Boot (DI)
Comment écrire un test unitaire pour Spring Boot 2
Comment créer un projet Spring Boot dans IntelliJ
[Spring Boot] Comment créer un projet (pour les débutants)
Introduction à Spring Boot ① ~ DI ~
Téléchargement de fichiers avec Spring Boot
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment démarrer par environnement avec Spring Boot de Maven
Introduction à Spring Boot, partie 1
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Modifier le message de validation Spring Boot
[Ruby] Comment diviser chaque requête GraphQL en fichiers
Comment modifier la valeur de paramètre de application.properties au moment du démarrage dans Spring Boot
Découpez SQL en fichier de propriété avec jdbcTemplate of spring boot
Comment appeler et utiliser l'API en Java (Spring Boot)
Comment contrôler les transactions dans Spring Boot sans utiliser @Transactional
Comment utiliser Lombok au printemps
Comment faire un test unitaire de Spring AOP
Remarques sur l'utilisation de Spring Data JDBC
[Comment installer Spring Data Jpa]
Sortie de message (Spring boot)
Comment convertir un fichier erb en haml
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
[Débutant] Comment supprimer AUCUN FICHIER
La coopération des messages a commencé avec Spring Boot
Comment créer un hinadan pour un projet Spring Boot à l'aide de SPRING INITIALIZR
Comment créer votre propre contrôleur correspondant à / error avec Spring Boot
Comment charger un fichier de téléchargement Spring et afficher son contenu
Je veux contrôler le message d'erreur par défaut de Spring Boot
Comment réaliser un téléchargement de fichiers volumineux avec Rest Template of Spring
[Introduction à Spring Boot] Vérification de la validation du formulaire
[Java] Comment utiliser la classe File
Priorité d'accès aux fichiers statiques dans Spring Boot
Comment inclure Spring Tool dans Eclipse 4.6.3?
Mémorandum de téléchargement de fichier local avec Spring Boot
Comment ajouter un fichier jar dans ScalaIDE
L'histoire de la transition de Spring Boot 1.5 à 2.1
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Comment réaliser le téléchargement de fichiers avec Feign
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
[Spring MVC] Comment transmettre des variables de chemin
Comment écrire un spécificateur de coupe de point Spring AOP
Comment réaliser le téléchargement de fichiers avec Feign
Ajoutez une botte de printemps et un dégradé à éclipse
Comment appliquer immédiatement les modifications de Thymeleaf au navigateur avec #Spring Boot + maven
[Spring Boot] J'ai étudié comment implémenter le post-traitement de la demande reçue.