搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
爱喝兽奶帝天荒
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
爆火的AI直播换脸应用Deep-Live-Cam整合包来了!6G显存可跑!_deep-live-cam下载
2
DiMP:Learning Discriminative Model Prediction for Tracking_dimp算法
3
java中常见的数据结构(list,stack,queue,linked,hashTable,tree)_java数据结构
4
计算机的优势和劣势_计算机专业毕业生考研还是就业应该怎么选?
5
【翻译】 一个新的暂停/休眠的基础设施
6
《Java 基础篇》之终止线程的几种方式_java thread 停止
7
云计算原理与实践
8
Optimal Trajectory Generation for Autonomous Vehicles Under Centripetal Acceleration Constraint [翻译]
9
微信小程序:实现可拖动悬浮图标(列表页添加按钮)_微信小程序button图标样式 实现悬浮按钮效果
10
Git技能树(4):版本管理_版本管理信息树
当前位置:
article
> 正文
基于maven插件的配置管理
作者:爱喝兽奶帝天荒 | 2024-08-21 06:19:24
赞
踩
alibaba-citrus-tool
[size=medium][/size]对于java程序员来说各种各样的配置文件是司空见惯的,比如spring的bean配置,struts的action配置等等。有些配置会随着运行环境的变化而各不相同,最典型的就是jdbc驱动的配置,在开发环境可能链接到开发本地的数据库,测试环境则有一套测试专用的数据库环境,线上的生产环境也会有一套数据库,如果一个应用要部署到多个idc中,那这些配置又有可能各不相同。解决这个问题,可能有些团队使用同一份配置文件,在部署到不同的环境之前人肉的修改一下配置,还有些团队会为每一个环境维护一份配置文件。这些做法都比较容易出错,而且随着环境的增多成本会线性地增长。
本文通过一个示例简单介绍一个自动化的配置工具autoconfig。autoconfig使用一套配置模板,为不同的环境生成相应的具体配置。它的核心思想是把一些可变的配置定义为一个模板,在autoconfig运行的时候从这些模板中生成具体的配置文件。autoconfig支持两种运行方式,第一种是作为普通的java应用程序从命令行来调用,另一种是作为maven的插件来运行。本文通过一个maven项目展示一下如何在maven中使用autoconfig。
autoconfig是一个淘宝开源的web框架webx的一个工具包,svn地址为 http://code.taobao.org/svn/webx/citrus-tool/trunk/,使用之前先checkout源代码本地安装一下,当然感兴趣的同学也可已研究一下它的源代码。安装非常简单,在checkout的源代码的根目录下运行 mvn clean install -Dmaven.test.skip。由于autoconfig使用maven build,安装之前必须先安装maven,不知到如何安装maven的同学可以google一下。
首先通过maven新建一个普通的java项目,运行下面这个命令,敲几个回车就能通过maven创建一个普通的java应用程序项目。
mvn archetype:generate -DgroupId=net.kiminotes -DartifactId=autoconfig -Dpackage=net.kiminotes
先删除maven自动创建的一些java源代码 find . -name *.java -exec rm \{} \; (这是linux下的一个工具,使用windows的同学可以通过资源管理器来删除)。创建一个简单的java类 Main,类中只有一个main方法,这个方法读取一个配置文件,并在控制台输出整个配置文件,代码如下。
Java代码
package net.kiminotes;
import java.util.Properties;
import java.io.InputStream;
public class Main {
public static void main( String[] args ) throws Exception {
InputStream is = Main.class.getClassLoader().getResourceAsStream( "config.properties" );
if ( is == null ) {
System.err.println( "Can not load config resource config.properties in classpath" );
} else {
Properties prop = new Properties();
prop.load( is );
is.close();
for( String key : prop.stringPropertyNames() ) {
String value = prop.getProperty( key );
if ( value != null ) {
System.out.printf( "%s = %s %n", key, value );
}
}
}
}
}
从代码中可以看到实现的功能非常简单:从classpath中读取配置文件config.properties,然后输出到控制台。
接下来创建antoconfig的描述文件auto-config.xml以及配置文件config.properties的模板config.properties.vm。
config.properties的模板内容如下,它只有一行配置。
Java代码
key = ${net_kiminotes_value}
antoconfig的描述文件auto-config.xml内容如下。
Xml代码
<config>
<group>
<property name="net.kiminotes.value" />
</group>
<script>
<generate template="config.properties.vm" destfile="config.properties" charset="utf-8" />
</script>
</config>
property元素定义了一个需要autoconfig配置的属性 net.kiminotes.value。group元素把不同类库的property进行分组,这里仅配置了一个group。generate定义了一个配置文件生成策略,template属性定义了配置文件的的模板,destfile定义了生成后配置文件的存放位置。
注: 有人或许会感觉迷惑,在模板文件config.properties.vm中,需要被替换的明明是net_kiminotes_value,为什么在auto-config.xml文件中会定义属性 net.kiminotes.value 呢?现在只需要记住属性名中的点在autoconfig执行的时候会被替换成下划线,具体原因会在后续的blog中解释。
最后在pom中配置一下maven autoconfig插件,整个pom文件如下。
Xml代码
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.kiminotes</groupId>
<artifactId>autoconfig</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>maven-autoconfig-plugin</artifactId>
<version>1.0.9</version>
<executions>
<!-- 配置在package phase中运行maven-autoconfig-plugin的autoconfig goal -->
<execution>
<id>config</id>
<goals>
<goal>autoconfig</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<!-- 打出的jar包中的 MANIFEST.MF 文件中增加 Main-Class 这一项配置,这样就能在命令行中通过 java -jar 来执行打出的jar包 -->
<manifestEntries>
<Main-Class>net.kiminotes.Main</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<target>1.6</target>
<source>1.6</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果看不明白上面pom中插件的配置可以参加maven相关的一些书籍。
在配置文件的模板 config.properties.vm 中有一个配置变量 ${net_kiminotes_value} 在执行autoconfig的时候需要被替换,那怎么给这个配置项赋值呢?autoconfig提供了两种方式来给配置变量赋值第一从java属性文件中读取第二是交互式地编辑。autoconfig首先读取当前工作目录的antx.properties文件,如果没有则读取${user.home}/antx.properties文件,如果这个文件也不存在,autoconfig就会启动交互式编辑器请求用户输入配置变量的值,如果配置变量的值是不完整的autoconfig则会立即停止配置并抛出一个异常。如果java属性文件的位置不在autoconfig默认的位置可以通过参数autoconfig.userProperties进行配置。处于简单其间,我们在当前目录新建一个java属性文件antx.properties,这个文件中定义了配置变量${net_kiminotes_value}的值。antx.properties 文件的内容如下。
net.kiminotes.value = hello, world
整个项目的结构如下所示:
下面运行maven来build这个项目。运行 mvn package,在target目录下生成一个jar包autoconfig-1.0-SNAPSHOT.jar,运行这个jar包。
本文介绍了一个自动化的配置工具autoconfig,虽然它能解决部署前的软件配置问题,但它同样有一个很关键的问题,与ide没有任何集成,给开发以及单元测试带来一定的麻烦,这就要靠各个使用者开动脑筋来解决这个问题了。 [size=medium][/size]
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop】
推荐阅读
article
Since
Maven
3.8
.1
http
repositories are
blocked
...
使用私服作为mirrors,如果你的maven是
3.8
.1+的版本,会提示:
Since
Maven
3.8
.1
http
...
赞
踩
article
java
计算机
毕业设计
(附源码)高校车辆
管理系统
(
springboot
+
mysql
+
maven
+论文...
首先,该系统可以有效规范校园车辆使用流程,通过电子化管理,实现车辆调度的科学化、合理化,避免资源的浪费。高校车辆
管理系统
...
赞
踩
article
Maven
的
下载安装
和配置...
1、进入官网下载,并解压。2、配置环境变量1.1 创建新的变量名:MAVEN_HOME,值是自己下载的对应目录。1.2 ...
赞
踩
article
【
Maven
】
Maven
下载
安装
教程
(超详细)
_
maven
下载
...
Maven
的
下载
安装
教程
,包含环境配置
_
maven
下载
maven
下载
...
赞
踩
article
【
Maven
】
Maven
下载
,
配置
以及
基本概念
...
Maven
是一个Java项目管理工具和构建工具,用于管理项目的依赖关系、构建过程以及项目的部署。它是Apache软件基金...
赞
踩
article
Maven
3 各
版本
下载
方法_
maven
下载
...
各
版本
Maven
下载
方法第一步:百度搜索
Maven
官网第二步:选择
下载
第三步:点击箭头所指~第四步:选择想
下载
的
版本
第四...
赞
踩
article
maven
:
下载和安装
_
aide
maven
仓库...
下载
:
http
:
//
maven
.apache.org/download.cgi安装的话.只需要配置下环境变量.配置两个系...
赞
踩
article
Java
项目:
电影
售票
系统
设计和实现(
java
+
Springboot
+ssm+
mysql
+jsp+m...
源码获取:博客首页 "资源" 里下载!一、项目简述
Java
电影
院
系统
功能:登陆注册模块 :普通用户可以直接访问影院主界面...
赞
踩
article
maven
项目集成
swagger3
生成
json
和
yaml
格式的
openapi
文件_
swagger3
...
本文介绍了如何在纯
maven
项目中集成
swagger3
,通过配置和扫描API接口,
生成
符合OpenAPI规范的
json
或...
赞
踩
article
IDEA
maven
项目
POM
文件
变灰色或有
个
虫子(蜘蛛标记)_
pom
文件
上带
个
虫...
1.选中
pom
文件
,右键菜单里面有一
个
--> Mark ad Plain Text (标记为纯文本)菜单,单击后,po...
赞
踩
article
idea
maven
pom
文件自动
提示
失效
_
idea
maven
的
repositories
过期...
进入设置点击update基本可以解决更新等待一段时间,问题解决了,出现
提示
_
idea
maven
的repositorie...
赞
踩
article
Maven
POM
的
艺术_
pom
文件
左边有个蚂蚁...
Maven
POM
的
艺术
Maven
知识
的
累积者
Maven
是为了简化 基于Java
的
项目
的
构建而生
的
。说到简化, 对于...
赞
踩
article
maven
依赖说明_
fastjson
maven
...
文章详细探讨了Maven如何处理直接和间接依赖,以及其仲裁机制。通过分析Maven的坐标系统、依赖标签、作用域和继承关系...
赞
踩
article
maven
:
pom
文件
详解_
pom
directory
...
一、
maven
项目的目录结构
pom
文件
定于了一个
maven
项目的
maven
配置,一般
pom
文件
的放在项目或者模块的根目...
赞
踩
article
高效
使用
Java
构建
工具
|
Maven
篇|云效工程师指北_
bazel
maven
...
本文介绍了如何高效
使用
Java
构建
工具
Maven
,重点在于优雅的依赖管理,如便捷升级、合理范围配置,以及
构建
过程的加速,...
赞
踩
article
穿越
Java
- 开发框架篇 第二章 项目
构建
工具
-
Maven
| 第1节
Maven
的下载与...
本文详细介绍了
Java
构建
工具
Maven
的下载与
安装
步骤,包括解压缩、配置环境变量以及验证
安装
是否成功。此外,还提到了M...
赞
踩
article
使用
SpringBoot
+ Maven +
ProGuard
进行代码混淆_
spring
boot
...
使用
SpringBoot
+ Maven +
ProGuard
进行代码混淆_
spring
boot
proguard
m...
赞
踩
article
Linux
系统配置
Maven
环境
详细教程(图文讲解)_
linux
maven
...
本文提供了一步步在
Linux
系统中配置
Maven
环境
的详细教程,包括下载安装包、安装
Maven
、配置镜像和
环境
变量,图文...
赞
踩
article
Java
项目
角色
权限
后台
脚手架
系统
(
java
+
Springboot
+Maven+
myBaits
-Pl...
源码获取:博客首页 “资源” 里下载!
Springboot
框架+
myBaits
-
Plus
+MySQL实现的
角色
权限
后台管...
赞
踩
article
springboot
从2.7.2 升级到 3.3.0_failed to
execute
goal
...
时代在进步,
springboot
已经来到了3.3.0 , 于是我们也打算升级下sbvadmin到3.3, jdk使用21...
赞
踩
相关标签
maven
java
课程设计
spring boot
配置
阿里云
xml
后端
ssm
mysql
json
swagger2
idea
pom
提示