有时候不同的系统只是数据源和一些配置信息不一样,代码其实可以用同一套。比如“小米科技财务管理系统”和“腾讯科技财务管理系统”,这两个系统只是公司不同,业务需要其实是一样的。这种情况下,可以只开发一个项目来同时支持多个不同的系统。下面我们来聊一聊怎样将一个项目配置成多个系统。
多环境的配置
Play Framework( 以下简称 Play)可以在 application.conf 文件中配置多个环境,例如:
application.name=Cool app
application.mode=dev
application.log=INFO
# Test configuration
%test.application.log=DEBUG
%test.db=mem
# Production configuration
%prod.http.port=80
%prod.application.log=INFO
%prod.application.mode=prod
其中没有“%”字符的是默认配置,带“%”的是多环境的配置。以“%test.”开头的是测试环境的配置,以“%prod.”开头的是生产环境的配置。我们也可以配置自定义的环境,比如:
%mi.application.name=MI Accounting system
%mi.http.port=80
%mi.application.log=INFO
%mi.application.mode=prod
其中“mi”是环境名,根据系统起名。
运行参数
然后在运行命令后面添加一个参数,就可以使用想要的环境来启动系统了:
play run --%mi
这个参数的格式是“–%xxxx”,其中“xxxx”是环境名,比如“mi”。
更新数据结构的时候也要带这个参数:
play evolutions:apply --%mi
注意:如果要使用 play evolutions 命令更新生产环境的数据结构的话,要把它放在 play run 命令前执行。
日志文件的配置
配置好自定义环境以后,就可以支持多系统了。但是还有一个问题需要解决,那就是日志文件名的问题。每个系统应该有自己独立的日志文件名称,比如“mi.log”。
Play 默认的日志配置文件是 conf/log4j.properties,可以使用“application.log.path”配置项来指定不同的文件,例如:
%mi.application.log.path=/log4j-mi.properties
注意:这里的 log4j-mi.properties 实际的路是 conf/log4j-mi.properties,和 application.conf 文件在同一个目录。
拆分配置文件
另外,为了便于管理多个系统的配置信息,可以通过 include 命令将不同系统的配置保存在不同的文件中:
conf/application.conf
@include.prod.licnk=prod-mi.conf
application.name=Cool app
application.mode=dev
application.log=INFO
conf/prod-mi.conf
%mi.application.name=MI Accounting system
%mi.http.port=80
%mi.application.log=INFO
%mi.application.mode=prod
%mi.application.log.path=/log4j-mi.properties