一次配置,多场景适用:Spring Boot多套配置文件的深度剖析

简介: 一次配置,多场景适用:Spring Boot多套配置文件的深度剖析


开发阶段

SpringBoot本身对项目的多环境配置已经做了非常友好的支持了,我们只需按照SpringBoot的约定去做就好。首先我们都知道,SpringBoot的默认配置文件是application.yml

配置多个环境只需要将默认配置文件复制几份,然后将文件名按照application-环境名.yml改为相应的名称,比如:

  • 测试环境:application-dev.yml
  • 生成环境:application-prod.yml

我们可以将多个环境相同的配置写在application.yml默认配置文件中,然后不同环境的配置写在各自的文件中,比如各种服务的连接信息等。

编辑好配置文件之后,我们需要在默认的配置文件中声明让哪种环境生效

# 激活指定配置文件
spring:
  profiles:
    active: prod

注意这里的名称只需要填写application-环境名.yml配置文件的环境名部分即可。

举例

首先我创建了一个测试项目,创建了默认的配置文件application.yml。然后我也创建了application-dev.ymlapplication-prod.yml,并做了以下配置

application.yml
server:
  servlet:
    context-path: /moti-graph
  port: 8081
# 激活指定配置文件
spring:
  profiles:
    active: prod
application-dev.yml
spring:
  neo4j:
    uri: bolt://localhost:7687
    authentication:
      username: neo4j
      password: neo4j
application-prod.yml
spring:
  neo4j:
    uri: bolt://47.106.183.193:7687
    authentication:
      username: neo4j
      password: 12345

可以看到,我这里指明生效的是application-prod.yml,之后我们启动项目,在控制台就可以看到这句话

如果配置生效的是其他环境的配置,那么在这里也会相应的打印出环境名称

发布阶段

当项目需要打包发布到服务器上的时候,打包的结果首先默认会根据你在application.yml声明生效的环境,所以打包发布的时候可以先确认一下是否将默认配置文件中的环境配置为生产环境。

使用Maven打包,默认会将配置文件打包到jar包内部。可以直接使用java -jar XXX.jar的方式启动项目

如果想要切换环境,可以直接在命令中添加参数--spring.profiles.active=环境名

java -jar --spring.profiles.active=dev moti-graph-0.0.1-SNAPSHOT.jar

当然也可以在启动项目的时候指定外部的配置文件,同样需要在命令中添加参数即可

我在项目外部创建了一个配置文件如下

server:
  servlet:
    context-path: /
  port: 8888

使用下面的命令启动项目

java -jar moti-graph-0.0.1-SNAPSHOT.jar --spring.config.location=/Users/moti/Desktop/application.yml

当然,项目真正发布的时候肯定不是直接使用这种简单粗暴的java -jar方式,一般都会有专门的人写shell脚本,然后通过脚本来实现启动、停止、重启等操作。


相关文章
|
3月前
|
安全 Java API
深入解析 Spring Security 配置中的 CSRF 启用与 requestMatchers 报错问题
本文深入解析了Spring Security配置中CSRF启用与`requestMatchers`报错的常见问题。针对CSRF,指出默认已启用,无需调用`enable()`,只需移除`disable()`即可恢复。对于`requestMatchers`多路径匹配报错,分析了Spring Security 6.x中方法签名的变化,并提供了三种解决方案:分次调用、自定义匹配器及降级使用`antMatchers()`。最后提醒开发者关注版本兼容性,确保升级平稳过渡。
343 2
|
4月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
140 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
4月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
195 0
|
2月前
|
人工智能 Java 数据库连接
Spring事务失效场景
本文深入探讨了Spring框架中事务管理可能失效的几种常见场景及解决方案,包括事务方法访问级别不当、方法内部自调用、错误的异常处理、事务管理器或数据源配置错误、数据库不支持事务以及不合理的事务传播行为或隔离级别。通过合理配置和正确使用`@Transactional`注解,开发者可以有效避免这些问题,确保应用的数据一致性和完整性。
113 10
|
4月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
214 0
|
4月前
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th="http://www.thymeleaf.org"`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
103 0
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
1303 0
|
XML Java 数据库连接
【Spring学习笔记 五】Spring注解及Java类配置开发
【Spring学习笔记 五】Spring注解及Java类配置开发
125 0
|
XML Java 数据格式
Spring学习笔记:02 spring配置
Spring学习笔记:02 spring配置
|
Java 数据库连接 Spring
spring学习笔记(22)声明式事务配置,readOnly无效写无异常
<div class="markdown_views"> <p>在上一节内容中,我们使用了编程式方法来配置事务,这样的优点是我们对每个方法的控制性很强,比如我需要用到什么事务,在什么位置如果出现异常需要回滚等,可以进行非常细粒度的配置。但在实际开发中,我们可能并不需要这样细粒度的配置。另一方面,如果我们的项目很大,service层方法很多,单独为每个方法配置事务也是一件很繁琐的
1716 0