使用Maven开发的,有一个问题大家肯定是深恶痛绝。
“每一次开发完成,都需要maven打包部署”
比如某公司自己在maven上开发了插件,其中包含了自定义逻辑,那么其部署每一次都必须package一把,开发效率极其低下.
使用同步工具,差点让我吐血,想想还是算了,自己写个同步的程序.
package com.ycl.filter.FileCleaner;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;
public class FileSyn {
static Map<String, String> map = new HashMap<String, String>();
/**
* 同步一个源文件目录到目标文件目录
* 默认去.svn不进行同步
* @param target
* @param source
* @param fileName
*/
public static void synFile(String target, String source) {
File sourcePath = new File(source);
File targetPath = new File(target);
index(sourcePath);
synPath(sourcePath, targetPath,new FileFilter(){
@Override
public boolean accept(File file) {
if(file.getAbsolutePath().contains(".svn")){
return false;
}
return true;
}
});
}
/**
* 同步一个源文件目录到目标文件目录
*
* @param target
* @param source
* @param fileName
*/
public static void synFile(String target, String source,FileFilter fileFilter) {
File sourcePath = new File(source);
File targetPath = new File(target);
index(sourcePath);
synPath(sourcePath, targetPath,fileFilter);
}
/**
* 同步两目录下的文件
* 过滤.svn文件夹下的不需要同步
* @param sourcePath
* @param targetPath
*/
public static void synPath(File sourcePath, File targetPath,FileFilter fileFilter) {
if (sourcePath.isDirectory()) {
File[] files = sourcePath.listFiles(fileFilter);
for (File sourceFile : files) {
try {
if (sourceFile.isDirectory()) {
File targetFile = new File(targetPath, sourceFile
.getName());
if (!targetFile.exists()) {// 目录不存在会自动创建
targetFile.createNewFile();
}
synPath(sourceFile, targetFile,fileFilter);
} else if (sourceFile.isFile()) {
File targetFile = new File(targetPath, sourceFile
.getName());
if (!targetFile.exists()) {// 文件不存在会自动创建
targetFile.createNewFile();
}
boolean flag = synFile(sourceFile, targetFile);
if (flag) {
System.out.println("同步文件:["
+ sourceFile.getAbsolutePath() + ","
+ targetFile.getAbsolutePath() + "]成功!");
}
}
} catch (IOException e) {
System.out.println("源文件:"+sourceFile.getAbsolutePath());
e.printStackTrace();
}
}
}
}
/**
* 同步一个源文件目录到目标文件目录 指定某个文件名. 用源文件覆盖目录文件.[当源文件比目录文件新的时候].
*
* @param target
* @param source
* @param fileName
*/
public static boolean synFile(File sourceFile, File targetFile) {
boolean flag = false;
Reader reader = null;
Writer writer = null;
try {
if(sourceFile.getAbsolutePath().contains("AddRole")){
System.out.println("source最后修改时间:"+sourceFile.lastModified());
System.out.println("target最后修改时间:"+targetFile.lastModified());
}
if (sourceFile.lastModified() > targetFile.lastModified()) {
reader = new FileReader(sourceFile);
writer = new FileWriter(targetFile);
IOUtils.copy(reader, writer);
flag = true;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
flag = false;
} catch (IOException e) {
e.printStackTrace();
flag = false;
} finally {
try {
if (reader != null) {
reader.close();
}
if (writer != null) {
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
/**
* 创建目录索引 fileName ==> filePath
*
* @param sourcePath
*/
private static void index(File sourcePath) {
if (sourcePath.isDirectory()) {
File[] files = sourcePath.listFiles();
for (File file : files) {
if (file.isDirectory()) {
// map.put(file.h, file.get)
}
}
}
}
}
这里本来想做索引的,后来想想就算了,同步整个目录得了,因为程序的速度太快了,我就不浪费程序代码了,代码多了本身就会崩溃。
测试代码如下:
package com.ycl.filter.FileCleaner;
import java.io.File;
import java.io.FileFilter;
/**
* 这个同步挺管用的,不需要重启服务.不需要copy文件
* @author yangchunlong.tw
*
*/
public class TestFileSyn {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//synConfigFile();1308563280000
synClassFile();
}
/**
* 同步配置文件
* @param target
* @param source
*/
public static void synConfigFile(){
String source = "D:\\workspace\\branches\\sportalModule\\sportal-web\\src\\main\\webapp\\web";
String target = "D:\\workspace\\branches\\sportalModule\\target\\sportal.war\\web";
FileSyn.synFile(target, source);
}
/**
* 同步class文件,只同步class文件 这里的规则和同步配置文件一致,就是同步.
* 设置同步的目录,以source为基本同步target目录文件
*/
public static void synClassFile(){
String source = "D:\\workspace\\branches\\sportalModule\\sportal-web\\target\\classes";
String target = "D:\\workspace\\branches\\sportalModule\\target\\sportal.war\\WEB-INF\\classes";
FileSyn.synFile(target, source);
}
}
你可以测试修改配置文件,或者Java文件,借助eclipse的auto编译功能,可以copy 文件[class,xml...]到指定的目录,不需要重新maven打包部署,如果服务器支持动态加载,则不需要重启。
同步的测试结果代码如下:
同步文件:[D:\workspace\branches\sportalModule\sportal-web\target\classes\sql-map.xml,D:\workspace\branches\sportalModule\target\sportal.war\WEB-INF\classes\sql-map.xml]成功!
很清楚的表示,你修改的文件已经同步到目录目录了.
分享到:
相关推荐
我们需要下载JBoss的zip压缩包,并解压到指定目录。之后,我们需要设置JBOSS_HOME环境变量,并将其添加到系统的PATH中。 Apache HTTP服务器的安装涉及到源码的编译和安装。下载httpd-2.0.65版本的压缩包,解压后...
这涉及到定义 Worker(表示 JBoss 实例)、设置负载均衡策略、配置虚拟主机和路径映射等。 9. **安全性**:在集群环境下,安全性是不可忽视的。你需要配置 SSL 证书以加密通信,同时设置适当的认证和授权策略,确保...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
2. 会话复制:通过共享内存或基于文件系统的方式,确保用户会话在节点间同步。 3. 负载均衡:可以集成如Apache HTTP Server或Nginx作为反向代理,实现HTTP层面的负载均衡。 三、集群配置步骤 1. 安装与准备:在多...
JBoss AS(Application Server)是一款开源的Java应用服务器,广泛应用于企业级应用程序的部署和服务。JBoss集群是通过将多个JBoss实例组合起来形成一个逻辑上的单一实体来实现高可用性和负载均衡的技术方案。这种...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
1. **轻量级**:Tomcat相比其他Java EE应用服务器,如JBoss、WebLogic等,体积小、启动快速,适合小型到中型的Web应用。 2. **开源**:Tomcat的源代码公开,允许开发者根据需要进行定制和优化。 3. **易用性**:...
2. 应用服务器节点:每个节点都是一个独立运行的JBoss实例,它们之间通过通信协议(如JGroups)保持同步,并提供应用服务。当一个节点故障时,其他节点能够接管其工作负载,确保服务的连续性。 3. 会话复制:在HA...