您好,登錄后才能下訂單哦!
springboot 中如何實(shí)現(xiàn)多環(huán)境配置,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
功能描述
具體配置及細(xì)節(jié)
打包過濾
有些時(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)選擇指定配置。
首先配置在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>
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
建立不同環(huán)境的配置文件,并以目錄的形式區(qū)分(當(dāng)然也可以以不同的開頭命名區(qū)分)
以下是多環(huán)境配置的目錄結(jié)構(gòu)
以下是多數(shù)據(jù)庫的配置,在每個(gè)環(huán)境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"); } /** * 獲取數(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; } }
資源過濾 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>
配置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>
同一個(gè)接口,不同的實(shí)現(xiàn)可以通過重名和注解實(shí)現(xiàn)
同一個(gè)接口有兩種實(shí)現(xiàn),并且采用同一個(gè)命名,這樣在啟動(dòng)的時(shí)候會(huì)報(bào)錯(cuò)(別名重復(fù))所以需要將不用的目錄給排除掉,不編譯成class,這里采用idea
這么做只會(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è)資訊頻道,感謝各位的閱讀!
免責(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)容。