溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

springboot 中如何實(shí)現(xiàn)多環(huán)境配置

發(fā)布時(shí)間:2021-06-15 13:44:03 來源:億速云 閱讀:192 作者:Leah 欄目:大數(shù)據(jù)

springboot 中如何實(shí)現(xiàn)多環(huán)境配置,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

目錄

  1. 功能描述

  2. 具體配置及細(xì)節(jié)

  3. 打包過濾

功能描述

有些時(shí)候,一個(gè)項(xiàng)目需要適配多種開發(fā)環(huán)境,如數(shù)據(jù)庫不同(mysql、oracle、db2等)、如開發(fā)環(huán)境不同(dev、pro、test)等不同的環(huán)境需要指定不同的配置。這種情況下,我們就可以采用配置Profiles來控制。在啟動(dòng)的時(shí)候指定不同的配置組合,maven進(jìn)行build時(shí)會(huì)自動(dòng)選擇指定配置。 springboot 中如何實(shí)現(xiàn)多環(huán)境配置

具體配置及細(xì)節(jié)

  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. 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. 建立不同環(huán)境的配置文件,并以目錄的形式區(qū)分(當(dāng)然也可以以不同的開頭命名區(qū)分)

以下是多環(huán)境配置的目錄結(jié)構(gòu)
springboot 中如何實(shí)現(xiàn)多環(huán)境配置

以下是多數(shù)據(jù)庫的配置,在每個(gè)環(huán)境application中配置 springboot 中如何實(shí)現(xiàn)多環(huán)境配置

@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");
    }
    /**
     * 獲取數(shù)據(jù)源
     * @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標(biāo)簽下

<resources>
  <resource>
    <directory>src/main/resources</directory><!-- 指定資源文件夾,src/main/resources 默認(rèn)打到classes下-->
<!-- 默認(rèn)為false,配置為true,則會(huì)將改資源目錄下的xml和properties文件中的引用 @配置@  和 ${} 轉(zhuǎn)換成真實(shí)值-->
    <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}/**</include>
	</includes>
 </resource>


 <!-- 過濾class文件的插件 -->
 <plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <configuration>
     <excludes>
       <exclude>com/yuyi/imap/ServletInitializer.class</exclude>
     </excludes>
   </configuration>
 </plugin>
  1. 配置profiles 多環(huán)境打包過濾

 <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/*</exclude>
                                <exclude>com/yuyi/imap/db2/*</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>oracle</id>
            <properties>
                <spring.profiles.active>oracle</spring.profiles.active>
                <project.packaging>war</project.packaging>
            </properties>
            <build>
                <plugins>
                    <!-- 打成war包,過濾class文件的插件 -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-war-plugin</artifactId>
                        <configuration>
                            <packagingExcludes>
                                WEB-INF/classes/com/yuyi/imap/mysql/,
                                WEB-INF/classes/com/yuyi/imap/db2/
                            </packagingExcludes>
                        </configuration>
                    </plugin>
                    <!-- 打成jar包時(shí)生效 過濾class文件的插件-->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <configuration>
                            <excludes>
                                <!-- 過濾目錄 -->
                                <exclude>com/yuyi/imap/mysql/</exclude>
                                <!-- 過濾文件-->
                                <exclude>com/yuyi/imap/db2/*</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
  1. 同一個(gè)接口,不同的實(shí)現(xiàn)可以通過重名和注解實(shí)現(xiàn) springboot 中如何實(shí)現(xiàn)多環(huán)境配置

同一個(gè)接口有兩種實(shí)現(xiàn),并且采用同一個(gè)命名,這樣在啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò)(別名重復(fù))所以需要將不用的目錄給排除掉,不編譯成class,這里采用idea springboot 中如何實(shí)現(xiàn)多環(huán)境配置
這么做只會(huì)影響springboot啟動(dòng)的時(shí)候,打包的時(shí)候不受此影響。

打包時(shí)指定profile 就可以將不同環(huán)境的資源文件和java代碼以及jar排除掉,最小打包。

看完上述內(nèi)容,你們掌握springboot 中如何實(shí)現(xiàn)多環(huán)境配置的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI