数据库初始化脚本与后端代码国际化方案

第二期:数据库初始化脚本与后端代码国际化方案

背景描述

新工作入职前两周,目前被分配到国际化项目。将已有的后端系统代码提示,数据库基础数据进行国际化。我主要负责数据库国际化。

数据库有两个项目脚本,分别的mongo数据库和pgsql数据库的初始化脚本与数据。

项目部署的整体流程是,复制和解压压缩包(包含了Ansible环境、K8S环境,项目镜像,项目依赖中间件环境),安装基础环境。通过Ansible脚本,将基础应用和项目应用部署到K8S环境中。

其中的项目代码是未国际化的版本。

后端代码国际化

代码提示国际化

完成目标:

  1. 实现代码提示国际化

个人探索方案是这样的,最终团队或者说基本上所有java后端springboot项目的国际化的通用方案。使用MessageSource和LocaleContextHolder,将国际化语言的文件放在resources下的i18n文件夹中,通过配置文件指定语言,通过LocaleContextHolder获取语言,通过MessageSource获取国际化的提示信息。

并且通过定义设置和获取Locale的方法,使用LocaleContextHolder.setLocale(locale)LocaleContextHolder.getLocale()动态设置和获取语言。

数据库脚本国际化(废弃)

此方案废弃,因为获取内容要进过一层转化服务,方案是将数据库内容存储国际化Key,转换代码项目中存储i18n文件夹,通过MessageSource实现。这种通过AOP的方式增大了系统的性能开销。所以数据库通过在脚本仓库中添加国际化文件,在Ansible脚本中添加国际化参数的方式,控制数据的初始化加载。

  1. mongodb 查询返回结果国际化后的查询结果。实现jdbc template和mybatis的查询结果国陋化。
  2. pgsql 查询结果国际化。实现jdbc template结果国际化。

定义AOP切面,增强对应的JDBC Template查询

@Aspect
@Component
public class JdbcTemplateI18nAspect {
   

    @Resource
    private I18nResultHandler i18nResultHandler;

    @Around("execution(* org.springframework.jdbc.core.JdbcTemplate.query*(..))")
    public Object translateQueryResult(ProceedingJoinPoint joinPoint) throws Throwable {
   
        Object result = joinPoint.proceed();
        return i18nResultHandler.handleResult(result);
    }
}

@Component
public class I18nResultHandler {
   

    @Resource
    private I18nService i18nService;

    public Object handleResult(Object result) {
   
        if (result == null) {
   
            return null;
        } else if (result instanceof List) {
   
            return handleListResult((List<?>) result);
        } else if (result instanceof Map) {
   
            return handleMapResult((Map<?, ?>) result);
        } else {
   
            translateObject(result);
            return result;
        }
    }

    private List<?> handleListResult(List<?> results) {
   
        if (results != null && !results.isEmpty()) {
   
            for (Object result : results) {
   
                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值