一、项目部署
我们之前写的代码都是部署在本地的tomcat上,别人是无法访问我们写的程序的。在实际开发中,我们都要将开发完毕的项目部署到公司的服务器上。
我们的代码需要经过编译打包生成一个jar包,这个过程需要借助一个插件来实现。
创建springboot的时候已经自动添加上了,如果没有就自己加上。
我们将一个maven项目打包,需要执行的命令是package,双击package
打包好的项目就在target目录下
假设我们现在是一个服务器电脑,我们收到了这个jar包,怎么运行使用呢?
找到项目所在的文件目录下,打开cmd输入指令 java -jar 即可运行
这样的话项目就部署好了。
注:部署服务器必须要有jre的环境才行。
二、属性配置方式
我们在开发环境上一般都是用properties或yaml文件进行配置,但是当我们将项目打包好之后,使用者客户是无法这样更改属性的。因此需要别的方式来更改属性。
1、命令行参数方式
在 cmd 中输入: --键=值
如更改端口就是 --server.port=9090,将来传递过来的这个参数会被放到main方法的String[] args中,启动应用后又将数组传递给了run方法
注:Ctrl + c即可快速停止运行程序
成功生效
2、环境变量方式
直接在环境变量-用户变量中新增一个
这次就不用在后面加上--server.port=7777了,直接启动
注:记得把命令窗口也重启一个,不然不会生效
3、外部配置文件
如果此时配置信息有很多,那么前面两种方法就很麻烦了。
因此我们直接在jar包旁边提供一个yml配置文件,这样就可以批量更改配置信息了
配置优先级
如果我们同时使用多种配置方式来配置同意一个属性,那么此时的优先级别为
则优先级高的配置属性会生效
三、多环境开发
程序有可能会运行在多个环境上,常见的环境有三种
开发环境、测试环境、生产环境
不同环境下程序的配置信息也会有所不认同,如数据库
因此我们需要为每一种环境提供一份独立的配置信息。
Spring Profiles
springboot提供的profiles可以用来隔离应用程序的各个部分,并在特定的环境下指定部分配置生效。
使用方式
1、单文件开发
现在重启一个项目,打开一个yml文件,以端口号为例,演示不同的环境下的使用方式
#通用信息,指定生效的环境
spring:
profiles:
active: dev
#有共性的信息,如响应path
server:
servlet:
context-path: /wal
---
#开发环境
spring:
config:
activate:
on-profile: dev
server:
port: 8081
---
#测试环境
spring:
config:
activate:
on-profile: test
server:
port: 8082
---
#生产环境
spring:
config:
activate:
on-profile: pro
server:
port: 8083
---用来分割不同的环境,首先就要指定on-profile属性,这是该环境的名字。dev,test,pro
在最上面的通用环境指定当前激活使用哪一个环境,也可以写这三个环境都有的属性,如path等等。
注意:如果通用环境与单个环境都配置了同一个属性,那么单个环境中配置的属性优先级更高会生效
这种开发方式的缺点十分明显,我们仅仅是配置了一个端口号而已,就写了这么多行代码。假设以后开发要写上百条配置,那么文件的可读性就约等于没有了,维护十分困难。
2、多文件开发
不要将配置统统挤在一个文件中,最好还是分开文件来写
直接 application-当前环境名字
application.yml
#通用信息,指定生效的环境
spring:
profiles:
active: pro
application-pro.yml
#开发环境
server:
port: 8082
这里面就不用再写spring:
config:
activate:
on-profile: pro了,直接一个port:8082,启动程序后就显示8082了
这样干净整洁,层次分明。但是由于单个文件中的配置众多,三个写出来是依旧难以维护
分组
为了解决这个问题,我们可以将配置信息拆分再重新分组
不将配置文件开发、测试、生产等环境区分
而是分成配置文件以功能区分
这样在application.yml文件中active激活使用的就不是单个文件了,而是一个配置文件组成的分组