• Maven项目多环境之间的配置文件的切换


    • 前言:对于一个项目,开发和生产环境之间会使用不同的配置文件,最简单的例子就是数据库连接池的配置了。当然,可以在打包上线前对配置文件进行替换,不过这也太low了吧。

    简单的pom.xml中的配置内容

    • 比如我们在maven项目中引入了内嵌式的tomcat插件(当然打包方式是要war包),如下代码
    	<!--在build标签中-->
    	<plugins> 	  
    	  <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <!-- 指定端口 -->
                        <port>8821</port>
                        <!-- 请求路径 -->
                        <path>/</path>
                    </configuration>
                </plugin>
    	<plugins>
    

    title

    指定了端口号是8821,启动项目后(在idea右边的maven project),就可以使用8821端口访问。

    title

    8821是我们开发的端口,如果我们想打包上传到服务器,然后就修改这个端口为8891。

    • 首先在pom.xml使用properties标签来定义端口号
      title
    • 然后就创建多个环境,多个环境对tomcat_port这个属性进行定义
    <!--和build平级-->
        <profiles>
            <profile>
                <!--开发环境,这个id就是名称-->
                <id>dev</id>
                <properties>
                    <!--这个标签就是定义你要设定的properties中的属性-->
                    <tomcat_port>8821</tomcat_port>
                </properties>
            </profile>
            <profile>
                <!--生产环境-->
                <id>pro</id>
                <properties>
                    <tomcat_port>8821</tomcat_port>
                </properties>
            </profile>
        </profiles>
    
    • 然后修改我们的tomcat7系列的maven命令,在后边添加参数:
      -P 环境id,在idea中,右键这个maven命令,就可以设置了
      title

    title

    设置完后,点击运行,
    title

    除了tomcat:run 外,其他的maven命令,如:

    package -P dev
    install -P pro
    

    这些都是可以的。

    不同环境下使用不同的数据库配置文件

    和上边的方法类似,不同的是它会引入项目中的properties配置文件

    • 首先,src/main/resources下创建dbprops文件夹,在这个文件夹下创建一个db_dev.properties,内容如下:
    #这个env前缀可以自定义,也可以不用
    env.jdbc.driver=com.mysql.jdbc.Driver
    env.jdbc.url=jdbc:mysql://localhost:3306/tb_dev?characterEncoding=utf-8
    env.jdbc.username=dev
    env.jdbc.password=dev
    

    也创建一个db_pro.properties

    #这个env前缀可以自定义,也可以不用
    env.jdbc.driver=com.mysql.jdbc.Driver
    env.jdbc.url=jdbc:mysql://localhost:3306/tb_pro?characterEncoding=utf-8
    env.jdbc.username=pro
    env.jdbc.password=pro
    
    • 然后,修改我们src/main/resources下的db.properties配置文件,这个配置文件就是我们之前的数据库连接配置文件(因为datasource中指定的路径就是这个配置文件)
    #之前写的是确定的地址,这回就使用变量
    jdbc.driver=${env.jdbc.driver}
    jdbc.url=${env.jdbc.url}
    jdbc.username=${env.jdbc.username}
    jdbc.password=${env.jdbc.password}
    
    • 在pom.xml中添加属性
      <properties>
    	<!--这个db_env是自定义的,随便起-->
      	<db_env>dev</db_env>
      </properties>
    
    
    • 在pom.xml中定义profile
     <profiles>
      	<profile>
    		<!--环境名-->
      		<id>dev</id>
      		<properties>
    			<!--这个名要和之前定义的db_dev.properties中的dev相同,下边会看到拼接-->
      			<db_env>dev</db_env>
      		</properties>
      	</profile>    
      	<profile>
      		<id>pro</id>
      		<properties>
      			<db_env>pro</db_env>
      		</properties>
      	</profile>
      </profiles>
    
    
    • 在build标签中添加一个filters和resource指令
    	<filters>
    		<filter>src/main/resources/dbprops/db_${db_env}.properties</filter>
    	</filters>
    
    	<resources>
      		<resource>
    			<!--这是拦截这个目录下的配置文件,进行处理-->
      			<directory>src/main/resources</directory>
      			<filtering>true</filtering>
      		</resource>  		
      	</resources>
    

    好了,我们这使用指定打包
    package -P pro
    然后用触压生成的war包,打开WEB-INFclassesdb.properties文件可以看到
    title

  • 相关阅读:
    学校重理论,公司重操作,计算机专业毕业生该何去何从?
    最简单的ajax示例
    几个简单的例子让你读懂什么是JAVA的堆栈跟踪
    避免在JSP中写java代码
    ==和equals()的区别
    测试,我误解了你
    项目管理十大TION法
    Web测试与APP测试有哪些异同?
    spring cglib 与 jdk 动态代理
    java.util.concurrent.Semaphore 使用
  • 原文地址:https://www.cnblogs.com/Lyn4ever/p/12008001.html
Copyright © 2020-2023  润新知