properties-yaml配置文件和多环境配置以及打包发布运行

Spring Boot配置文件

Spring Boot 整个应用程序只有一个配置文件.properties 或 .yml 文件。Spring Boot 对每个配置项都有默认值,如果都是用默认值,连配置文件都可以不用。当然,我们也可以添加配置文件,用以覆盖其默认值。

properties 是以逗号隔开,而 yaml 则换行+ tab 隔开,这里需要注意的是冒号后面必须空格,否则会报错。yaml 文件格式更清晰,更易读、

20200420142834

多环境配置

在一个企业级系统中,开发时使用开发环境,测试时使用测试环境,上线时使用生产环境。每个环境的配置都可能不一样,比如开发环境的数据库是本地地址,而测试环境的数据库是测试地址。那我们在打包的时候如何生成不同环境的包。

首先,创建 application.yml 文件,在里面添加如下内容:

1
2
3
spring:
profiles:
active: dev

含义是指定当前项目的默认环境为 dev,即项目启动时如果不指定任何环境,Spring Boot 会自动从 dev 环境文件中读取配置信息。我们可以将不同环境都共同的配置信息写到这个文件中。

然后创建多环境配置文件,文件名的格式为:application-{profile}.yml,其中,{profile} 替换为环境名字,如 application-dev.yml,我们可以在其中添加当前环境的配置信息,如添加数据源:

1
2
3
4
5
6
spring:
datasource:
url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=true
username: root
password: root
driverClassName: com.mysql.jdbc.Driver

这样,我们就实现了多环境的配置,每次编译打包我们无需修改任何东西,编译为 jar 文件后,运行命令:

1
java -jar api.jar --spring.profiles.active=dev

其中就是我们要指定的环境。

打包发布与运行

war包运行

pom:

1
2
3
4
5
6
7
8
9
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<build>
<finalName>index</finalName>
</build>

mvn package 就会生成 war 包,然后放到 Tomcat 当中就能启动,但是这样配置在 Tomcat 是不能成功运行的会报错,需要通过编码指定 Tomcat 容器启动,修改 HelloController 类:

1
2
3
4
5
6
7
8
9
10
public class HelloController extends SpringBootServletInitializer{
@RequestMapping("hello")
String hello() {
return "Hello World!";
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}

由于我们采用web3.0 规范,是没有web.xml 的,而此类的作用与web.xml相同。

这时再打包放到 Tomcat,启动就不会报错了。

jar包运行

1
2
3
4
5
6
7
8
9
10
11
12
13
<packaging>jar</packaging>
<build>
<finalName>api</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.xxx.xxxxxxApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>

然后通过 mvn package 打包,最后通过 java 命令启动:java -jar api.jar

springboot热部署与发布

springboot有3中热部署方式:

1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动
2.使用springloaded本地加载启动,配置jvm参数  -javaagent:<jar包地址> -noverify
3.使用devtools工具包,操作简单,但是每次需要重新部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

热部署方式在IDEA是默认没有打开自动编译的,手动编译需要快捷键(Ctrl+Shift+F9),自动编译的修改配置如下:File-Settings-Compiler-Build Project automatically

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

方式一:

IDEA设置:

1
2
 “File” -> “Settings” -> “Build,Execution,Deplyment” -> “Compiler”,选中打勾 “Build project automatically” 。
组合键:“Shift+Ctrl+Alt+/” ,选择 “Registry” ,选中打勾 “compiler.automake.allow.when.app.running”

方式二:

配置:

1
2
3
4
5
6
#热部署生效
spring.devtools.restart.enabled: true
#设置重启的目录
#spring.devtools.restart.additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude: WEB-INF/**