Maven替换sql中的schema解决不同环境schema不同的问题

java 同时被 2 个专栏收录
34 篇文章 1 订阅
3 篇文章 0 订阅

问题:不同环境的sql脚本schema不同,导致每次都要修改sql文件。

解决方案:使用Maven命令含+环境参数,在Maven打包过程中,使用${}占位符替换sql脚本中的schema占位符即可。

mvn clean package -Dmaven.test.skip=true -P dev

mvn clean package -Dmaven.test.skip=true -P uat

0. 项目结构:

1. Pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.test.demo</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.17</version>
		</dependency>
		
		<dependency>
		    <groupId>com.squareup.okhttp3</groupId>
		    <artifactId>okhttp</artifactId>
		    <version>4.5.0</version>
		</dependency>
		
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.17</version>
		</dependency>
		
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-lang3</artifactId>
		</dependency>
		
		<dependency>
		    <groupId>commons-beanutils</groupId>
		    <artifactId>commons-beanutils</artifactId>
		    <version>1.9.3</version>
		</dependency>
		
		<dependency>
		  	<groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.4</version>
		</dependency>
		
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- 1. 添加maven resourcse插件,定义占位符 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<useDefaultDelimiters>false</useDefaultDelimiters>
					<delimiters>
						<delimiter>${*}</delimiter>
					</delimiters>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
		</plugins>
		
		<!-- 2. 定义环境对应的properties文件 -->
		<filters>
            <filter>src/main/resources/config/${env}.properties</filter>
        </filters> 
        <!-- 3. 需要打包处理的文件-->
         <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.sql</include>
                    <include>**/*.properties</include>
                    <include>**/**/*.xls</include>
                </includes>
            </resource>
        </resources>
	</build>
	<!-- 4. 添加环境profile-->
	<profiles>
        <profile>
            <id>dev</id>
            <properties>
                <env>dev</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>uat</id>
            <properties>
                <env>uat</env>
            </properties>
        </profile> 
    </profiles>
    
</project>

2. 环境properties文件

3. 要替换占位符的目标文件

4. 运行命令 mvn clean package -Dmaven.test.skip=true -P dev

 

5. 查看打包编译结果  note\target\classes\db  的db.sql文件中的占位符已经被替换好了。

 

6. 运行命令 mvn clean package -Dmaven.test.skip=true -P uat 然后再去查看 db.sql打包的结果。

 

参考链接:

源码Git地址:https://github.com/xiaowanziwuha2/note

https://www.cnblogs.com/Leechg/p/10280911.html 借鉴方案

https://www.cnblogs.com/zhaoyan001/p/8735196.html Maven命令参数文档

方法二:

使用Maven构建命令,

Pom文件里配置如下

在maven中,可以利用filter实现对资源文件(resouces)过滤 
maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件(.sql/.properties/.yml)中的username=${key}替换成username=value【需要配合resources一起使用】 

打包的资源文件包括includes里的文件类型,占位符定义${},以及${profileActive}.properties定义。

各个环境properties配置文件

使用Maven命令打包完成后,在target 查看sql文件中的占位符替换情况。(借用方法一的图)

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Simple_Coffee

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值