多环境
dev
即本地的开发和测试环境,这个就是指的是我们自己本地的笔记本电脑,在上面可以进行开发、单元测试、冒烟测试。比如说你的local本地环境需要有一些基础性的依赖设施,比如说数据库,比如说MQ,比如说redis。这些东西,mysql、rabbit mq、redis,都是部署在公司的一套公共的一个dev环境,有一套服务器,上面会部署各种项目组成员在本地开发,需要的各种依赖设施。保证你在本地开发的时候,指定对应的地址,都是可以连通,笔记本电脑连通的。
beta
beta,一般称作内部测试环境,也就是不对外。集成测试/联调测试的环境,一般自己感觉开发好了之后,就需要将自己的系统部署到一个集成测试环境,有的公司也叫做联调测试环境,说白了,就是一个项目都是多个研发人员搞的,每个人弄好了自己的部分,都要发布到一个环境,大家在上面测一测整个系统多个服务能不能串起来跑的通,至少别报错把。这一块主要是确保主流程要跑通,不要报错。
test
QA测试环境,正经项目,都会有专门的测试人员,如果没有的话,那研发人员只能自己去充当QA角色了。就是需要将通过集成测试的代码,部署到QA测试环境,然后由QA人员进行非常充分而且完善的测试,验证功能,性能,等各个方面都没有问题
staging
预发布环境,通常这个环境会跟生产环境保持基本一致,部署到上面之后,就会使用部分真实的流量或者数据,来让系统运行。比如对外提供服务的网站,app之类的,可以通过流量拷贝的方式,拷贝一小部分流量过来,在staging环境让开发好的系统跑一跑。后者也可以拷贝部分真实的线上数据库的数据下来,跑一跑。然后这个环节QA还是会介入,再次验证一下看系统是否运行正常。同时这个环节,有一个验收的作用,项目如果有产品经理,此时会在这个环节看一下是否符合他的产品预期。
prod
生产环境,最终系统部署到线上生产环境中,完成上线。
每个环境,都是完全隔离开来的,都有自己的数据库、mq、缓存等等各种各样的依赖,比如数据库把,使用的就肯定也是不同的数据库
基于资源过滤+profile的方式适配各个环境
比如src/main/resources下,有一个jdbc.properties配置文件
在dev环境下,应该是这样的:database.jdbc.driverClass=com.mysql.jdbc.Driverdatabase.jdbc.connectionURL=jdbc:mysql://192.168.31.110:3306/oa_devdatabase.jdbc.username=devdatabase.jdbc.password=dev
在beta环境下,应该是这样的:
database.jdbc.driverClass=com.mysql.jdbc.Driverdatabase.jdbc.connectionURL=jdbc:mysql://192.168.31.110:3306/oa_betadatabase.jdbc.username=devdatabase.jdbc.password=dev
此时,首先,我们需要将配置对应的值从配置文件里抽取出来,用占位符替代,然后实际的值放到profile里去database.jdbc.driverClass=``${database.jdbc.driverClass}database.jdbc.connectionURL=``${database.jdbc.connectionURL}database.jdbc.username=``${database.jdbc.username}database.jdbc.password=``${database.jdbc.password}
然后在pom.xml里加入各个环境对应的profile配置
<profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><prop.cargo.remote.username>admin</prop.cargo.remote.username><prop.cargo.remote.password>admin</prop.cargo.remote.password><prop.cargo.tomcat.manager.url>http://localhost:8080/manager</prop.cargo.tomcat.manager.url><prop.cargo.servlet.port>8080</prop.cargo.servlet.port></properties></profile><profile><id>beta</id><properties><prop.cargo.remote.username>admin-beta</prop.cargo.remote.username><prop.cargo.remote.password>admin-beta</prop.cargo.remote.password><prop.cargo.tomcat.manager.url>http://localhost:8080/manager-beta</prop.cargo.tomcat.manager.url><prop.cargo.servlet.port>8080</prop.cargo.servlet.port></properties></profile><profile><id>test</id><properties>...</properties></profile><profile><id>staging</id><properties>...</properties></profile><profile><id>prod</id><properties>...</properties></profile></profiles>
这个时候配置文件里的值都是占位符,每个环境的实际值都到了对应的profile里去了
为src/main/resources目录开启资源过滤功能,让maven resources插件在处理资源的时候自动去解析里面的占位符,然后找到对应profile里的实际值来进行替换**mvn clean package -Pdev** -P就是说激活dev profile
查看target/classes下面的资源文件,全都替换为了dev profile中的实际值
profile有很多种激活的方式,但是常用的其实就是-P这一种激活方式即可,因为都是部署的时候用不同的-P来激活
<resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource></resources><testResources><testResource><directory>src/test/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></testResource><testResource><directory>src/test/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></testResource></testResources>
