springBoot读取配置文件多环境热部署打包等基本配置

Posted kraviswy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springBoot读取配置文件多环境热部署打包等基本配置相关的知识,希望对你有一定的参考价值。

读取配置文件

在以前的项目中我们主要在 XML 文件中进行框架配置,业务的相关配置会放在属性文件中,

然后通过一个属性读取的工具类来读取配置信息。

在 Spring Boot 中我们不再需要使用这种方式去读取数据了。

Spring Boot 中的配置通常放在 application.properties 中,读取配置信息非常方便,总共分为 3 种方式。

1)Environment

可以通过 Environment 的 getProperty 方法来获取想要的配置信息,代码如下所示。

@RestController
public class HelloController {

    // 注入对象
    @Autowired
    private Environment env;

    @GetMapping("/hello")
    public String hello() {
        // 读取配置
        String port = env.getProperty("server.port");
        return port;
    }
}

2)@Value

可以注入具体的配置信息,代码如下所示。
@RestController
public class HelloController {

    // 注入配置
    @Value("${server.port}")
    private String port;

    @GetMapping("/hello")
    public String hello() {
        return port;
    }
}

3)自定义配置类

prefix 定义配置的前缀,代码如下所示。
@ConfigurationProperties(prefix = "net.biancheng")
@Component
public class MyConfig {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
读取配置的方法代码如下所示。
@RestController
public class HelloController {

    @Autowired
    private MyConfig myConfig;

    @GetMapping("/hello")
    public String hello() {
        return myConfig.getName();
    }
}
定义配置 application.properties 的方法如下:
net.biancheng.name=zhangsan

profiles 多环境配置

在平时的开发中,项目会被部署到测试环境、生产环境,但是每个环境的数据库地址等配置信息都是不一样的。
通过 profile 来激活不同环境下的配置文件就能解决配置信息不一样的问题。
在 Spring Boot 中可以通过 spring.profiles.active=dev 来激活不同环境下的配置。

可以定义多个配置文件,每个配置文件对应一个环境,格式为 application-环境.properties,如表 1 所示。

表 1 profile 多环境配置
application.properties 通用配置,不区分环境
application-dev.properties 开发环境
application-test.properties 测试环境
application-prod.properties 生产环境

在开发环境中,可以通过修改 application.properties 中的 spring.profiles.active 的值来激活对应环境的配置,
在部署的时候可以通过 java–jar xxx.jar--spring.profiles.active=dev 来指定使用对应的配置。

热部署

开发过程中经常会改动代码,此时若想看下效果,就不得不停掉项目然后重启。

对于 Spring Boot 项目来说,启动时间是非常快的,在微服务的架构下,
每个服务只关注自己的业务,代码量也非常小,这个启动时间是可以容忍的。

对于那些臃肿的单体老项目,启动时间简直是浪费生命。
虽然 Spring Boot 启动很快,但是我们还是要自己去重启。
能不能做到有改动,它就会悄无声息地自己把改动的地方重新加载一遍?
答案是肯定的,通过 spring-boot-devtools 就可以实现。

只需要添加 spring-boot-devtools 的依赖即可实现热部署功能,代码如下所示。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
</dependency>

actuator 监控

Spring Boot 提供了一个用于监控和管理自身应用信息的模块,它就是 spring-boot-starter-actuator。
该模块使用起来非常简单,只需要加入依赖即可,代码如下所示。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

编译打包

传统的 Web 项目在部署的时候,是编译出一个 war 包放到 Tomcat 的 webapps 目录下。
而在 Spring Boot 构建的 Web 项目中则打破了这一传统部署的方式,它采用更加简单的内置容器方式来部署应用程序,
只需要将应用编译打包成一个 jar 包,直接可以通过 java–jar 命令启动应用。

在项目的 pom.xml 中增加打包的 Maven 插件,代码如下所示。
<build>
    <plugins>
        <!-- 打包插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <executable>true</executable>
                <mainClass>******.className</mainClass>
            </configuration>
        </plugin>

        <!-- 编译插件, 指定JDK版本 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

mainClass 配置的是我们的启动入口类,配置完成后可以通过 Maven 的 mvn clean package 命令进行编译打包操作。
编译完成后在 target 目录下会生成对应的 jar 包,部署的时候直接调用 java–jar xx.jar 即可启动应用。

以上是关于springBoot读取配置文件多环境热部署打包等基本配置的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot 快速构建热部署自动配置原理配置文件整合SpringMVCredisjunitmybatis打包部署

react+springBoot 项目部署到腾讯云

springboot系列SpringBoot 单元测试配置访问配置项目打包发布加载和读取多个配置文件

Springboot多环境下多个配置文件规范配置方案

SpringBoot项目打包-Assembly

vue项目打包配置多环境