31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)

参考链接:

Spring官网

Spring官网 外部配置加载顺序的说明

SpringBoot多环境的切换(生产环境、开发环境、测试环境)_周太阳的博客-CSDN博客_springboot测试生产环境切换

java maven 测试生产环境配置_SpringBoot生产环境和测试环境配置分离的教程详解_落云歌语文的博客-CSDN博客

 server.servlet.context-path=/hello  指定请求的基础路径


黑马程序员SpringBoot教程,6小时快速入门Java微服务架构Spring Boot_哔哩哔哩_bilibili

Profile

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第1张图片

1 application.propertes配置文件多环境配置

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第2张图片 (图片中的内容补充:application.properties中不写server.port=8080,也是默认启动8080端口的。)

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第3张图片

2 application.yml文件多环境配置

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第4张图片

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第5张图片

 

3 VM options指定参数式启动某个环境的配置文件

-Dspring.profiles.active=development

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第6张图片

4 Program Arguments指定参数式启动某个环境的配置文件

--spring.profiles.active=testEnv

5 运行Jar包时执行参数

java -jar D:/aaa/bbb/ccc/JarPackage.jar --server.port=8888 --server.servlet.context-path=hehe

java -jar D:/aaa/bbb/ccc/JarPackage.jar --spring.profiles.active=product

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第7张图片

内部配置加载顺序 

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第8张图片

我们写在resources目录下的那个application.propertes文件,将来 打包会打到classpath:/:classpath的根目录下。

同时在项目文件系统中:优先级是这样的 

 31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第9张图片

 虽然你圈1和圈2优先级都是在项目根目录下,优先级比较高,但是最后打包的时候,你俩都不符合maven的结构,不会打入jar包中。所以到时候还是在resources目录下的配置文件最后被打入到classpath下的配置文件生效

外部配置加载顺序 

指定Jar包外部的配置文件

spring.config.location=C:\aaa\bbb\ccc\application.properties   

将一个配置文件放到和jar包目录的路径同一级别,配置文件将会被自动读取。

将一个配置文件放到和jar包目录的路径同一级别下的config目录下,配置文件将会被自动读取。

Spring官网 外部配置加载顺序的说明


31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第10张图片

 



第一种:用application.properties做配置文件

 配置多个环境的配置文件:

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第11张图片

3种环境配置不同的端口,如下:

 

在主配置文件种使用其中某个配置:

运行后的结果:

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第12张图片


第二种:用yml做配置文件

一个yml文件就够了,用---来分块

31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第13张图片

spring:
  profiles:
    active: dev
 
 
---
#开发环境配置
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://10.10.10.10:3306/shujuku?characterEncoding=utf8&useSSL=false&allowMultiQueries=true
    username: root
    password: 123456
 
---
#测试环境配置
spring:
  profiles: test
  datasource:
    url: jdbc:mysql://10.11.11.11:3306/shujuku?characterEncoding=utf8&useSSL=false&allowMultiQueries=true
    username: root
    password: 123456

运行结果:


第三种:cmd中的jvm虚拟机参数

虚拟机参数

jvm参数:-Dspring.profiles.active=

java -jar -Dspring.profiles.active=prod springboot-0.0.1-SNAPSHOT.jar(命令行中指定active文件)


第四种:cmd 中的命令行参数

通过命令给application.properties动态赋值
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,该设置在样例工程中可见,读者可通过删除该值或使用命令行来设置该值来验证。
执行java -jar xxx.jar --spring.profiles.active=test,运行测试环境的配置
执行java -jar xxx.jar --spring.profiles.active=prod,运行生产环境的配置


第五种:通过idea配置给application.properties动态赋值 

 31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)_第14张图片


第六种:涉及多个环境 @Profile

        在某些情况下,应用的某些业务逻辑可能需要有不同的实现。例如邮件服务,假设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为dev时才会实例化DevEmailService这个类。那么如何设置Profile呢?

在application.properties中加入:

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

第七种:通过pom.xml选择运行环境

      如果部署对应环境配置,只需把对应的activation->activeByDefault的属性改为true,其他的为false即可

pom.xml

	
			
				dev
				
					true
				
				
					dev
				
			
			
				test
				
					test
				
			
	

pom.xml 

    
    
        
        
            dev
            
            
                true
            
            
                dev
                
            
        
        
            pro
            
                pro
                
            
        
        
            test
            
                test
                
            
        
    
 
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
				org.apache.maven.plugins
				maven-war-plugin
				2.6
			
            
			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.8.0
				
				 
					1.8 
					1.8  
					UTF-8 
					true 
				
			
        
 
        
            
            
                src/main/resources/
                
                    config/dev/*
                    config/pro/*
                    config/test/*
                
                
                    
                    views/*
                
            
            
                
                src/main/resources/config/${profiles.active}
            
        
    

pom.xml


		
		
			test
			
				testEnv
			
			
			
				true
			
		
		
		
			pro
			
				proEnv
			
			
				false
			
		
	

		
		ROOT
		 
		
			
			 
				src/main/java
				
					**/*.java
				
				
				false
			
			
				src/main/resources
				
					**/*.properties
					**/*.xml
					**/*.pem
				
				
					deployEnv/**
					bak/**
					sql/**
					**/*.sql
					**/*.java
				
			

			
			 
				src/main/resources/deployEnv/${env}
				true
				  
					s_root/**
				
			
		
		
			
				org.apache.maven.plugins
				maven-war-plugin
				2.6
			

			
				org.apache.maven.plugins
				maven-compiler-plugin
				3.8.0
				
				 
					1.8 
					1.8  
					UTF-8 
					true 
				
			

		
	

补充:pom.xml完整释意

参考链接:史上最全的maven的pom.xml文件详解 - 阿豪聊干货 - 博客园

 

     
     
         
        xxx

        
        xxx 

         
        xxx

         
        xxx 
     

     
     4.0.0  

     
    xxx 

     
    xxx 

     
     jar  

     
     1.0-SNAPSHOT  

     
     xxx-maven  

     
     http://maven.apache.org  

     
     A maven project to study maven.  

     
     
         
         
     

     
     
         
         jira  

         
         http://jira.baidu.com/banseon  
     

     
     
         
         

         
         

         
         
             
             
                 
                 

                 
                 

                 
                 

                 
                 

                 
                 

                 
                
Demo [email protected] [email protected] [email protected] http:/hi.baidu.com/banseon/demo/dev/ HELLO WORLD banseon [email protected] Project Manager Architect demo http://hi.baidu.com/xxx No -5 Project Manager Architect No Apache 2 http://www.baidu.com/banseon/LICENSE-2.0.txt repo A business-friendly OSS license scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk) scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk http://svn.baidu.com/banseon demo http://www.baidu.com/banseon true/false true/false true/false true/false true/false true/false true/false jdk版本,如:1.7 Windows XP Windows x86 5.1.2600 mavenVersion 2.0.3 /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ /usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/ true/false true/false true/false true/false true/false true/false banseon-repository-proxy banseon-repository-proxy http://192.168.1.169:9999/repository/ default org.apache.maven maven-artifact 3.8.1 jar test spring-core org.springframework true true/false true/false banseon-maven2 banseon maven2 file://${basedir}/target/deploy banseon-maven2 Banseon-maven2 Snapshot Repository scp://svn.baidu.com/banseon:/usr/local/maven-snapshot banseon-site business api website scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web value

你可能感兴趣的:(Spring,spring,boot,后端,java)