目录
- 功能描述
- 具体配置及细节
- 打包过滤
功能描述
有些时候,一个项目须要适配多种开发环境,如数据库不一样(mysql、oracle、db2等)、如开发环境不一样(dev、pro、test)等不一样的环境须要指定不一样的配置。这种状况下,咱们就能够采用配置Profiles来控制。在启动的时候指定不一样的配置组合,maven进行build时会自动选择指定配置。
java
具体配置及细节
- 首先配置在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>
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
- 创建不一样环境的配置文件,并以目录的形式区分(固然也能够以不一样的开头命名区分)
如下是多环境配置的目录结构
mysql
如下是多数据库的配置,在每一个环境application中配置
spring
@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启动的时候,打包的时候不受此影响。sql
打包时指定profile 就能够将不一样环境的资源文件和java代码以及jar排除掉,最小打包。数据库