Spring Boot 多环境如何配置
Spring Boot 多环境如何配置
Spring Boot 开发环境、测试环境、预生产环境、生产环境多环境配置
通常一个公司的应程序可能在开发环境(dev)、测试环境(test)、生产环境(prod)中运行。那么是不是需要拷贝不同的安装包,在不同的环境下运行呢,在 Spring Boot 中一切已经为我们准备就绪,只需要简单的配置,你的程序就能在不同的环境中运行。
一、Spring Boot 环境设置机制
spring.profiles.active 属性可以为我们指定当前设置的环境,以此来选择我们的配置文件。例如我们有配置文件
application.yml
application-dev.yml
application-test.yml
application-prod.yml
当执行 java -jar xxx.jar --spring.profiles.active=test 此时,系统将启用 application.yml 和 application-test.yml 配置文件。
当执行 java -jar xxx.jar --spring.profiles.active=prod 此时,系统将启用 application.yml 和 application-prod.yml 配置文件。
正是这种配置参数可以决定我们使用哪种配置文件,如果我们把不同环境的配置写在对应的配置文件中,我们就可以实现多环境机制。
二、配置多环境
正如 第一 点所述,我们配置不同的配置文件
application.yml
application-dev.yml(开发环境)
application-test.yml(测试环境)
application-uat.yml(预发布环境)
application-prod.yml(生产环境)
三、指定环境
1 在 cmd 命令中指定
java -jar xxx.jar --spring.profiles.active=dev
java -jar xxx.jar --spring.profiles.active=dev
2 在 application.yml 中指定
spring:
profiles:
active: dev
3 在IDEA 编辑器中指定
在运行按钮(绿色三角形按钮)旁边选择 Edit Configurations...,在弹出的对话框中 Active profiles 输入 dev 或其他即可。
这种方法只有在本地调试的时候才生效。
四、程序中获取 applicaton 中的值
@Component @ConfigurationProperties(prefix = "springstudy") public class MultienvConfig { private String demoname; public String getDemoname() { return demoname; } public void setDemoname(String demoname) { this.demoname = demoname; } }
五、程序示例
5.1 新建一个工程
groupId=com.fishpro
artifactId=springstudy
项目名称 spring-boot-study-multienv
5.2 新增以下文件
默认为 application.properties 直接重命名为 application.yml,其他三个新建就可以
- application.yml
server: port: 8081 spring: profiles: active: dev
- application-dev.yml(开发环境)
springstudy:
demoname: multienv-dev
- application-test.yml(测试环境)
springstudy:
demoname: multienv-test
- application-uat.yml(预发布环境)
springstudy:
demoname: multienv-uat
- application-prod.yml(生产环境)
springstudy:
demoname: multienv-prod
5.2 新建文件 fishpro.springstudy.MultienvConfig.java
@Component @ConfigurationProperties(prefix = "springstudy") public class MultienvConfig { private String demoname; public String getDemoname() { return demoname; } public void setDemoname(String demoname) { this.demoname = demoname; } }
5.3 新建 controller/IndexController.java
@Controller public class IndexController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired MultienvConfig multienvConfig; @RequestMapping("/") String index(){ logger.info(multienvConfig.getDemoname()); return "index"; } }
5.4 运行 SpringstudyApplication.java
右键 SpringstudyApplication.java
执行 Run SpringstudyApplication
运行程序 http://localhost:8081/ 在控制台中输出
2021-06-01 23:37:05.223 INFO 66267 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-06-01 23:37:05.223 INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-06-01 23:37:05.229 INFO 66267 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms
2021-06-01 23:37:05.252 INFO 66267 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-dev
修改 application.yml 中的配置
server: port: 8081 spring: profiles: active: prod
2021-06-01 23:42:44.906 INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-06-01 23:42:44.910 INFO 66281 --- [nio-8081-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
2021-06-01 23:42:44.930 INFO 66281 --- [nio-8081-exec-1] c.f.s.controller.IndexController : multienv-prod
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析