文章目录
- 零、学习目标
- 一、项目进行多环境配置的必要性
- 二、使用Profile文件进行多环境配置
- (一)创建Spring Boot项目
- (二)创建多环境配置文件
- 1、全局配置文件改名
- 2、模拟开发环境
- 3、模拟测试环境
- 4、模拟生产环境
 
- (三)创建控制器
- (四)采用默认环境
- 2023-5-30 更新到此
- (五)指定使用环境
- 方式1、使用配置文件全局指定使用环境
- (1) 在全局配置文件里指定当前使用环境 - 开发环境
- (2) 在全局配置文件里指定当前使用环境 - 测试环境
- (3) 在全局配置文件里指定当前使用环境 - 生产环境
 
- 方式2、通过命令行方式指定使用环境
- (1)使用IDEA将Maven项目打成jar包
- (2)在终端执行jar包,选择使用环境 - 开发环境
- (3)在终端执行jar包,选择使用环境 - 测试环境
- (4)在终端执行jar包,选择使用环境 - 生产环境
 
 
 
- 三、使用@Profile注解进行多环境配置
- (一)创建Spring Boot Web项目ProfileDemo02
- (二)创建数据库配置接口DatabaseConfig
- (三)创建三个数据库配置实现类
- 1、创建数据库配置实现类MySQLConfig
- 2、创建数据库配置实现类OracleConfig
- 3、创建数据库配置实现类SybaseConfig
 
- (四)在全局配置文件里设置使用环境
- (五)打开测试类,编写测试方法
- (六)运行测试方法,查看结果
- 课堂练习
- 1、设置使用环境 - MySQL数据库环境,并测试
- 2、设置使用环境 - Sybase数据库环境,并测试
 
 
- 四、随机值设置以及参数间引用
- (一)创建Spring Boot Web项目RandomSetDemo
- (二)在全局配置文件里配置随机值
- (三)在测试类里测试配置的随机数
- 1、测试随机数my.number
- 2、测试随机整数my.integer
 
- 课堂练习
- 1、测试长整型随机数my.long
- 2、测试随机UUID值my.uuid
- 3、测试小于10的随机整数my.number.less
- 4、测试1024至65535之间的随机整数my.number.range
 
- (四)演示参数间的引用
 
零、学习目标
- 掌握使用Profile文件进行多环境配置
- 掌握使用@Profile注解进行多环境配置
- 熟悉随机值设置以及参数间引用
一、项目进行多环境配置的必要性
- 在实际开发中,应用程序通常需要部署到不同的运行环境中,例如开发环境、测试环境、生产环境等。不同的环境可能需要不同的环境配置,针对这种情况,不可能手动变更配置文件来适应不同的开发环境,通常需要对项目进行多环境配置,Spring Boot框架提供了两种多环境配置的方式,分别是Profile文件多环境配置和@Profile注解多环境配置。同时,会额外讲解在Spring Boot配置文件中设置属性时,除了可以像前面示例中显示的配置属性值外,还可以使用随机值和参数间引用对属性值进行设置。
二、使用Profile文件进行多环境配置
(一)创建Spring Boot项目
- 基于Spring Initializr模板创建Spring Boot项目
  
- 配置项目元数据
  
- 选择Spring Boot版本,添加相关依赖
  
- 配置项目名称与保存位置
  
- 单击【Finish】按钮
  
- 在《企业级信息系统开发讲课笔记4.3》里,我们学习两种格式的全局配置文件:application.properties和application.yaml,本次案例,我们准备采用yaml格式的配置文件。
(二)创建多环境配置文件
- 配置文件命名格式:application-xxx.yaml
- 此例仅演示端口号与虚拟路径的配置,实际应用中可以配置许多内容
1、全局配置文件改名
- 将application.properties更名为application.yaml
  
2、模拟开发环境
- 在resources里创建配置文件 -application-dev.yaml
  
# 配置服务器
server:
  port: 8081
  servlet:
    context-path: /lzy01
3、模拟测试环境
- 在resources里创建配置文件 -application-test.yaml
  
# 配置服务器
server:
  port: 8082
  servlet:
    context-path: /lzy02
4、模拟生产环境
- 在resources里创建配置文件 -application-prod.yaml
  
# 配置服务器
server:
  port: 8083
  servlet:
    context-path: /lzy03
- 查看三个配置文件
  
(三)创建控制器
- 在net.huawei.boot包里创建controller子包,在子包里创建ProfileController类
  
package net.huawei.boot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 功能:概况控制器
 * 作者:华卫
 * 日期:2023年05月30日
 */
@RestController
public class ProfileController {
    @GetMapping("/welcome")
    public String welcome() {
        return "<h1 style='color: red; text-align: center'>欢迎访问Spring Boot世界~</h1>";
    }
}
(四)采用默认环境
- 默认采用配置文件application.yaml,启动服务器,访问http://localhost:8080/welcome
  
2023-5-30 更新到此
(五)指定使用环境
方式1、使用配置文件全局指定使用环境
(1) 在全局配置文件里指定当前使用环境 - 开发环境

-  spring: profiles: active: dev,表明当前生效的环境配置文件是application-dev.yaml
-  启动项目,查看采用的使用环境:服务器端口号与虚拟路径 
  
-  访问 http://localhost:8081/lzy/hello
  
(2) 在全局配置文件里指定当前使用环境 - 测试环境

-  spring: profiles: active: test,表明当前生效的环境配置文件是application-test.yaml
-  启动项目,查看采用的使用环境:服务器端口号与虚拟路径 
  
-  访问 http://localhost:8081/lzy/hello
  
-  访问 http://localhost:8082/ied/hello
  
(3) 在全局配置文件里指定当前使用环境 - 生产环境

-  spring: profiles: active: pro,表明当前生效的环境配置文件是application-pro.yaml
-  启动项目,查看采用的使用环境:服务器端口号与虚拟路径 
  
-  访问 http://localhost:8082/ied/hello
  
-  访问 http://localhost:8083/china/hello
  
方式2、通过命令行方式指定使用环境
(1)使用IDEA将Maven项目打成jar包
- Maven - ProfileDemo01 - LifeCycle - package,单击右键,在快捷菜单里执行“Run Maven Build”
  
  
- 在target目录里查看生成的项目jar包profiledemo01-0.0.1-SNAPSHOT.jar
  
(2)在终端执行jar包,选择使用环境 - 开发环境
D:\IdeaProjects\ProfileDemo01>cd target
D:\IdeaProjects\ProfileDemo01\target>java -jar profiledemo01-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

 
- 访问http://localhost:8081/lzy/hello
  
- 按Ctrl + C组合键,停止项目的运行
  
(3)在终端执行jar包,选择使用环境 - 测试环境
D:\IdeaProjects\ProfileDemo01\target>java -jar profiledemo01-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

- 访问http://localhost:8082/ied/hello
  
- 按Ctrl + C组合键,停止项目的运行
  
(4)在终端执行jar包,选择使用环境 - 生产环境
D:\IdeaProjects\ProfileDemo01\target>java -jar profiledemo01-0.0.1-SNAPSHOT.jar --spring.profiles.active=pro

- 访问http://localhost:8083/china/hello
  
- 按Ctrl + C组合键,停止项目的运行
  
三、使用@Profile注解进行多环境配置
- 如果项目可能用到三种不同的数据库环境,比如MySQL、Oracle和Sybase,那么我们如何利用@Profile注解来实现多数据库环境配置呢?
(一)创建Spring Boot Web项目ProfileDemo02
- 项目初始化过程可以参看上一讲ConfigDemo01的创建过程
  
- 将项目进行热部署
  
  
(二)创建数据库配置接口DatabaseConfig
- 在net.hw.lesson05里创建config子包,在子包里创建DatabaseConfig接口
  
package net.hw.lesson05.config;
/**
 * 功能:数据库配置接口
 * 作者:华卫
 * 日期:2021年05月08日
 */
public interface DatabaseConfig {
    void connector();
}
(三)创建三个数据库配置实现类
1、创建数据库配置实现类MySQLConfig

package net.hw.lesson05.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
 * 功能:MySQL数据库配置类
 * 作者:华卫
 * 日期:2021年05月08日
 */
@Configuration // 指定为配置类
@Profile("mysql") // 指定配置环境名称
public class MySQLConfig implements DatabaseConfig {
    @Override
    public void connector() {
        System.out.println("项目使用MySQL数据库环境!");
    }
}
2、创建数据库配置实现类OracleConfig

package net.hw.lesson05.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
 * 功能:Oracle数据库配置类
 * 作者:华卫
 * 日期:2021年05月08日
 */
@Configuration // 指定为配置类
@Profile("oracle") // 指定配置环境名称
public class OracleConfig implements DatabaseConfig {
    @Override
    public void connector() {
        System.out.println("项目使用Oracle数据库环境!");
    }
}
3、创建数据库配置实现类SybaseConfig

package net.hw.lesson05.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
 * 功能:Sybase数据库配置类
 * 作者:华卫
 * 日期:2021年05月08日
 */
@Configuration // 指定为配置类
@Profile("sybase") // 指定配置环境名称
public class SybaseConfig implements DatabaseConfig {
    @Override
    public void connector() {
        System.out.println("项目使用Sybase数据库环境!");
    }
}
(四)在全局配置文件里设置使用环境
- 在全局配置文件application.properties里配置使用环境
  
(五)打开测试类,编写测试方法
- 点开测试类ProfileDemo02ApplicationTests
  
- 注入数据配置实体
- 调用数据库配置实体的方法
package net.hw.lesson05;
import net.hw.lesson05.config.DatabaseConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class ProfileDemo02ApplicationTests {
    
    @Autowired // 注入数据库配置实体
    private DatabaseConfig databaseConfig;
    @Test
    void contextLoads() {
        // 调用数据库配置实体的方法
        databaseConfig.connector();
    }
}
(六)运行测试方法,查看结果
- 运行测试方法contextLoads()
  
  
课堂练习
1、设置使用环境 - MySQL数据库环境,并测试
2、设置使用环境 - Sybase数据库环境,并测试
四、随机值设置以及参数间引用
(一)创建Spring Boot Web项目RandomSetDemo

 
 
 
(二)在全局配置文件里配置随机值

#任意一个随机数
my.number=${random.value}
#一个随机整数
my.integer=${random.int}
#一个长整型的随机数
my.long=${random.long}
#获取一个随机的UUID值
my.uuid=${random.uuid}
#小于10的随机整数
my.number.less=${random.int(10)}
#随机产生1024至65535之间的数
my.number.range=${random.int[1024,65535]}
(三)在测试类里测试配置的随机数
- 点开测试类RandomSetDemoApplicationTests
  
1、测试随机数my.number
- 注入配置文件里的属性
- 输出配置文件里的属性
package net.hw.lesson05;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RandomSetDemoApplicationTests {
    // 注入配置文件里的属性
    @Value("${my.number}")
    private String number;
    @Test
    void contextLoads() {
        // 输出配置文件里的属性
        System.out.println(number);
    }
}
- 反复运行测试方法contextLoads(),查看结果
  
- 运行了三次,最后一次结果
  
- 大家可以看到,产生的是32位的十六进制数对应的字符串
2、测试随机整数my.integer
- 注入配置文件里的属性
- 输出配置文件里的属性

- 反复运行测试方法contextLoads(),查看结果
  
- 运行了三次,最后一次结果
  
课堂练习
1、测试长整型随机数my.long

 
2、测试随机UUID值my.uuid

 
3、测试小于10的随机整数my.number.less

 
4、测试1024至65535之间的随机整数my.number.range

 
(四)演示参数间的引用
- 在appication.properties文件里,后定义的属性可引用前面定义的属性
- 定义三个属性year、month和day
- 定义属性user.name
- 定义属性user.birthday,引用属性year、month和day
  
- 修改测试类RandomSetDemoApplicationTests
package net.hw.lesson05;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class RandomSetDemoApplicationTests {
    // 注入配置文件里的属性
    @Value("${user.name}")
    private String name;
    @Value("${user.birthday}")
    private String birthday;
    @Test
    void contextLoads() {
        // 输出配置文件里的属性
        System.out.println(name + " : " + birthday);
    }
}
- 运行测试方法,查看结果
  



















