首页 > 解决方案 > Kubernetes 上的 Spring Boot 应用程序如何使用外部 message.properties 文件来支持 i18n 和 l10n?

问题描述

我们有一个部署到 Kubernetes 的 Spring Boot 应用程序。我们正在向此应用程序添加 i18n 功能,并希望将 messages.properties 文件放在应用程序 jar/war 之外。我已经能够在春季启动时做到这一点。当我在 Kubernetes 上部署它时,它将如何工作?我需要使用配置映射吗?以下是代码片段

@Configuration
public class AppConfig {
@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    //Path to the messages.properties files
    messageSource.setBasenames("file:/messages/messages", "classpath:messages");
    messageSource.setDefaultEncoding("UTF-8");
    messageSource.setCacheSeconds(60);
    return messageSource;
}
}

标签: javaspring-bootkubernetesinternationalization

解决方案


是的,您可以使用 configmap 执行此操作。这与访问外部 application.properties 文件非常相似。首先,您可以直接从文件创建 ConfigMap或创建代表文件的 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: treasurehunt-config
  namespace: default
data:
  application.properties: |
    treasurehunt.max.attempts=5

然后在您的 kubernetes 部署中,您为 ConfigMap 创建一个 Volume并将其挂载到您用于外部配置的目录下的 Pod 中

          volumeMounts:
          - name: application-config
            mountPath: "/config"
            readOnly: true
      volumes:
      - name: application-config
        configMap:
          name: treasurehunt-config
          items:
          - key: application.properties
            path: application.properties

这些片段来自从 ConfigMap为 application.properties 文件安装卷的示例,因此它们使用 spring boot默认外部属性文件路径. /config您可以在 yaml 中为挂载设置它,以便您可以挂载文件以使用在 kubernetes 外部运行时已经使用的相同相对路径。


推荐阅读