1.wiki
Profiles 是 Spring 框架的核心特性,用来区分环境,允许将不同文件或代码仅映射到相应环境,并仅加载相应环境文件和代码
1. 文件级别
使用 pom.xml 的 profile 属性,来去别环境,并使用 spring 的双@占位符在打包时替换
1. pom 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <profiles> <profile> <id>dev</id> <properties> <profileActive>dev</profileActive> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>test</id> <properties> <profileActive>test</profileActive> </properties> </profile> <profile> <id>prod</id> <properties> <profileActive>prod</profileActive> </properties> </profile> </profiles>
<resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application*.properties</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>application.properties</include> <include>application-${profileActive}.properties</include> </includes> </resource> </resources>
|
2. application.properties
除了各个环境的自定义配置,可以声明一个公共 application.properties,使用 @xx@
在编译后替换为 profile 中属性
1 2
| spring.profiles.active: @profileActive@
|
3. 打包
使用 -P 指定环境,如 mvn clean install -Pdev
打包 dev 环境
2. 代码级别
@Profile
注解,用在类和方法上,指定 bean 仅在特定的 profile 环境中生效
1 2 3 4 5 6 7 8 9 10 11
| @Component @Profile("prod") public class DevBean { }
@Component @Profile("!prod") public class DevBean { }
|
激活方式
- jar :
java -jar -Dspring.profiles.active=prod *.jar
- 代码设置环境变量 :
System.setProperty("spring.profiles.active", "prod");
- Spring 容器中激活 :
1 2 3 4
| AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.getEnvironment().setActiveProfiles("prod"); ctx.register(XxxConfig.class); ctx.refresh();
|