您好,登錄后才能下訂單哦!
springboot 中如何實現多環境配置,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
功能描述
具體配置及細節
打包過濾
有些時候,一個項目需要適配多種開發環境,如數據庫不同(mysql、oracle、db2等)、如開發環境不同(dev、pro、test)等不同的環境需要指定不同的配置。這種情況下,我們就可以采用配置Profiles來控制。在啟動的時候指定不同的配置組合,maven進行build時會自動選擇指定配置。
首先配置在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
建立不同環境的配置文件,并以目錄的形式區分(當然也可以以不同的開頭命名區分)
以下是多環境配置的目錄結構
以下是多數據庫的配置,在每個環境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; } }
資源過濾 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}/**</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 多環境打包過濾
<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包時生效 過濾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>
同一個接口,不同的實現可以通過重名和注解實現
同一個接口有兩種實現,并且采用同一個命名,這樣在啟動的時候會報錯(別名重復)所以需要將不用的目錄給排除掉,不編譯成class,這里采用idea
這么做只會影響springboot啟動的時候,打包的時候不受此影響。
打包時指定profile 就可以將不同環境的資源文件和java代碼以及jar排除掉,最小打包。
看完上述內容,你們掌握springboot 中如何實現多環境配置的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。