https://wenku.baidu.com/view/2f531c3c68d97f192279168884868762caaebbd3.html
一、功能描述
有些时候,一个项目须要适配多种开发环境,如数据库不一样(mysql、oracle、db2等)、如开发环境不一样(dev、pro、test)等不一样的环境须要指定不一样的配置。这种状况下,咱们就能够采用配置Profiles来控制。在启动的时候指定不一样的配置组合,maven进行build时会自动选择指定配置。
二、具体配置及细节
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>
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@**
创建不一样环境的配置文件,并以目录的形式区分(固然也能够以不一样的开头命名区分)
如下是多环境配置的目录结构 如下是多数据库的配置,在每一个环境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");
}
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);
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}
配置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
同一个接口,不一样的实现能够经过重名和注解实现
同一个接口有两种实现,而且采用同一个命名,这样在启动的时候会报错(别名重复)因此须要将不用的目录给排除掉,不编译成class,这里采用idea 这么作只会影响springboot启动的时候,打包的时候不受此影响。
打包时指定profile 就能够将不一样环境的资源文件和java代码以及jar排除掉,最小打包。
|