本文只作記錄和參考,希望對自己或者各位路人都有多少價值。
在實際開發過程中,配置信息會因為不同環境而有所不同。而過多的人工干預,會增加工作量和錯誤率。現在記錄的是如何使用maven快速安全地切換配置信息而不需要多餘的人工修改干預。我們就以最常見的數據庫信息切換作為例子。
Project Structure:
------src
| ------ main
| ------java
| ------ 省略,此處不是重點
| ------resources
| ------ db.properties
| ------filters
| ------ db-dev.properties
| ------ db-prod.properties
| ------ test
| ------java
| ------ 省略,此處不是重點
| ------resources
| ------ db.properties
| ------filters
| ------ db-dev.properties
| ------ db-prod.properties
------tags
------target
------trunk
------pom.xml
項目結構就是最常見的maven project 結構。在此,留意filters, 這個是本文的重點。
先來簡述一下。
resources/db.properties -- 程序會從中讀取數據庫信息。對於不同的環境,dev/prod 信息不同。
filters/db-dev.properties -- dev 環境的數據庫信息
filters/db-prod.properties -- prod 環境的數據庫信息
用一句話來概括, 就是字符的替換。 把db.properties的wildcard替換成dev/prod 的相應值。
db.properties 的內容和dev/prod的內容,在格式上是一樣的。
#db.properties db.username=${db.username} db.password=${db.password} application.name=${project.name}
#db-dev
db.username=dev
db.password=dev-pwd
#db-prod
db.username=prod
db.password=prod-pwd
至此,準備工作已經完成。接下來是maven的配置。
<build>
<filters>
<filter>${project.basedir}/src/main/filters/db-${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
解釋一下。
filters 的意義在於,表明使用該文件(s)中定義的值來替換目標字符。(From whom)
resources/resource ,表示替換會對在哪個目錄下的文件作用。 (To whom)
大家可能也會對${env} 有疑問。這個就是動態配置的關鍵之一。"profiles"
在pom.xml 中,有以下聲明:
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
此處聲明了2個 profiles. 這個profile 其實是可以定義任意的屬性,甚至可以把數據庫的信息定義在上面。不過,這麼做是不推薦的,靈活性太低。相反,僅定義2個profiles, 把並把對應的信息放入相應的properties會使的構建更加靈活和安全。畢竟,這些人手寫錯打錯導致各式各樣的問題屢見不鮮。當這些profile 被激活使用之後,就會初始化一個變量 , env。並且在filter下面的${env}會被替換成真實的值。這樣,就可以動態更改配置。
把pom配置好之後,就可以嘗試編譯,體會一下這個形式的動態配置。
mvn clean compile
此時,會出現以下錯誤:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources
(default-resources) on project mvn.renew: Error loading property file
'D:\TestingDir\mavenBuildDemo\src\main\filters\db-${env}.properties' -> [Help
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
為什麼? 因為這個時候還未有選擇 profile, 所以 ${env} 並沒有被初始化。我們應該用以下命令來構建:
mvn clean compile -Pdev
-P 就是選擇對應在pom中聲明了的profile。
D:\TestingDir\mavenBuildDemo>mvn clean compile -Pdev
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building mvn.renew 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ mvn.renew ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvn.renew ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ mvn.renew ---
[INFO] Compiling 1 source file to D:\TestingDir\mavenBuildDemo\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.482 s
[INFO] Finished at: 2016-04-09T20:52:55+08:00
[INFO] Final Memory: 11M/107M
[INFO] ------------------------------------------------------------------------
構建成功了。那麼怎麼驗證呢 ? 或許大家都知道,compile之後所有文件,包括 class and properties, 都會被放到 target/classes 下面。那麼我們就去target/classes 下面找。我們會找到一個 db.properties文件,打開檢查:
db.username=dev
db.password=dev-pwd
application.name=mvn.renew
成功匹配 !!
但是如果項目很大,每次構建都相當耗時,那麼,有沒有方法只更新配置文件而不重新編譯?
這個問,肯定是有的啦 !
mvn process-resources -Pprod
用process-resources, 這樣,只會更新配置文件,而不會重新編譯項目。
再去看一下properties, 已經變成了 prod 的信息了。
db.username=prod
db.password=prod-pwd
application.name=mvn.renew
本文到此,已經完結。大家有所感受了么?
在自己記錄的時候也喜歡在大家需要的時候給一點啟示或幫助.
相关推荐
这里面有详细的处理maven项目中resources目录下的资源文件,方便快捷的得到或设置资源文件中的内容,本人亲测,里面还有示例
sprintboot maven 打包分离lib jar 资源文件 properties xml yml 详细信息查看我的博客 https://mp.csdn.net/postedit/80274087 java -jar -cp 启动
Interpolation of Properties in Dependency Output Location 12.5.4.3. Including and Excluding Dependencies by Scope 12.5.4.4. Fine Tuning: Dependency Includes and Excludes 12.5.4.5. Transitive ...
在Maven2中,配置使用settings.xml,它取代了原有的project.properties和build.properties。配置在Maven2中存在两种级别: • 用户级,针对操作系统登录用户而言。一般在$home/.m2/,对于windows用户,就是目录:C:\...
maven+spring mvc+hibernate+dubbo的demo,运行前请修改resources/config.properties下的数据配置
这种属性应用方式是 ...src/main/resources/application.properties 补充知识:springboot项目使用@Value注解获取配置文件中的配置信息 application.yml配置文件得配置信息 web: my_name: mqs tags: aaa,bbb
属性文件路径:\src\main\resources\project.properties 注:只需配置和修改sql主机地址,数据库名,用户名,密码, 项目访问路径,这几个属性,项目即可正常运行访问。 #数据库连接配置 #数据库主机地址 jdbc.host=...
--------------------------- maven配置:pom.xml --------------------------- <?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ...
Springboot Maven yaml 自动多环境打包工具 ...通过maven resources plugin把配置文件从src/main/resources/${profiles.active}拷贝到src/main/resources/ 然后打包 例如: mvn clean mvn package -P dev
5、启动前,检查配置 application.properties 中相关redis、mysql、rabbitmq地址 6、登录地址:http://localhost:8080/login/to_login 7、商品秒杀列表地址:http://localhost:8080/goods/to_list
2. 在/spring-node-1/src/main/resources/conf/shiro.properties 文件中 ``` properties shiro.loginUrl=http://127.0.0.1:8080/cas/login?service=http://127.0.0.1:8081/node1/shiro-cas shiro.logoutUrl=...
这是JavaWeb的SSM(Spring+SpringMVC+MyBatis),基于maven3构建 前端bootsrap,layui,html5+css,jquery 包含源码数据库mysql和lw文档答辩ppt...数据库连接src\main\resources\config.properties中修改 maven包版本3.3.9.
故本插件内部封装了“mybatis-generator-maven-plugin”插件,设计为读取spring-cloud-config的配置文件(即默认bootstrap-XXX.properties)的数据源来生成Mybatis代码。 Quick Start ☞src/main/resources/...
1、管理员账号:admin密码:admin 数据库配置文件src\main\resources 下的 jdbc.properties 更改对应数据库连接配置 2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。 3、数据库文件名是jspzhaopin.sql ...
将archetype-catalog文件放在maven仓库根目录下,VM Options 配置 -DarchetypeCatalog=internal,但是可能出现项目无法加载Resource文件下的配置文件,需要在pom.xml文件的<build></build>标签内添加<resources> ...
1、管理员账号:admin密码:admin 数据库配置文件src\main\resources 下的 jdbc.properties 更改对应数据库连接配置 2、开发环境为IDEA开发,数据库为mysql,使用java语言开发。 3、数据库文件名是jspyyg.sql 系统...
3.配置文件见 src/resources 目录 1.springMvc 以 location="classpath:*-gourderwa.properties" 装载配置,若修改配置文件名称对应修改此处 2.指定 ehcache.xml 中 diskStore path 存储目录 3.数据库连接配置见 ...
maven+spring mvc+hibernate+dubbo+mysql的demo源码,运行前请修改resources/config.properties下的数据配置
JDK: 1.8 Maven: 3.3+ ...配置\src\main\resources\wiblog.properties(腾讯云密钥图片存储/公众号/github第三方登录) 打包运行 # 打包 mvn clean package # 运行 java -jar target\core-0.0.1-SNAPSHOT.jar