Servlet中的SimpleDateFormat

我在Servlet中使用了很多SimpleDateFormat对象。 不幸的是,SimpleDateFormat不是线程安全的。 因此,我考虑用ThreadLocal包装它以促进SimpleDateFormat对象的重用。 我写了一个util-class来启用它: public class DateUtil { private final static ThreadLocal dateFormat = new ThreadLocal() { return new SimpleDateFormat(); } public static SimpleDateFormat get () { return dateFormat.get(); } } 实际上,这似乎导致内存泄漏。 关闭我的webapp时,Tomcat会记录以下错误消息: 严重:Web应用程序[]使用[null]类型的键创建了一个ThreadLocal(值[com.example.util.DateUtil$2@50242f7d]),类型为[java.text.SimpleDateFormat](value [java.text] .SimpleDateFormat @ d91b489b])但在Web应用程序停止时无法将其删除。 这很可能造成内存泄漏。 我理解内存泄漏的原因,但是在Servlet中处理SimpleDateFormat-objects(或任何其他非线程安全对象)的最佳方法是什么?

如何阻止ANTLR抑制语法错误?

所以我用Java编写了一个使用ANTLR的编译器,我对它如何处理错误感到有些困惑。 默认行为似乎是打印错误消息,然后通过令牌插入等方式尝试从错误中恢复并继续解析。 我原则上喜欢这个; 这意味着(在最好的情况下)如果用户提交了多个语法错误,他们将在每个错误中获得一条消息,但它会提到所有错误,而不是强制它们重新编译以发现下一个错误。 默认错误消息可以用于我的目的。 当它读完所有令牌时就会出现问题。 当然,我使用ANTLR的树构造函数来构建抽象语法树。 虽然解析继续通过语法错误很好,所以用户可以看到所有错误,一旦完成解析我想得到一个exception或某种指示输入在语法上没有效果; 这样我就可以停止编译并告诉用户“抱歉,修复语法错误,然后重试”。 我不想要的是它根据它认为用户试图说的内容吐出一个不完整的AST,并继续编译的下一个阶段,没有任何迹象表明出现任何问题(除了错误信息之外)到控制台,我看不到)。 但默认情况下,确实如此。 最终的ANTLR参考提供了一种在检测到语法错误时立即停止解析的技术:覆盖mismatch和recoverFromMismatchedSet方法以抛出RecognitionException ,并添加@rulecatch操作来执行相同操作。 这似乎失去了从解析错误中恢复的好处,但更重要的是,它只能部分工作。 如果缺少必要的标记(例如,如果二元运算符只在其一侧有一个表达式),它会按预期抛出exception,但如果添加了一个无关的标记,ANTLR会插入它认为属于的标记并继续以其快乐的方式,生成一个AST,除了控制台消息外没有任何语法错误的迹象。 (更糟糕的是,它插入的令牌是EOF ,所以文件的其余部分甚至都没有被解析。) 我确定我可以解决这个问题,例如,向解析器添加类似isValid字段的内容并覆盖方法并添加操作,以便在解析结束时,如果出现任何错误,它会抛出exception。 但有更好的方法吗? 我无法想象我想要做的事情在ANTLR用户中是不寻常的。

使用JSch库在Java中获取会话和SFTP通道

我正在为SFTP使用JSch库。 我需要在SFTP服务器上做几个操作,比如移动其他目录中的远程文件,拉文件等。对于所有这些操作,我需要Session然后从中获取Channel然后将其转换为ChannelSftp 。 这是多余的步骤。 所以我想把它抽象成一个private方法。 private ChannelSftp getChannelSftp() throws JSchException { java.util.Properties config = new java.util.Properties(); config.put(“StrictHostKeyChecking”, “no”); JSch jsch = new JSch(); Session session; session = jsch.getSession(VENDOR1_USERID, VENDOR1_SERVER, VENDOR1_PORT); session.setPassword(VENDOR1_PASSWORD); session.setConfig(config); session.connect(); ChannelSftp channelSftp = null; Channel channel = session.openChannel(“sftp”); channel.connect(); channelSftp = (ChannelSftp) channel; return channelSftp; } 但是在SFTP操作之后,我需要断开与通道和会话的连接。 使用上面的方法,虽然我可以在调用方法中断开Channel但是我不能断开与Session连接,因为我没有可能是泄漏的实例所以我现在将它分成getSession()方法,现在ChannelSftp创建是所有方法都重复。 什么是更好的设计/重构方法 ? private Session […]

ElasticSearch全文搜索

我尝试在弹性搜索java api上使用正则表达式运行全文搜索。 我的filter是这样的: FilterBuilder qFilter= FilterBuilders.regexpFilter(“_all”, “. *”+text+”. *”); 但它只与一个单词匹配而不是短语。 我的意思是,例如: 如果在soruce中有一个字符串,如:“ one two three four five.. ”,当我的文本字符串如下:“ two ”,“ our ”,“ thr ”……那么它就可以了。 但是当我的realTimeTextIn字符串是“ two three ”时,全文搜索不起作用。 我不能搜索一个以上的单词。 我在这里缺少什么? 其余的代码是这样的: FilterBuilder qFilter = FilterBuilders.regexpFilter(“_all”, “.*”+q+”.*”); SearchResponse response = ClientProvider.instance().getClient().prepareSearch(index) .setTypes(type) .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setPostFilter(qFilter) .setFrom(0).setSize(250).setExplain(true) .execute() .actionGet(); 谢谢你的帮助。

引发了一个SQLException,java.lang.InterruptedException,我是否用完了数据库连接?

所以我们运行一个Hibernate,Spring,Spring Webflow堆栈。 从我到目前为止所读到的,知道我们使用c3p0-0.9.1.2可能也很重要。 在过去的几天里,我们注意到服务器突然停止了。 用户无法登录网站,似乎没有任何事情发生,浏览器只是永远地加载页面。 服务器日志也只是暂停。 当我们注意到这一点时,我们关闭了tomcat实例,突然之间记录了以下几个错误; 13:05:57.492 [TP-Processor7] WARN ohutil.JDBCExceptionReporter – SQL Error: 0, SQLState: null 13:05:57.492 [TP-Processor7] ERROR ohutil.JDBCExceptionReporter – An SQLException was provoked by the following failure: java.lang.InterruptedException 这些意思是什么意思? 谷歌并没有太大的帮助。 我们是否在某处泄露数据库连接,并且池无法获得新会话? 我们刚刚添加了一些新的Spring Webflow流程,并且网站流量略有增加,但我们之前没有看到过这种行为。

在Java 1.8中找到spark groupBy中的部门平均值

我有一个下面的数据集,第一列是部门,第二列是工资。 我想按部门计算工资的平均值。 IT 2000000 HR 2000000 IT 1950000 HR 2200000 Admin 1900000 IT 1900000 IT 2200000 我在下面进行了操作 JavaPairRDD<String, Iterable> rddY = employees.groupByKey(); System.out.println(“” + rddY.collect()); 得到以下输出: [(IT,[2000000, 1950000, 1900000, 2200000]), (HR,[2000000, 2200000]), (Admin,[1900000])] 我需要的是 我想用spark RDD计算总平均值和部门平均值。 如何在spark中使用groupBy函数来计算平均值。

删除java中字符串中的特殊字符?

如何删除字符串中除“ – _”之外的特殊字符。 现在我使用: replaceAll(“[^\\w\\s]”, “”) 它删除所有特殊字符,但我想保留“ – _”。 谁能告诉我该怎么办?

从树数据结构打印纯文本树(java)

我是一个狂热的粉丝 mvn dependency:tree 并希望打印一个外观相似的树作为普通的ascii文本作为我的java程序的输出。 com.totsp.gwt:maven-gwt-sample:war:1.0-SNAPSHOT +- com.google.gwt:gwt-servlet:jar:2.4.0:compile +- com.google.gwt:gwt-user:jar:2.4.0:provided | +- javax.validation:validation-api:jar:1.0.0.GA:provided | \- javax.validation:validation-api:jar:sources:1.0.0.GA:provided +- log4j:log4j:jar:1.2.14:compile \- junit:junit:jar:4.1:test 我希望实现这一目标的库很容易使用,但我找不到它。 我看到的最接近的替代品是: http : //code.google.com/p/j-text-utils/但它不如Maven那么好。 我在哪里可以找到一个打印树结构的库,文本几乎与mvn依赖:tree相同?

Spring MVC +在建议之前检查安全性

我正在测试Spring AOP框架并提出以下问题。 我有以下代码: package danny.test.controllers; @Controller public class MyController{ @Autowired private DaoService service; @RequestMapping(value=”/save”,method = RequestMethod.POST) public String addUser(@Valid MyClass myClass, BindingResult result){ service.save(myClass); return “Ok”; } 我想在Advice方面之前创建以检查用户会话中的用户安全性。 @Aspect public class Profiler { @Pointcut(“execution(* danny.test.services.DaoServices.*.*(..))”) public void methods(){} @Before(“methods()”) public void checkSecurity() throws Throwable{ //check session if user is authenticated…. } } 我不知道该怎么做是取消执行DaoServices.save方法,如果用户未经过身份validation并导致控制器返回任何其他值而不是“ok”。 我可以做吗? 有人能指出我这样的例子吗? […]

如何将JADE与任何其他前端接口?

我正在开发一个通过网络使用JADE的项目。 访问http://jade.tilab.com了解更多详情。 但是,我希望JADE能够与一些普通的GUI接口,比如说HTML。 我的动机是我想要一台没有安装JADE的计算机来访问JADE网络,比如通过RPC或任何其他非JADE接口。 希望我正确地构建了Q并感谢答案!