Spring+mybatis+gradle 项目搭建实战-收尾

本人博客:http://chen-shang.github.io
原文地址

约定优于配置

  1. 配置文件目录以 conf_ + "项目名称" 组成, 如 saas 项目其配置文件目录为 conf_saas
  2. 配置文件目录与项目目录同级
chenshang@MrRobot-3:~/work/git$ tree -L 1
.
├── conf_saas
└── saas

这样约定是为了写部署脚本的时候方便,因为打包的时候需要应用对应环境的配置文件,所以需要制定配置文件所在目录.这里有考虑将配置文件写到项目目录中,但是这样配置文件就和项目耦合到一起了,倒不如以多项目的形式组织到一起。

因为配置文件需要使用 git 放到远程仓库中,这样每次修改都会有一个明确的提交,做到有迹可循(像以前放到服务器上的话,谁修改了配置文件连个记录都没有,而且修改一台机器后其他机器的修改可能会忘记)。

chenshang@MrRobot-3:~/work/git/conf_saas [master]$ tree -L 1
.
├── README.md
├── dev
├── local
├── prod01
├── prod02
└── test
chenshang@MrRobot-3:~/work/git/saas/src/main [master]$ tree -L 2
.
├── resources
    ├── conf
    ├── database
    ├── jdbc
    ├── logback.xml
    ├── mapper
    ├── script
    ├── spring
    ├── spring-mybatis
    └── spring-redis

相同配置文件放到项目中,不同环境的配置文件放到配置文件目录中,比如 logback.xml 中的日志的输出路径,不同环境的日志输出目录肯定是不同的,所以这个文件就需要放到配置文件中,对于配置文件夹中的配置文件遵守有则改之无则添加的原则。

chenshang@MrRobot-3:~/work/git/conf_saas [master]$ tree -L 1 local/
local/
└── logback.xml

Gradle 实现多环境部署

grale 多环境部署需要应用到gradle 的源集(具体就是配置源文件夹和资源文件夹<这虽然提供了灵活,但打破了约定优与配置的原则,本来约定好了各个目录结构的>)

sourceSets {
    main {
        resources {
            srcDir(project['resources_dir'])
        }
    }
}

指定源文件夹,源文件夹由配置来决定

ext {
    /**
     * 部署环境配置
     * env 的值可以是 local、dev、test、prod
     * local:代表本地环境(部署的时候应用的是 本地[src/main/resources]的配置文件)
     * dev|test|prod:代表 dev 环境(部署的时候应用的是 dev|test|prod 的配置文件)
     */
    if (!project.hasProperty("env")) env = "local"
    resources_dir = "${project.getRootDir().getParentFile().getPath()}/conf_saas/$env"
}

推荐阅读更多精彩内容