Java:SpringBoot中多环境配置和@Profile注解

简介: Java:SpringBoot中多环境配置和@Profile注解

目录

一、使用@Profile

1.1、@Profile修饰类

开发环境

package com.example.demo.config;
import com.example.demo.entity.AppData;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("development")
public class DevelopmentConfig {
    @Bean
    public AppData getAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("development");
        return appData;
    }
}

正式环境

package com.example.demo.config;
import com.example.demo.entity.AppData;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("production")
public class ProductionConfig {
    @Bean
    public AppData getAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("production");
        return appData;
    }
}

1.2、@Profile修饰方法

package com.example.demo.config;
import com.example.demo.entity.AppData;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class AppConfig {
    // 开发环境
    @Bean("appConfigData")
    @Profile("development")
    public AppData getDevelopmentAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("app development");
        return appData;
    }
    // 正式环境
    @Bean("appConfigData")
    @Profile("production")
    public AppData getProductionAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("app production");
        return appData;
    }
}

1.3、@Profile修饰注解

1、定义注解

开发环境

package com.example.demo.annotation;
import org.springframework.context.annotation.Profile;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("development")
public @interface Development {
}

正式环境

package com.example.demo.annotation;
import org.springframework.context.annotation.Profile;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("production")
public @interface Production {
}

2、使用注解

package com.example.demo.config;
import com.example.demo.annotation.Development;
import com.example.demo.annotation.Production;
import com.example.demo.entity.AppData;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
    // 开发环境
    @Bean("appConfigData")
    @Development
    public AppData getDevelopmentAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("app development");
        return appData;
    }
    // 正式环境
    @Bean("appConfigData")
    @Production
    public AppData getProductionAppData() {
        AppData appData = new AppData();
        appData.setEnvironmentName("app production");
        return appData;
    }
}

二、激活@Profile

2.1、配置文件方式激活@Profile

application.properties

spring.profiles.active=production 

application.yml

spring:
  profiles:
    active: production

2.2、命令行方式激活@Profile

java -jar target/demo-0.0.1-SNAPSHOT.jar  --spring.profiles.active=production

三、多Profile资源文件

配置文件

# 公共配置
application.properties
# development
application-development.properties
# production
application-production.properties

application.properties

# 激活配置文件
spring.profiles.active=production

application-development.properties

server.port=8081

application-production.properties

server.port=8082

完整代码 https://github.com/mouday/spring-boot-demo/tree/master/SpringBoot-Profile

参考

Springboot中的@Profile注解


相关文章
|
14天前
|
Java Spring
在使用Spring的`@Value`注解注入属性值时,有一些特殊字符需要注意
【10月更文挑战第9天】在使用Spring的`@Value`注解注入属性值时,需注意一些特殊字符的正确处理方法,包括空格、引号、反斜杠、新行、制表符、逗号、大括号、$、百分号及其他特殊字符。通过适当包裹或转义,确保这些字符能被正确解析和注入。
|
14天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
82 43
Java学习十六—掌握注解:让编程更简单
|
3天前
|
XML JSON Java
SpringBoot必须掌握的常用注解!
SpringBoot必须掌握的常用注解!
15 4
SpringBoot必须掌握的常用注解!
|
9天前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
34 14
|
9天前
|
前端开发 Java
[Java]讲解@CallerSensitive注解
本文介绍了 `@CallerSensitive` 注解及其作用,通过 `Reflection.getCallerClass()` 方法返回调用方的 Class 对象。文章还详细解释了如何通过配置 VM Options 使自定义类被启动类加载器加载,以识别该注解。涉及的 VM Options 包括 `-Xbootclasspath`、`-Xbootclasspath/a` 和 `-Xbootclasspath/p`。最后,推荐了几篇关于 ClassLoader 的详细文章,供读者进一步学习。
24 12
|
23天前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
262 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
4天前
|
监控 前端开发 Java
Java SpringBoot –性能分析与调优
Java SpringBoot –性能分析与调优
|
5天前
|
存储 缓存 Java
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
Spring缓存注解【@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig】使用及注意事项
29 2
|
5天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
23 1
|
7天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。