添加URL
相关文章推荐
zhiwen.tan  ·  spring ...·  2 年前    · 
lzx198301  ·  前后端分离项目之Spring ...·  3 年前    · 
天涯  ·  Spring ...·  7 月前    · 

spring boot 入门 使用spring.profiles.active来分区配置

很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置

spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

profile的配置文件可以按照application.properyies的放置位置一样,放于以下四个位置,

  1. 当前目录的 “/config”的子目录下
  2. 当前目录下
  3. classpath根目录的“/config”包下
  4. classpath的根目录下

在这里我们就定义俩个profile文件,application-cus1.properties和application-cus2.properties,并在俩个文件中都分别写上变量cusvar=cus1和cusvar=cus2

我们在application.properyies也写上,并把profile切换到application-cus1.properties的配置文件
cusvar=cus3
spring.profiles.active=cus1
可以通过这样子来测试 @RestController @RequestMapping ( "/task" ) public class TaskController { @RequestMapping (value = { "/" , "" }) public String hellTask (@ Value ("${cusvar} ")String cusvar ){ return " hello task !! myage is " + cusvar;

在这里可以看到spring.profiles.active激活的profile不同,打印出来的结果也不一样。

除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,例如数据库配置,这里我们先定义一个接口

public interface DBConnector {
    public void configure();    
分别定义俩个实现类来实现它
  * 测试数据库
@Component
@Profile("testdb")
public class TestDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("testdb");
 * 生产数据库
@Component
@Profile("devdb")
public class DevDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("devdb");
通过在配置文件激活具体使用哪个实现类
spring.profiles.active=testdb
然后就可以这么用了
@RestController
@RequestMapping("/task")
public class TaskController {
    @Autowired DBConnector connector ;
    @RequestMapping(value = {"/",""})
    public String hellTask(){
        connector.configure(); //最终打印testdb     
        return "hello task !! myage is " + myage;
除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile
spring.profiles: testdb
spring.profiles.include: proddb,prodmq
以上就是spring boot用profile的作用

通过命令行设置属性值

相信使用过一段时间Spring Boot的用户,一定知道这条命令:java -jar xxx.jar --server.port=8888,通过使用--server.port属性来设置xxx.jar应用的端口为8888。

在命令行运行时,连续的两个减号--就是对application.properties中的属性值进行赋值的标识。所以,java -jar xxx.jar --server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888,该设置在样例工程中可见,读者可通过删除该值或使用命令行来设置该值来验证。

通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数,那岂不是很不安全?是的,所以Spring Boot也贴心的提供了屏蔽命令行访问属性的设置,只需要这句设置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)

多环境配置

    以上都不是重点,这才是重点,这才是重点,这才是重点,重要的事情说3遍。我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。     对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。        在Spring Boot中多环境配置文件名需要满足 application-{profile}.properties 的格式,其中 {profile} 对应你的环境标识,比如:    application-dev.properties:开发环境    application-test.properties:测试环境    application-prod.properties:生产环境        至于哪个具体的配置文件会被加载,需要在 application.properties 文件中通过 spring.profiles.active 属性来设置,其值对应 {profile} spring.profiles.active=test application-test.properties 配置文件内容 下面,以不同环境配置不同的服务端口为例,进行样例实验。      针对各环境新建不同的配置文件 application-dev.properties application-test.properties application-prod.properties      在这三个文件均都设置不同的 server.port 属性,如:dev环境设置为8080,test环境设置为9090,prod环境设置为80      application.properties中设置 spring.profiles.active=dev ,就是说默认以dev环境设置 测试不同配置的加载:      执行java -jar xxx.jar,可以观察到服务端口被设置为8080,也就是默认的开发环境(dev)      执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)      执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod) 按照上面的实验,可以如下总结多环境的配置思路:    application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置    application-{profile}.properties中配置各个环境不同的内容 通过命令行方式去激活不同环境的配置。 多环境高级应用        在某些情况下,应用的某些业务逻辑可能需要有不同的实现。例如邮件服务,假设 EmailService send(String email) 方法向指定地址发送电子邮件,但是我们仅仅希望在生产环境中才执行真正发送邮件的代码,而开发环境里则不发送以免向用户发送无意义的垃圾邮件。        我们可以借助Spring的注解 @Profile 实现这样的功能,这样需要定义两个实现 EmailService 借口的类:  * 发送邮件接口. public interface EmailService {     /**发送邮件*/     publicvoid send(); 发送邮件的具体实现(dev-开发环境的代码): @Service @Profile("dev"//开发环境的时候. public class DevEmailServiceImpl implements EmailService{     @Override     publicvoid send() {        System.out.println("DevEmailServiceImpl.send().开发环境不执行邮件的发送.");
@Service
@Profile("prod"//生产环境.
public class ProdEmailServiceImpl2 implements EmailService{
    @Override
    publicvoid send() {
       System.out.println("DevEmailServiceImpl.send().生产环境执行邮件的发送.");
       //具体的邮件发送代码.
       //mail.send();
@Profile("dev")
表明只有Spring定义的Profile为
时才会实例化
DevEmailService
这个类。那么如何设置Profile呢?

在配置文件中指定

application.properties
spring.profiles.active=dev

通过命令行参数

java -jar app.jar --spring.profiles.active=dev

看懂了记得留言讨论

原文转载地址 : http://www.leftso.com/blog/111.html 

以前在工作中总是不明白spring是如何区分不同环境的,今天写了一个简单的小demo,明白了。记录一下,以备自己以后独立开发项目使用。 首先应该在pom.xml中添加以下配置: <profiles> <profile> <!-- 生产环境 --> <id>prod</id> <properties> spring-boot:2.2.0.RELEASE jdk:1.8情景一: 在application.yml中配置spring.profiles.active,在pom.xml中配置profiles标签即, <profiles><profile></profile></profiles> 在resources目录下: 默认:application...
java编程中spring boot 使用spring.profiles.active分区配置 很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置 spring boot允许你通过命名约定按照一定的格式
SpringBoot配置文件中spring.profiles.active配置详解 1、多环境配置 我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。 对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring
SpringBoot配置Profile多环境支持 在我们日常的开发中,基本上分两种环境: 自己开发的测试环境与线上部署的生产环境。但是只有一个配置文件的情况下,要来回修改配置文件,这非常的麻烦。而SpringBoot就帮我们解决了这个麻烦。 配置起来非常的简单,首先建立两个配置文件,并以dev(开发环境)、pro(生产环境)用来区分。 可以看到一共有5个文件 application.yml:配置一些开发环境与生产环境相同的配置,比如端口号都是8080的话就可以写在这里。 application-dev
https://blog.csdn.net/swordsnapliu/article/details/78540902 引言:使用 spring.profiles.active 参数,搭配@Profile注解,可以实现不同环境下(开发、测试、生产)配置参数的切换 一.根据springboot的配置文件命名约定,结合active可在不同环境引用不同的properties外部配置 参考官方文档...
本章主要讲述如何使用微服务架构中的配置中心 在微服务架构中,每个微服务应用都有自己的应用外部配置,在以前大多是使用配置文件或者数据库的形式和应用一起部署,而在SpringCloud体系下,需要有一个配置中心,专门管理各个微应用的配置信息,并且配置发生更新后,所有微应用都能马上读取到最新的配置。解决了每个应用都要去手动维护配置的不便。 上一章节中,使用了Nacos作为服务注册发现中心,其实Nac...
1.使用@Profile的原因 在平时的开发中,通常开发一个开发库,测试一个测试库,生产一个生产库。 我们将数据库信息写在一个配置文件中,在部署的时候我们将配置文件改成对应的配置文件,这样改来改去非常麻烦。 在使用@Profile后,我们就可以定义3个配置文件dev、sit、pro其分别对应3个profile,在实际运行的时候只需给定一个参数,容器就会加载激活的配置文件,...
一、springboot基本配置 1、多环境配置文件 ①新建:application-{profile}.properties/applicaiton-{profile}.yml ②指明启用哪个配置设置: 方法一:配置文件指定:在application.yml(或者application.properties文件)中新增application.profiles.active= {profile} 方法二:通过启动命令指定:java -jar XX.jar --spring.profile.active={
注意:默认的生命周期是Singleton。其含义是,在应用中,无论何时、何处,获取这个Bean的实例时,都是共享的同一个实例。因此,在使用Singleton的实例时,需要考虑线程安全的问题。因此,一般将无状态的类设计为Singleton类型。 在容器中,Bean都是通过id进行唯一标记的,在任何位置你都是可以通过指定的id或者Bean的名称获取这个Bean的实例的。但是id、名称并不是必须指定的,如果你不指. Springprofiles有两个变量可以配置 spring.profiles.default 默认值,优先级低。当active没有配置时,使用此变量。spring.profiles.active 优先级高,指定当前容器使用哪个profile 声明多profile 如果使用springprofiles机制,第一步要在applicat Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境 1、多profile文件形式: 格式:application-{profile}.properties/yml: 如:application-dev.properties/yml、application-prod.properties/yml 2、yml支持多profile文...
几个星期没有来冒泡了,之前公司的项目要上一期,所以基本上都在加班ing中。最近几天终于稍微慢下节奏了,有点时间来整合自己的框架。 之前有几篇文章是介绍jms,以及继承它的activeMq,今天我来讲一下springactivemq的整合。           整合之前说啰嗦一下,我不知道大家有没有这种思想,如果你之前各种框架整合之类,做多了其实都是差不多的,也就是之前说的举一反三的,反正我现