博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot 多环境部署
阅读量:5966 次
发布时间:2019-06-19

本文共 2802 字,大约阅读时间需要 9 分钟。

hot3.png

#编译mvn clean package -Dmaven.test.skip=true

Spring Boot 允许准备多个配置文件,可以在系统部署的时候,指定使用哪个配置文件覆盖默认的application.properties,从而完成多环境部署。

需要在resource下创建application-{profile}.properties 的配置文件,其中profile可以是任意名字,比如:

profile 说明
test 表示测试环境
prod 表示线上环境
pre-prod 表示预发布环境
demo1.0 1.0版本演示环境

这些配置文件可以添加或覆盖application.properties文件的属性。

在环境变量中,spring.profile.active指定使用哪个profile,比如:

java -jar -Dspring.profiles.active=prod target/demo-0.0.1.jar
java -jar -Dspring.profiles.active=prod target/demo-0.0.1.jar --server.port=8080
​java -jar target/demo-0.0.1.jar --spring.profiles.active=prod --server.port=8080
#后台运行​nohup java -jar target/demo-0.0.1.jar --spring.profiles.active=prod > /dev/null 2>&1 &

以上配置成功后,Spring Boot 将读取resource/application-prod.properties配置文件,覆盖默认的application.properties选项。

application.properties的内容如下:

server.port=8080...

application-prod.properties的内容如下:

server.port=9000...

如果使用war方式部署,添加系统属性是比较好的方式,下面以Tomcat为例进行说明。

编辑catalina.sh,在sh文件的开头部分添加如下内容:

JAVA_OPTS="-Dspring.profiles.active=prod"

在多环境部署中,通常resource目录下可能没有目标环境的配置文件,这主要是为了安全考虑,开发环境不应该有线上环境的各种配置信息。可以将配置文件放到特定的目录中,并用spring.config.location指定配置文件的目录:

java -jar -Dspring.config.location=file:env/ -Dspring.profiles.active=test target/demo-0.0.1.jar

配置文件位于当前目录的env目录下,profile是test,因此读取的是application-test.properties配置文件。

注意:无论用上面那种多环境配置方法,总是会覆盖已有的application.properties。

Spring Boot 如何找到配置文件:

Spring Boot应用默认读取了application.properties文件,实际上,Spring Boot会自动搜索以下目录下的文件,优先级由低到高,file:config/的优先级最高。

文件目录
classpath:
classpath:/config
file:
file:config/ 

这是系统属性spring.config.location默认的配置。spring.config.name表示配置文件的名称,默认是application。

 

@Profile注解

系统属性spring.profiles.active可以指定使用哪种配置文件,如果指定test,则application-test.properties会覆盖默认的application.properties。

@Profile注解可以结合@Configuration和@Component使用,以决定配置类会否生效。

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;import org.springframework.core.env.Environment;import javax.sql.DataSource;@Configurationpublic class DataSourceConf {        @Bean(name="dataSource")    @Profile("test")    public DataSource testDataSource(Environment env) {    	HikariDataSource test = getDataSource(env);    	test.setMaximumPoolSize(10);    	return test;    }    @Bean(name="dataSource")    @Profile("prod")    public DataSource testDataSource(Environment env) {        HikariDataSource test = getDataSource(env);        test.setMaximumPoolSize(200);        return test;    }        private HikariDataSource getDataSource(Environment env) {        HikariDataSource ds = new HikariDataSource();        // 省略初始化代码        return ds;    }    }

@Profile注解可以支持使用多种profile,也可以使用“!”来排除特定profile。

@Profile({"test", "prod"}) 测试环境和线上环境生效

@Profile({"test", "!prod"}) 测试环境和非线上环境生效

转载于:https://my.oschina.net/u/3777515/blog/1785207

你可能感兴趣的文章
VC++动态链接库(DLL)编程(三)――MFC规则DLL
查看>>
[转]经典正则表达式
查看>>
JDBC+Servlet+JSP整合开发之26.JSP内建对象
查看>>
【下载】深入oracle数据库专用虚拟机环境部署方案《VirtualBox+OELR5U7x86_64+Oracle11gR2》...
查看>>
值得推荐的C/C++开源框架和库
查看>>
列式存储
查看>>
Linux下eclipse编译C/C++程序遇到 undefined reference to `pthread_create'的异常解决办法
查看>>
ajax上传图片的本质
查看>>
转]最长递增子序列问题的求解
查看>>
SilverLight:基础控件使用(6)-Slider控件
查看>>
Android写的一个设置图片查看器,可以调整透明度
查看>>
第 5 章 File Share
查看>>
判断字符串解析是JsonObject或者JsonArray
查看>>
[LeetCode] Implement strStr()
查看>>
多模块Struts应用程序的几个问题(及部分解决方法)
查看>>
1.2. MariaDB
查看>>
SpringSide示例之HelloWorld
查看>>
LINQ-to-SQL那点事~LINQ-to-SQL中的并发冲突与应对
查看>>
日志不说谎--Asp.net的生命周期
查看>>
C#~异步编程续~.net4.5主推的await&async应用
查看>>