目前我正在研究在其中一个例程中处理源目录中的文件的项目.有一个Java进程正在查找指定的目录,并尝试读取和处理文件(如果存在).文件退出大,并由其他第三方进程更新.问题是如何检查文件是否完整写入?我试图使用file.length()
但看起来即使写入过程尚未完成它返回实际大小.我觉得解决方案应该依赖于平台.任何帮助,将不胜感激.
更新:这个问题与副本没有什么不同,但它有一个高评级的工作代码片段的答案.
在某些情况下,我需要立即强制刷新logback的文件appender.我在docs中发现默认情况下启用此选项.神秘地说这不起作用.正如我在源代码中看到的过程涉及BufferedOutputSream
正确.有什么问题BufferedOutputSream.flush()
吗?可能这与冲洗问题有关.
更新:我在Windows XP Pro SP 3和Red Hat Enterprise Linux Server 5.3版(Tikanga)上发现了这个问题.我使用了这些库:
jcl-over-slf4j-1.6.6.jar
logback-classic-1.0.6.jar
logback-core-1.0.6.jar
slf4j-api-1.6.6.jar
Run Code Online (Sandbox Code Playgroud)
该logback.xml
方法是:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/somepath/file.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>file.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE"/>
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
更新: 我提供单元测试,但似乎不那么简单.让我更清楚地描述这个问题.
immidiateFlush
默认情况下为true,因此flush()
显式调用方法稍后当一些底层缓冲区流动时,事件出现在文件中.所以问题是:输出流是否保证立即刷新?
说实话,我已经通过实现我自己的ImmediateRollingFileAppender
利用FileDescriptor
立即同步的工具来解决这个问题.任何有兴趣的人都可以这样做.
所以这不是一个回归问题.
我需要一些类似的rsync
蚂蚁.问题是将文件从源目录复制到先前使用脚本完成的子目录集
rsync -r --ignore-existing $BASE_DIR/common/config/* $BASE_DIR/config
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
我遇到了一个问题.我有一个带有Hibernate的App,它将XML文件中的数据加载到并发模式的表中.某些部分数据可能相同,可以从不同的线程插入.每个线程都在自己的长期交易中工作.当两个或更多踏板试图提交交易时会出现问题.例如,两个线程将记录插入到对NAME字段具有约束的表City中.这意味着在flush()或commit()上发生ConstraintViolationException.我想自动处理这种冲突,并希望用旧的已插入对象替换新的问题对象.这可能吗?我在Hibernate中查看saveOrUpdate()和乐观版本控制.
我正在实现某种解析器,我需要定位和反序列化嵌入到其他半结构化数据中的json 对象。我使用了正则表达式:
\\{\\s*title.*?\\}
Run Code Online (Sandbox Code Playgroud)
定位对象
{title:'Title'}
Run Code Online (Sandbox Code Playgroud)
但它不适用于嵌套对象,因为表达式只匹配第一个找到的右大括号。为了
{title:'Title',{data:'Data'}}
Run Code Online (Sandbox Code Playgroud)
它匹配
{title:'Title',{data:'Data'}
Run Code Online (Sandbox Code Playgroud)
所以字符串对于反序列化无效。我知道考虑到贪婪的业务,但我不熟悉正则表达式。你能帮我扩展表达式以使用所有可用的右大括号吗?
更新:
需要明确的是,这是一种尝试从 HTML+JS 等带有嵌入 JSON 的半结构化数据中提取 JSON 数据的尝试。我正在使用 GSon JAVA lib 来实际解析提取的 JSON。
我正在使用XStream,我有一个XML示例:
<person>
<firstname>Joe</firstname>
<lastname>Walnes</lastname>
<phone value="1234-456" />
<fax value="9999-999" />
</person>
Run Code Online (Sandbox Code Playgroud)
我想把它映射到课堂上
public class Person {
private String firstname;
private String lastname;
private String phone;
private String fax;
}
Run Code Online (Sandbox Code Playgroud)
因此,我们的想法是将嵌套元素的属性映射到当前对象.我试图找到任何即用型转换器但没有成功.我相信通过实施新的转换器是可能的,但也许有人已经这样做了.或者有一个我没有找到的解决方案.
更新:
我想要实现的想法是省略不必要的创建和映射实体.我根本不需要电话和传真实体,我只需要在我的模型中使用它们的属性.我试图解析的XML模式对我来说是第三方,我无法改变它.
我们有几个虚拟机分布在多个数据中心之间.每个VM都有自己的重启计划,具有不同的时区.问题是当带有TeamServer的VM正在重新启动并且其他具有buildAgent的VM正在运行构建时,则在重新引导服务器后无法找到该代理.它显示为断开连接.问题肯定在调度中,但我还没有在日志中找到它.我发现了这个launcher.log
[2012-09-09 10:02:06,356] INFO - ldServer.agent.run.AgentRunner - 代理程序已完成[2012-09-09 10:02:06,379] INFO - ldServer.agent.run.AgentRunner - 代理已退出代码:30 [2012-09-09 10:02:06,382] INFO - ldServer.agent.run.AgentRunner - 启动器正在退出
...
[2012-09-10 12:53:02,826] INFO - ldServer.agent.run.AgentRunner - Mon Sep 10 12:53:02 BST 2012 ==>开始发布
什么Agent has exited with code: 30
意思?这是否意味着当时构建代理被杀或因某种原因迫使其自杀?
我需要自定义RCP应用程序的外观.
我看了一下Eclipse Presentation API,我想它允许自定义工作台中除控件之外的所有东西.
那么有任何自定义控件的解决方案吗?
我做了一些研究工作,并使用控制画布绘制实现了一些特殊的SWT cunstomization.可能有更好的解决方案吗?
在Swing中,您可以使用Synth主题.如果SWT存在一些"皮肤"框架,那就太好了.
我在Amazon EC2实例上运行的一个服务上设置了JMX,但它无法正常工作.我正在使用VisualVM进行连接,在短暂的挂起期后,它会因超时而失败.看起来因为缺少响应数据或滞后而失败.我检查了安全组中是否启用了JMX端口,并尝试使用不启用JMX的不同端口,并且在安全组设置中未启用端口,并且两者都立即失败,因此它看起来不同.我的EC2实例和桌面都安装了Ubuntu 12.04和JDK 7.
事实证明,由于连接是SSL安全的,所以端口没有意义.我有一个私钥,不知道如何使用它与JConsole或VisualVM.
我有一个脚本run.sh
位于只读目录的某个位置,/install/app/release_1.0.0/
以及完全访问目录中该脚本的符号链接/packages/app/
.此脚本使用相对路径操作文件.当我使用符号链接运行此脚本时,它无法找到文件,因为它正在查找符号链接的当前目录.如何强制它查看链接目标的当前目录?不希望更改脚本.
我正在寻找在任务执行中查找本地hazelcast成员的方法.我正在使用的版本是2.5-SNAPSHOT.教程中的片段似乎不起作用:
public class Echo implements Callable<String>, Serializable {
public String call() {
return Hazelcast.getCluster().getLocalMember().toString() + ":" + input;
}
}
Run Code Online (Sandbox Code Playgroud)
现在调用不推荐使用的getCluster()会触发新成员的创建和连接.
目前我设法通过HazelcastInstance.getCluster().getLocalMember()获得它,但我不想用这种注射使我的callables复杂化.
能否请您建议查找当地会员的正确方法?
我关注持久性的故障转移场景,我正在考虑应该如何正确实现它.根据之前的经验,我认为如果底层持久性无法存储实体,它应该能够在问题解决后立即存储它.在Hazelcast中,在地图中缓存的实体具有管理它与MapStore的关系的状态.
如果MapStore实现无法存储会发生什么?如何让实体重新应用于MapStore业务?
更新:
在MapStore本身实现故障转移以将条目保留在队列中不是问题,除非底层持久性业务可用,但这会打破分布式内存的想法.另一方面,如果MapStore中出现的数据将被放回缓存,它可能会导致不一致,不是吗?
可能这个问题似乎很愚蠢,但无论如何.我有一个脚本文件/local/bin/app1/script.sh
,我需要知道它的父父目录名称bin
.我知道我可以${0%/*}
用来确定父目录名.我不熟悉bash所以有人可以帮我弄清楚父母的父目录名吗?非常感谢.
java ×5
file ×2
hazelcast ×2
io ×2
linux ×2
amazon-ec2 ×1
ant ×1
bash ×1
build-server ×1
concurrency ×1
directory ×1
eclipse-rcp ×1
failover ×1
filesystems ×1
flush ×1
hibernate ×1
hyperlink ×1
insert ×1
jmx ×1
logback ×1
logging ×1
parent-child ×1
parsing ×1
persistence ×1
port ×1
regex ×1
rsync ×1
sh ×1
swt ×1
teamcity ×1
visualvm ×1
xml ×1
xstream ×1