SpringBoot 教程-------- profile 的应用

本文介绍了Spring Boot如何使用Profile进行多环境配置管理,包括properties和yml格式的配置文件,以及如何通过spring.profiles.active、spring.profiles.include属性激活和包含配置。还展示了如何在类和方法上使用@Profile注解,以及通过不同方式激活Profile,如启动参数、Java代码等。

目录

前沿:

不同环境的区分

properties配置

spring.profiles.include属性

yml 配置

实战代码

作用在类上:

注解 

方法 

激活方式:

插件激活 profile

jar 激活 profile

启动时指定

在 Java 代码中激活 profile


前沿:

我们在日常开发的过程中一般会有不同的开发环境,测试环境、日常开发环境、预发环境、沙箱环境和线上环境等等,不同的环境一般配置是不同的,如果配置文件之一一个,每一个环境在开发过程中只能修改配置文件。这里以springboot为🌰说明profile的应用。


在日常的开发当中,我们经常会通过maven的profile来共同配合实现多环境的测试开发和部署工作。这里主要讲的是springboot中的profile实现配置的多环境。好了,又挖了两个坑。后面慢慢填。😂

TODO 配置是如何加载的

TODO maven的proflie


一个应用为了在不同的环境下工作,常常会有不同的配置有时代码逻辑处理也会不同。Spring Boot 对此提供了简便的支持。

springboot是根据 @profile和spring.profiles.active实现的

接下来详细说一下这些配置是如何使用的。

不同环境的区分

springboot的配置文件有多种格式

常见的是以.properties和.yml两种配置文件格式。

假设,一个应用的工作环境有:dev、test、prod分别说明

properties配置

那么,我们可以添加 4 个配置文件:

  • applcation.properties - 公共配置
  • application-dev.properties - 开发环境配置
  • application-test.properties - 测试环境配置
  • application-product.properties - 生产环境配置

application-xx环境.properties

在 applcation.properties 文件中可以通过以下配置来激活 profile:

spring.profiles.active = test


 

spring.profiles.include属性

同时,在使用过程当中,我们还继续进行细分配置,如果一个配置文件的配置信息过多,想通过不同的文件区分不同的配置信息,例如ip-config进行ip地址的配置,common-config配置统一的信息,这时就增加了spring.profiles.include属性


application-dev-db-config.properties       存储ip信息
application-dev-log-config.properties      存储日志信息


我们可以在启用application-dev.properties开发环境(主)配置文件时,同时启用application-dev-db-config.properties和application-dev-log-config.properties文件。

开启方式为:

application.properties中激活dev环境

spring.profiles.active=dev

application-dev.properties中引入相关的dev的配置。使用application-dev.properties时自动就激活了dev-db-config、dev-log-config两个文件,不用再次指定。

spring.profiles.include=dev-db-config,dev-log-config

yml 配置

与 properties 文件类似,我们也可以添加 4 个配置文件:

  • applcation.yml - 公共的配置
  • application-dev.yml - 开发环境配置
  • application-test.yml - 测试环境配置
  • application-product.yml - 生产环境配置

application-xx环境.yml

在 applcation.yml 文件中可以通过以下配置来激活 profile:

spring:
  profiles:
    active: prod

此外yml文件还有一个特殊的功能,就是能够把不同的环境在一个配置文件中配置出来,不同的环境之间通过---进行隔离

# 激活 product

spring:
  profiles:
    active: prod
# 也可以同时激活多个 profile
# spring.profiles.active: prod,proddb,prodlog
---
# dev 配置
spring:
  profiles: dev

# 略去配置

---
spring:
  profiles: test

# 略去配置

---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodlog

---
spring:
  profiles: proddb

# 略去配置

---
spring:
  profiles: prodlog
# 略去配置

实战代码

使用 @Profile 注解可以指定类或方法在特定的 Profile 环境生效。

该注解能够对类、方法和注解使用

作用在类上:

@Configuration
@Profile("product")
public class DataConfig {

    @Bean(destroyMethod="")
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

注解 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("product")
@Document
public @interface Product {
}

方法 

@Configuration
public class AppConfig {

    @Bean("dataSource")
    @Profile("dev")
    public DataSource standaloneDataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }

    @Bean("dataSource")
    @Profile("product")
    public DataSource jndiDataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

激活方式:

插件激活 profile

spring-boot:run -Drun.profiles=prod

jar 激活 profile

java -jar -Dspring.profiles.active=prod *.jar

启动时指定


在执行有参启动时,可以在命令中进行指定要选用的配置文件,例如:

java -jar xx.jar --spring.profiles.active=test


这个命令的优先级是最高的,即使application.properties中已经配置spring.profiles.active=dev,最终程序还是会用application-test.properties配置文件。

在 Java 代码中激活 profile

直接指定环境变量来激活 profile:

System.setProperty("spring.profiles.active", "test");

在 Spring 容器中激活 profile:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("development");
ctx.register(SomeConfig.class, StandaloneDataConfig.class, JndiDataConfig.class);
ctx.refresh();

参考资料:

<think>首先,用户的问题是关于如何将RuoYi-Vue项目打包成war文件的方法或教程。参考了多个引用来构建准确的回答。从引用[1]可知:RuoYi-Vue默认打包为jar包,要打包成war包需要修改pom.xml文件。引用[3]进一步说明:项目需要从jar修改为war,同时要修改一些配置文件如application-druid.yml,并且确保启动类存在。引用[2]提供了Kubernetes部署YAML,但这对war包打包没有直接帮助,因为它涉及Docker镜像,主要是后端部署的配置文件。因此,关键步骤包括:1.修改pom.xml,将packaging类型从jar改为war。2.修改配置文件如application-druid.yml以正确配置数据库连接。3.确保有一个用于Servlet初始化的启动类。另外,根据ruoyi-vue的文档或常见实践,可能还需要添加webapp文件夹等。我需要确保回答结构化清晰:-回答主体部分列出详细步骤。-生成相关问题。-所有数学公式按要求格式处理,但在这个上下文中可能不涉及数学,所以可能不需要使用数学格式。-使用中文。-在结尾添加引用。步骤总结:1.在pom.xml中更改<packaging>为war。2.如果需要,配置数据库连接(引用[3]提到)。3.确保启动类继承SpringBootServletInitializer。4.运行Maven命令打包。5.部署到Tomcat等容器。相关问题生成:-RuoYi-Vue项目打包war有哪些常见问题?-如何优化RuoYi的war包部署?-RuoYi-Vue项目与Tomcat集成需要注意什么?这基于主题。最终回答结构:-先介绍方法。-逐步解释步骤。-结尾添加引用[^1]和[^3],因为它们相关。-最后生成相关问题。确保语言自然准确。</think> 以下内容基于您提供的引用内容,特别是引用[1]和[3],结合 RuoYi-Vue 项目的典型实践整理而成。RuoYi-Vue 默认使用 Spring Boot 打包为 jar 包,但修改为 war 包后可以部署到 Tomcat 等外部 web 容器。以下是详细的打包方法教程,分步骤说明。整个过程包括 Maven 配置、项目修改和打包命令。 ### RuoYi-Vue 项目打包成 war 文件的详细步骤 1. **修改主 pom.xml 文件** 打开项目根目录下的 `pom.xml` 文件(通常位于 `ruoyi` 文件夹内)。 - 将 `<packaging>` 标签的值从 `jar` 改为 `war`。 ```xml <!-- 修改前 --> <packaging>jar</packaging> <!-- 修改后 --> <packaging>war</packaging> ``` - 确保添加必要的依赖,如 servlet API(如果尚未引入)。在 `<dependencies>` 部分添加: ```xml <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> ``` 此步骤确保项目能正确编译成 war 包 [^1][^3]。 2. **修改应用模块的配置文件** - 进入 `ruoyi-admin` 模块(Spring Boot 主应用模块),打开 `src/main/resources` 目录下的配置文件,如 `application-druid.yml`(或相关数据库配置文件)。 - 更新数据库连接参数,确保它们与您的目标数据库环境匹配(例如,数据库 URL、用户名、密码)。例如: ```yaml datasource: druid: url: jdbc:mysql://localhost:3306/ruoyi?useSSL=false&characterEncoding=utf8 username: root password: your_password ``` 此步骤避免部署后数据库连接失败 [^3]。 - 如果使用其他环境配置(如 `application.yml`),也需根据部署环境调整端口或路径。 3. **修改启动类以支持 war 包部署** - 在 `ruoyi-admin` 模块的启动类(通常是 `RuoYiApplication.java` 或类似名称),确保它继承 `SpringBootServletInitializer`。 例如: ```java import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class RuoYiApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(RuoYiApplication.class); } // 其他内容保持不变... } ``` 这允许 Spring Boot 在外部容器(如 Tomcat)中启动应用 [^3]。 4. **添加 webapp 目录(如果需要)** - 如果项目中缺少 webapp 文件夹(用于存放静态 Web 资源),在 `ruoyi-admin/src/main` 下创建 `webapp/WEB-INF` 目录,并添加一个空的 `web.xml` 文件(或从模板复制)。 ```xml <!-- webapp/WEB-INF/web.xml 示例内容 --> <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 默认情况下,Spring Boot 通常不需要额外配置 --> </web-app> ``` RuoYi-Vue 项目通常不需要此文件,但如果打包报错,添加它可以防止兼容性问题。 5. **运行 Maven 打包命令** - 在项目根目录打开终端(或命令行),执行 Maven 命令生成 war 包: ```bash mvn clean package -DskipTests ``` - `clean` 确保清除旧构建。 - `package` 执行打包操作。 - `-DskipTests` 跳过测试以加快构建速度(可选)。 生成的 war 包通常位于 `ruoyi-admin/target` 目录下,文件名如 `ruoyi-admin-版本号.war`。 6. **部署 war 包到容器** - 将 war 文件复制到 Tomcat 的 `webapps` 目录(例如 `/opt/tomcat/webapps`)。 - 启动 Tomcat: ```bash cd /opt/tomcat/bin ./startup.sh # Linux 环境下 ``` 访问 `http://localhost:8080/ruoyi-admin`(Tomcat 默认端口)验证应用运行。 ### 注意事项 - **兼容性问题**:如果使用外部 Tomcat,确保其版本与 Spring Boot 兼容(推荐 Tomcat 9+)。 - **前端处理**:RuoYi-Vue 是前后端分离项目,war 包只包含后端部分(`ruoyi-admin`),前端 Vue 部分需要单独构建和部署(如 Nginx)。 - **优化建议**:生产环境建议启用 Maven 的 profile 管理环境变量(如开发、生产),避免硬编码配置 [^1][^3]。 - **参考文档**:更多细节可查阅 RuoYi 官方文档(https://doc.ruoyi.vip/)或相关社区教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智达教育‍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值