profiles部分参考自:蚩尤后裔
profiles配置多环境
需求分析:
Profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境;
项目开发时有开发环境、测试环境、部署环境等,可以通过 profile 配置切换
多profile文件形式
格式:application-{profile}.yml
- Spring Boot 默认都是从全局配置文件 application.properties 和 application.yml 进入开始读取
- 可以使用约定格式“application-{profile}.properties/yml”写任意多的配置文件
- 然后在全局配置文件 application.properties 和 application.yml 激活它们即可,使用“spring.profiles.active=xxx”
1
2
3使用命令启动的话:
java -jar eureka-study-1.0-SNAPSHOT.jar --spring.profiles.active=eureka3yml文档块形式
- yml 文件支持多文档块方式,同一个yml文件中,可以使用”—“来区分不同的文档,相当于不同的配置文件
- 这也是Spring Boot官方推荐的方式
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63spring:
profiles:
active: eureka1
---
spring:
application:
name: spring-cloud-eureka
profiles: eureka1
server:
port: 8000
eureka:
instance:
hostname: eureka1
client:
serviceUrl:
defaultZone: http://eureka2:8001/eureka/,http://eureka3:8002/eureka/
---
spring:
application:
name: spring-cloud-eureka
profiles: eureka2
server:
port: 8001
eureka:
instance:
hostname: eureka2
client:
serviceUrl:
defaultZone: http://eureka1:8000/eureka/,http://eureka3:8002/eureka/
---
spring:
application:
name: spring-cloud-eureka
profiles: eureka3
server:
port: 8002
eureka:
instance:
hostname: eureka3
client:
serviceUrl:
defaultZone: http://eureka1:8000/eureka/,http://eureka2:8001/eureka/
---
spring:
application:
name: sinle-eureka
cloud:
config:
enabled: false
profiles: single
server:
port: 8761
eureka:
instance:
hostname: localhost
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000 # 设置注册表的清理间隔(默认是60 * 1000 毫秒)。单位:毫秒
client:
fetch-registry: false
register-with-eureka: false
service-url:
defalutZone: http://${eureka.instance.hostname}:${server.port}/eureka/Maven配置多环境
文件目录:在项目打包过程过程中直接使用命令或者直接在maven中打包即可。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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120<!--定义不同环境-->
<profiles>
<!-- 对外服务层 -->
<profile>
<!-- 本地开发环境 -->
<id>external-dev</id>
<properties>
<!-- 配置文件的路径 -->
<profiles.active>/yml/external/dev</profiles.active>
</properties>
<activation>
<!--默认是本地开发环境 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>external-test</id>
<properties>
<profiles.active>/yml/external/test</profiles.active>
</properties>
</profile>
<profile>
<!-- 预发布 -->
<id>external-pre</id>
<properties>
<profiles.active>/yml/external/pre</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>external-www</id>
<properties>
<profiles.active>/yml/external/www</profiles.active>
</properties>
</profile>
<!-- 对内服务层 -->
<profile>
<!-- 本地开发环境 -->
<id>internal-dev</id>
<properties>
<profiles.active>/yml/internal/dev</profiles.active>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>internal-test</id>
<properties>
<profiles.active>/yml/internal/test</profiles.active>
</properties>
</profile>
<profile>
<!-- 预发布 -->
<id>internal-pre</id>
<properties>
<profiles.active>/yml/internal/pre</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>internal-www</id>
<properties>
<profiles.active>/yml/internal/www</profiles.active>
</properties>
</profile>
<!-- 管理员层 -->
<profile>
<!-- 本地开发环境 -->
<id>manage-dev</id>
<properties>
<profiles.active>/yml/manage/dev</profiles.active>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>manage-test</id>
<properties>
<profiles.active>/yml/manage/test</profiles.active>
</properties>
</profile>
<profile>
<!-- 预发布 -->
<id>manage-pre</id>
<properties>
<profiles.active>/yml/manage/pre</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>manage-www</id>
<properties>
<profiles.active>/yml/manage/www</profiles.active>
</properties>
</profile>
</profiles>
<build>
<resources>
<resource>
<!-- 该目录下与通配符匹配的文件将不会生成到classes目录下 -->
<directory>${basedir}/src/main/resources</directory>
<!-- 排除标签 -->
<excludes>
<!-- yml目录下的文件将不会生成到classes目录下,除非由filtering过滤动态添加的 -->
<exclude>yml/**</exclude>
</excludes>
<filtering>true</filtering>
</resource>
<resource>
<!--
资源文件位置src/main/resources/,这下面的资源文件的${}会全部被替换成filter中的标签内容。
directory指定的value会作为classes的资源根目录,
-->
<directory>${basedir}/src/main/resources/${profiles.active}</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>