Kubernetes 上的 Spring Boot 应用程序 如何使用外部 message.properties 文件来支持 i18n 和 l10n?

Jos*_*osh 6 java internationalization spring-boot kubernetes

我们有一个部署到 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;
}
}
Run Code Online (Sandbox Code Playgroud)

Rya*_*son 6

是的,您可以使用配置映射来做到这一点。它与访问外部 application.properties 文件非常相似。首先,您可以直接从文件创建 ConfigMap或创建代表该文件的 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: treasurehunt-config
  namespace: default
data:
  application.properties: |
    treasurehunt.max.attempts=5
Run Code Online (Sandbox Code Playgroud)

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

          volumeMounts:
          - name: application-config
            mountPath: "/config"
            readOnly: true
      volumes:
      - name: application-config
        configMap:
          name: treasurehunt-config
          items:
          - key: application.properties
            path: application.properties
Run Code Online (Sandbox Code Playgroud)

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