• springboot 多环境配置(pom配置Profiles变量来,控制打包环境)


    https://wenku.baidu.com/view/2f531c3c68d97f192279168884868762caaebbd3.html

    一、功能描述

    有些时候,一个项目须要适配多种开发环境,如数据库不一样(mysql、oracle、db2等)、如开发环境不一样(dev、pro、test)等不一样的环境须要指定不一样的配置。这种状况下,咱们就能够采用配置Profiles来控制。在启动的时候指定不一样的配置组合,maven进行build时会自动选择指定配置。
    在这里插入图片描述

    二、具体配置及细节

    1.首先配置在pom中配置Profiles配置

    	<profiles>
            <profile>
                <id>mysql</id>
                <properties>
                    <spring.profiles.active>mysql</spring.profiles.active>
                </properties>
            </profile>
            <profile>
                <id>oracle</id>
                <properties>
                    <spring.profiles.active>oracle</spring.profiles.active>
                </properties>
            </profile>
            <profile>
                <id>db2</id>
                <properties>
                    <spring.profiles.active>db2</spring.profiles.active>
                </properties>
            </profile>
            <profile>
                <id>dev</id>
                <properties>
                    <profiles.active>dev</profiles.active>
                </properties>
            </profile>
            <profile>
                <id>prd</id>
                <properties>
                    <profiles.active>prd</profiles.active>
                </properties>
            </profile>
        </profiles>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    springboot中application.yml 中能够引用pom中的变量properties属性,引用的方式 @变量@

    mybatis:
      configuration:
        map-underscore-to-camel-case: true
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      mapper-locations: [mybatis/**/**@spring.profiles.active@**/*Mapper.xml]
      type-aliases-package: com.*.*.domain.entity,com.*.*.system.entity
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    创建不一样环境的配置文件,并以目录的形式区分(固然也能够以不一样的开头命名区分)

    如下是多环境配置的目录结构
    在这里插入图片描述
    如下是多数据库的配置,在每一个环境application中配置在这里插入图片描述

    @Configuration
    public class DatasourceConfig{
        @Resource
        Environment env;
        @Bean
        @Profile(value="mysql")
        public DataSource mysql(){
            return dataSources("mysql");
        }
        @Bean
        @Profile(value="oracle")
        public DataSource oracle(){
            return dataSources("oracle");
        }
        @Bean
        @Profile(value="db2")
        public DataSource db2(){
            return dataSources("db2");
        }
        /**
         * 获取数据源
         * @param type (mysql,oracle,db2 ....)
         */
        public DataSource dataSources(String type) {
            String driverClassName = env.getProperty("mydatasource."+type+".driver-class-name");
            String url =  env.getProperty("mydatasource."+type+".url");
            String username =  env.getProperty("mydatasource."+type+".username");
            String password =  env.getProperty("mydatasource."+type+".password");
    
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setName(type);
            druidDataSource.setDriverClassName(driverClassName);
            druidDataSource.setUrl(url);
            druidDataSource.setUsername(username);
            druidDataSource.setPassword(password);
            //TODO .....
    
            return druidDataSource;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    三、打包过滤

    资源过滤 pom.xml build标签下

    <resources>
      <resource>
        <directory>src/main/resources</directory><!-- 指定资源文件夹,src/main/resources 默认打到classes下-->
    <!-- 默认为false,配置为true,则会将改资源目录下的xml和properties文件中的引用 @配置@  和 ${} 转换成真实值-->
        <filtering>true/false</filtering>
        <includes><include></include></includes><!-- 指定要打包的文件或目录(只包含资源源文件,不包括class -->
        <excludes><exclude></exclude></excludes><!-- 指定要过滤的文件或目录 (只包含资源源文件,不包括class-->
      </resource>
    </resources>
    <!-- demo 过滤config目录-->
    <resource>
    	<directory>src/main/resources</directory>
    	<excludes>
    		<exclude>config/</exclude>
    		<exclude>mybatis/</exclude>
    	</excludes>
    </resource>
    <resource>
    	<directory>src/main/resources/config/${package.environment}</directory>
    	<includes>
    		<include>config.properties</include>
    	</includes>
     </resource>
     <resource>
    	<directory>src/main/resources</directory>
    	<includes>
    		<include>mybatis/**/${spring.profiles.active}/**
    	
     
    
    
     
     
       org.apache.maven.plugins
       maven-jar-plugin
       
         
           com/yuyi/imap/ServletInitializer.class
         
       
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    配置profiles 多环境打包过滤

    <profiles>
            <profile>
                <id>mysql</id>
                <properties>
                    <spring.profiles.active>mysql</spring.profiles.active>
                    <project.packaging>jar</project.packaging>
                </properties>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-quartz</artifactId>
                    </dependency>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.43</version>
                    </dependency>
                </dependencies>
                <build>
                    <plugins>
                        <!-- 过滤class文件的插件 -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-jar-plugin</artifactId>
                            <configuration>
                                <excludes>
                                    <!-- 过滤目录下文件 -->
                                    <exclude>com/yuyi/imap/oracle/*
                                    com/yuyi/imap/db2/*
                                
                            
                        
                    
                
            
    
            
                oracle
                
                    oracle
                    war
                
                
                    
                        
                        
                            org.apache.maven.plugins
                            maven-war-plugin
                            
                                
                                    WEB-INF/classes/com/yuyi/imap/mysql/,
                                    WEB-INF/classes/com/yuyi/imap/db2/
                                
                            
                        
                        
                        
                            org.apache.maven.plugins
                            maven-jar-plugin
                            
                                
                                    
                                    com/yuyi/imap/mysql/
                                    
                                    com/yuyi/imap/db2/*
                                
                            
                        
                    
                
            
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    同一个接口,不一样的实现能够经过重名和注解实现在这里插入图片描述

    同一个接口有两种实现,而且采用同一个命名,这样在启动的时候会报错(别名重复)因此须要将不用的目录给排除掉,不编译成class,这里采用idea
    在这里插入图片描述
    这么作只会影响springboot启动的时候,打包的时候不受此影响。

    打包时指定profile 就能够将不一样环境的资源文件和java代码以及jar排除掉,最小打包。

  • 相关阅读:
    【ASE入门学习】ASE入门系列二十四——轴向溶解
    字符编码个人理解
    【Linux】可重入VS线程安全
    【机器学习】训练集/验证集/测试集释疑
    PrintWrter中的write()和print()方法
    在docker下安装suiteCRM
    Markdown编辑器模式使用LaTex编辑数学公式入门
    docker 常用命令
    南大通用GBase8s 常用SQL语句(280)
    Rockchip RK3399 - USB触摸屏接口驱动
  • 原文地址:https://blog.csdn.net/munangs/article/details/126671396