千家信息网

springboot 中如何实现多环境配置

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,springboot 中如何实现多环境配置,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。目录功能描述具体配置及细节打包过滤功能描述有些时
千家信息网最后更新 2024年11月22日springboot 中如何实现多环境配置

springboot 中如何实现多环境配置,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

目录

  1. 功能描述

  2. 具体配置及细节

  3. 打包过滤

功能描述

有些时候,一个项目需要适配多种开发环境,如数据库不同(mysql、oracle、db2等)、如开发环境不同(dev、pro、test)等不同的环境需要指定不同的配置。这种情况下,我们就可以采用配置Profiles来控制。在启动的时候指定不同的配置组合,maven进行build时会自动选择指定配置。

具体配置及细节

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

                    mysql                            mysql                                        oracle                            oracle                                        db2                            db2                                        dev                            dev                                        prd                            prd                        
  1. 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. 建立不同环境的配置文件,并以目录的形式区分(当然也可以以不同的开头命名区分)

以下是多环境配置的目录结构

以下是多数据库的配置,在每个环境application中配置

@Configurationpublic 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. 资源过滤 pom.xml build标签下

      src/main/resources    true/false                  src/main/resources                        config/                mybatis/                src/main/resources/config/${package.environment}                        config.properties                  src/main/resources                        mybatis/**/${spring.profiles.active}/**              org.apache.maven.plugins   maven-jar-plugin               com/yuyi/imap/ServletInitializer.class         
  1. 配置profiles 多环境打包过滤

                     mysql                            mysql                jar                                                            org.springframework.boot                    spring-boot-starter-quartz                                                    mysql                    mysql-connector-java                    5.1.43                                                                                                                        org.apache.maven.plugins                        maven-jar-plugin                                                                                                                    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. 同一个接口,不同的实现可以通过重名和注解实现

同一个接口有两种实现,并且采用同一个命名,这样在启动的时候会报错(别名重复)所以需要将不用的目录给排除掉,不编译成class,这里采用idea
这么做只会影响springboot启动的时候,打包的时候不受此影响。

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

看完上述内容,你们掌握springboot 中如何实现多环境配置的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

0