SpringBoot之开启Profile

我们在做项目开发的时候,生产环境和测试环境的一些配置可能会不一样,有时候一些功能也可能会不一样,所以我们可能会在上线的时候手工修改这些配置信息。但是Spring中为我们提供了Profile这个功能。我们只需要在启动的时候添加一个虚拟机参数,激活自己环境所要用的Profile就可以了。下面举个例子来说明一下:

首先我们先创建一个bean,用来测试是不是从不同的配置文件中取的值。代码如下(省略getter/setter):

@ConfigurationProperties("profile.test")
@Component
public class ProfileDomain implements Serializable {

    private static final long serialVersionUID = 2092752356451204202L;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 密码
     */
    private String passWord;
}
接着我们在resources下面建立两个properties文件。


application-dev.properties用来存放的时候开发环境的配置信息,application-prod.properties用来存放的是生产环境的配置信息。内容分别如下:

application-dev.properties:

profile.test.userName=\u6211\u662f\u5f00\u53d1\u73af\u5883
profile.test.passWord=this is development environment
application-prod.properties:

profile.test.userName=\u6211\u662f\u751f\u4ea7\u73af\u5883
profile.test.passWord=this is production environment
我们写个Controller来测试一下:

@RestController
public class ProfileController {

    @Autowired
    private ProfileDomain profileDomain;

    @RequestMapping("testProfile")
    public ProfileDomain testProfile() {

        return profileDomain;
    }
}
我们用命令行启动一下(注意我们这里加了个参数 --spring.profiles.active=dev):

java -jar LearnSpringBoot-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
下面我们访问一下:http://localhost:8003/testProfile,输出结果如下:


从输出结果中我们可以看出,输出的内容是application-dev.properties中的配置信息。下面我们用另外一个命令参数启动一下:

java -jar LearnSpringBoot-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
我们还是用上面的请求访问一下:

http://localhost:8003/testProfile,输出结果如下:

从上面的输出结果中我们可以看到我们在启动SpringBoot的时候所启用的profile,它就会从不同的配置文件中加载配置项。另外还可以增加虚拟机参数:-Dspring.profiles.active=prod的方式来激活不同的profile。也可以在SpringBoot默认的或者指定的配置文件中增加profile的激活项。如:spring.profiles.active=dev。

有时候我们可能还会有这样的需求,生产环境或者开发环境我们所看到的功能是不同的,也需要我们根据配置项来激活不同的功能。

首先我们先定义一个Service的接口:

public interface  ProfileService {

    String getProfileDomain();
}
如果spring.profiles.active的值是prod的时,它的实现类如下:

@Profile(value = "prod")
@Service
public class ProfileProdServiceImpl implements ProfileService {

    public ProfileProdServiceImpl() {

        System.out.println("我是生产环境。。。。。");
    }

    @Override
    public String getProfileDomain() {
        StringBuilder sb = new StringBuilder();
        sb.append("我在生产环境,").append("我可以吃鸡鸭鱼牛羊肉。。。。");
        return sb.toString();
    }
}
如果spring.profiles.active的值是dev的时,它的实现类如下:

@Profile(value = "dev")
@Service
public class ProfileDevServiceImpl implements ProfileService {

    public ProfileDevServiceImpl() {

        System.out.println("我是开发环境。。。。。");
    }

    @Override
    public String getProfileDomain() {
        StringBuilder sb = new StringBuilder();
        sb.append("我在开发环境,").append("我只能吃加班餐:大米饭。。。。");
        return sb.toString();
    }
}
下面我们来测试一下,在刚才的Controller类中注入ProfileService,代码如下:

@RestController
public class ProfileController {

    @Autowired
    private ProfileDomain profileDomain;
    @Autowired
    private ProfileService profileService;

    @RequestMapping("testProfile")
    public ProfileDomain testProfile() {

        return profileDomain;
    }

    @RequestMapping("testProfile2")
    public String testProfile2() {

        return profileService.getProfileDomain();
    }
}
当我们的spring.profiles.active为prod的时候:请求如下:http://localhost:8003/testProfile2,输出如下:

当我们的spring.profiles.active为dev的时候:请求如下:http://localhost:8003/testProfile2,输出如下:

我们在根据环境进行功能切换的类上加上@Profile注解,这样就可以根据所激活的不同的环境,注入不同的实现类。
这里需要注意一下:如果用了@Profile这个注解,在配置项中找不到@Profile中的值的话,在系统启动的时候是会报错的。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot的Profile功能可以帮助我们在不同的环境中轻松地配置和管理应用程序。通过使用Profile,我们可以在开发、测试和生产环境中分别使用不同的配置文件,而不需要手动更改配置文件或代码。 首先,在Spring Boot应用程序的配置文件中,我们可以定义多个Profile。这些Profile可以根据不同的环境进行命名,例如"dev"表示开发环境,"test"表示测试环境,"prod"表示生产环境等等。 接着,我们可以在配置文件中为每个Profile配置不同的属性。这样,当应用程序以不同的Profile运行时,它将加载对应的配置文件,并使用相应的属性。例如,在开发环境中,我们可能希望打开调试模式、使用内存数据库和禁用缓存,而在生产环境中,我们可能希望关闭调试模式、使用真实数据库和启用缓存。 在代码中,我们可以使用@Profile注解来指定应用程序应该使用哪个Profile。例如,我们可以将@Service或@Configuration类注解为@Profile("dev"),这样它们仅在开发环境中起作用。同时,我们还可以使用@ActiveProfiles注解来指定当前激活的Profile。 最后,在启动应用程序时,我们可以通过设置"spring.profiles.active"系统属性或环境变量来指定要激活的Profile。例如,我们可以在命令行中使用"-Dspring.profiles.active=dev"来指定激活开发环境。 通过使用Spring Boot的Profile功能,我们可以轻松地在多个环境中切换应用程序的配置和行为,使得开发、测试和生产环境之间的部署和管理更加方便。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值