一、背景
在企业级开发中,为了不影响生产环境的项目运行,一般情况下都会划分生产环境、测试环境、开发环境。不同环境可以配置不同的数据库、redis连接,这样在开发新功能的时候就不会影响线上环境。
二、实现
2.1创建不同的配置文件
application.yml
spring:
profiles:
active: '@profiles.active@'
application-dev.yml
# 应用服务 WEB 访问端口
server:
port: 8081
#数据库连接
spring:
datasource:
#配置自己的账户密码
username: xxx
password: xxx
url: jdbc:mysql://127.0.0.1:3306/my_app
driver-class-name: com.mysql.cj.jdbc.Driver
** application-test.yml**
# 应用服务 WEB 访问端口
server:
port: 8081
#数据库连接
spring:
datasource:
#配置自己的账户密码
username: xxx
password: xxx
url: jdbc:mysql://127.0.0.1:3306/my_app
driver-class-name: com.mysql.cj.jdbc.Driver
** application-prod.yml**
# 应用服务 WEB 访问端口
server:
port: 8081
#数据库连接
spring:
datasource:
#配置自己的账户密码
username: xxx
password: xxx
url: jdbc:mysql://127.0.0.1:3306/my_app
driver-class-name: com.mysql.cj.jdbc.Driver
dev,test,prod可以分别配置不同的地址,以实现连接不同的数据库。
2.2配置POM文件
<project>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--①移除全部配置文件-->
<excludes>
<exclude>application*.yml</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<!--②将所需的配置文件移入-->
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<include>application-${profiles.active}.yml</include>
</includes>
</resource>
</resources>
</build>
<!-- 环境 -->
<profiles>
<profile>
<!--不同环境Profile的唯一id-->
<id>dev</id>
<properties>
<!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile>
</profiles>
</project>
配置文件里面有一小块移除配置文件的代码
如果将该代码注掉,那么在打包项目的时候就会把全部配置文件都打包进去,这样拿到jar包之后就可以在启动项目的时候通过传入不同的参数来使用不同的配置文件启动项目,有点不安全。
如果不注掉的话,就会把全部配置文件都移除,在下方把指定的要打包的配置文件引入,这样获得的jar包就只能启动打包时候指定的配置文件,尝试使用其他配置文件会获取不到而报错。(建议)
三、效果
3.1本地使用
先在项目右上角的Profiles选中想要启动的环境,然后启动项目,端口和设置的配置文件匹配。
换个配置文件试试,端口和配置的文件也匹配,也是没问题。
PS:一般情况下,切换环境最好点一下下方的clean,先清一下缓存配置。可能是现在配置少,现在本地不clean也没问题,但在企业开发中如果不clean一下,启动项目大概率是会报错的。
3.2线上或者测试环境使用
线上或者测试环境一般都用jekins来自动化打包运行项目,也就是通过脚本去自动运行项目。
我们可以在项目目录,通过命令行去打包项目mvn package -P 环境
mvn package -P prod
打包完成之后会在项目目录下面生产一个target文件夹,里面有一个jar文件,这个文件就是打包的项目文件。(如果项目设置的打包是war的话,也可能是war文件。)
我们去到jar文件所在目录,通过命令行运行jar文件
启动了8082端口,也正是prod文件配置的端口,验证完毕。
因为我前面是开启了配置文件过滤的,验证一下用其他配置文件启动该jar包。(找不到配置文件而报错,安全性得到了保障)
3.3、切换环境编译报错
也有可能clean之后编译还是报错找不到某些类,这个时候大概率还是前面打包的target的问题。可以试试设置一下idea配置,file/settings/Build,Execution,Deployment/Build Tools/Maven/Runner
版权归原作者 赫萝的红苹果 所有, 如有侵权,请联系我们删除。