摘要:的配置文件默认为或,此外仅以配置为说明。的由的标签管理。管理由于构建是基于或,此处仅以说明。管理分五步,以下详细介绍。并且为表示,会将文件内容的替换为相应的变量如文件中的会替换为属性值。
1. Spring Profile
Spring可使用Profile决定程序在不同环境下执行情况,包含配置、加载Bean、依赖等。
Spring的Profile一般项目包含:dev(开发), test(单元测试), qa(集成测试), prod(生产环境)。由spring.profiles.active属性决定启用的profile。
SpringBoot的配置文件默认为 application.properties(或yaml,此外仅以properties配置为说明)。不同Profile下的配置文件由application-{profile}.properties管理,同时独立的 Profile配置文件会覆盖默认文件下的属性。
Maven同样也有Profile设置,可在构建过程中针对不同的Profile环境执行不同的操作,包含配置、依赖、行为等。
Maven的Profile由 pom.xml 的
此文章不对Spring和Maven的Profile作过多说明,详细情况请自行查阅。
由于构建是基于Maven(或Gradle,此处仅以Maven说明)。所以使用Maven管理Spring构建时的Profile是非常方便的。
Maven管理Spring Profile分五步,以下详细介绍。
在SpringBoot MVC项目中,默认以内嵌Tomcat运行,如果需要特殊的设置或者使用Undertow,需要去掉默认的Tomcat依赖:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat
如果你同时使用了 MyBatis,需要去掉tomcat-jdbc依赖:
3.2 Maven Profile设置org.mybatis.spring.boot mybatis-spring-boot-starter org.apache.tomcat tomcat-jdbc
在项目(如果有模块为具体模块)的pom.xml下设置:
dev true dev org.springframework.boot spring-boot-starter-tomcat org.apache.tomcat tomcat-jdbc prod prod
从上面的配置可以看出,Maven的Profile配置了两个:dev和prod,并且在dev中使用了内嵌Tomcat,而 prod 中没有,所以这两个Profile打包的文件dev可以直接运行(Plugin使用了SpringBoot Plugin),而prod并不能直接运行(或部署在外部Tomcat下,并不推荐这样,后面会说明)。
properties中的profileActive是我们申明的属性,此处对应Spring的Profile值。
SpringBoot的 Profile选择需要在 application.properties中配置,如果定死在文件,那么每次打包都需要手动修改,很麻烦,而且容易出错。
Maven的资源过滤功能可以实现在构建时修改以“@xxx@”表示的属性。资源过滤需要在pom.xml的
src/main/resources application*.properties src/main/resources true application.properties application-${profileActive}.properties
上面的第一个resource去掉了src/main/resources下的所有application*.properties文件,“*”是通配符,表示此处有任何内容(没有也可以)都匹配。
第二个resource添加了application.properties默认配置文件和由profileActive属性决定的相应profile配置文件。并且filtering为true表示,会将文件内容的“@xx@”替换为相应的变量(如文件中的@profileActive@会替换为profileActive属性值)。
在application.properties默认配置文件中配置:
spring.profiles.active = @profileActive@
@profileActive@表示该属性值会在maven构建时被替换掉。
3.5 构建构建命令:
mvn clean package -Pdev
上面的命令会根据Maven Profile的 dev构建环境包,如果需要prod包,则把-P的参数替换成prod即可。
为了方便我会在每个项目下生成一个build.sh文件,内容如下:
#!/bin/bash profileActive=prod if [ -n "$1" ]; then profileActive=$1 fi mvn clean package -Dmaven.test.skip=true -P$profileActive
该脚本接收一个参数,即打包对应的Profile。默认情况下如果不带参数,会打包prod环境包。
需要注意的是,该命令跳过了测试。
完成了上面的五步,即可使项目根据你的构建参数的不同,打包出不同环境下运行的包。
第1步去掉了SpringBoot内嵌的tomcat和tomcat-jdbc。使得我们可以决定在什么情况下使用何种容器运行我们的项目。
第2步配置了Maven构建Porfile,使得构建可根据我们的指令分发不同的包。
第3步配置了Maven资源过滤,不仅使得不同Profile下的资源文件互不可见,且替换了资源文件中以“@xx@”表示的属性值。
第4步使Spring的Profile由Maven决策,这样,我们就不用每次打包都修改Spring的Profile配置了。
第5步展示了如何执行不同Profile下的构建命令,并且使用了一个Shell脚本方便我们执行构建和跳过测试(多数时候我们在构建项目时先测试,并不需要在构建时测试,测试和构建的解耦使得我们更专注。但同时,如果你忘记了前置测试,也可能会引发未察觉的测试问题)。
5. 参考[1]. http://blog.csdn.net/lihe2008...
[2]. http://blog.csdn.net/hguisu/a...
[3]. https://www.tianmaying.com/tu...
[4]. http://blog.csdn.net/james_wa...
[5]. http://www.jianshu.com/p/755a...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67902.html
摘要:创建统一服务项目可以使用来初始化项目,选择自己的以来就好。动态刷新配置目前如果我们修改了上的配置并不能马上生效,需要我们的客户端工程重启才行,现在需要改造成自动刷新。 一直使用springboot搭建后端项目,所有的配置都写到自己的resource目录下,随着微服务的项目越来越多,每个项目都需要自己的各种配置文件。而且后期一旦想要修改配置文件,就得重新发布一遍非常的麻烦,现在就来教教大...
摘要:项目上传将项目上传到华为云服务器,没啥好说的。环境搭建建议在环境下安装,环境搭建比较复杂且容易出错,使用来安装环境很方便。使用部署项目将项目复制到服务器中,进入项目路径下进行打包测试。 项目搭建 Spring Boot 项目代码 @RestController public class SpringBootDockerApplication { public static vo...
摘要:如删除临时文件,清除缓存信息,读取配置文件信息,数据库连接等。提供的接口也可以满足该业务场景。不同点中方法的参数为,而接口中方法的参数为数组。 spring-boot-starter-parent Maven的用户可以通过继承spring-boot-starter-parent项目来获得一些合理的默认配置。这个parent提供了以下特性: 默认使用Java 8 使用UTF-8编码 一...
摘要:需要注意的是必须要使用版本为以上才支持属性。与格式文件不同,正对不同的,无法在一个文件设置,官方采用命名形式为格式来达成一样的效果。采用方式添加的是属于额外激活的,也就是说覆盖掉外部传入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...
阅读 1967·2021-11-23 10:08
阅读 2308·2021-11-22 15:25
阅读 3255·2021-11-11 16:55
阅读 744·2021-11-04 16:05
阅读 2528·2021-09-10 10:51
阅读 693·2019-08-29 15:38
阅读 1546·2019-08-29 14:11
阅读 3464·2019-08-29 12:42