草庐IT

@Async失效情况

全部标签

java - 在不重新部署的情况下重启 GAE 实例

我目前正在运行一个(免费的)GoogleAppEngine实例,我需要手动重启它。但是,在我项目的“实例”选项卡中,它只为我提供了“查看日志”或“关闭”的选项。关闭实例不是一个选项,因为我不想手动将应用程序重新部署到googleappspot。这不是一个选项,因为我需要从多个位置(甚至在路上)执行此操作,并且我的项目位于一台台式计算机上。我希望能够重新启动实例的原因是因为我的Java应用程序中的缓存。我缓存了某些用户和数据,这样我就很少需要调用数据存储。但是,当我想从数据存储中删除某些记录时,它们仍然存在于我的应用程序的缓存中。这意味着用户可以访问已经被手动删除的数据。我知道可以编写一

java - 为什么抛出异常的方法的调用者在这种情况下不必处理异常?

考虑以下接口(interface):packagehf;publicinterfaceBadInterface{voidmeth()throwsException;}由以下类实现:packagehf;publicclassapplesimplementsBadInterface{publicstaticvoidmain(String[]args){newapples().meth();}publicvoidmeth(){System.out.println("Dingdongmeth.");}}尽管meth()是一个抛出异常的方法,方法meth()的调用者不必处理或声明异常,但程序仍能

java - 是否可以在不读取和写入整个文件(Java)的情况下更改 txt 文件中的一行?

假设我有一个文本文件:Ilovebananas.23yearsold.Ilikebeaches.我只想打开所述文件并将年龄更改为24或25。有什么方法可以在Java中执行此操作而无需读取和写入整个文件?我知道缓冲读取器和写入器是可能的,但是当文件变得很大时,我正在寻找一种内存密集度较低的方法。 最佳答案 简短的回答:没有。长答案:并不真地。如果您知道您插入的文本直接替换了您要删除的文本,您可以通过查找文件部分、读取一个小块、替换新文本并替换该block来执行替换。这适用于您的年龄替换示例,但如果您将9替换为10,或将99替换为100

java - 在某些特定情况下更喜欢编译时常量而不是枚举

我正在阅读J.Bloch的EffectiveJava并提出以下内容(关于枚举的Setcion):Farfewerenumsbenefitfromassociatingmultiplebehaviorswithasinglemethod.Inthisrelativelyrarecase,preferconstant-specificmethodstoenumsthatswitchontheirownvalues对我来说,这种使用编译时常量的情况并不清楚。您不能提供一个反射(reflect)这一点的简单示例吗? 最佳答案 我认为该段落中

java - 在仅同步访问的情况下是否需要 volatile

这个问题在这里已经有了答案:Java-isvolatilerequiredwithsynchronized?(2个答案)关闭7年前。emitting变量应该是可变的吗?emit()方法从不同的线程调用,并且emit必须是可见的。但它只能在synchronizedblock中访问。//...是完成工作的地方,但是这里没有引用emitting。那么,如果synchronized的结构是固定的,我还需要一个volatile来emitting吗?(为什么?)staticfinalclassC{booleanemitting=false;//shallbevolatile?publicvoide

java - Spring取消@Async任务

我希望能够在它的future取消标有@Async注释的方法。我有一个用@Async注释标记的Spring方法。该方法进行一些计算,并最终返回一个结果。我见过的所有示例都建议使用AsyncResult类来返回此Future。@AsyncpublicFuturerun(){//...Computation.Minutespass...returnnewAsyncResult("Result");}我以下列方式从另一个组件调用以下方法。出于示例目的,我希望立即取消此线程:Futurefuture=component.run();future.cancel(true);在这种情况下,线程永远不

java - 在不创建单独的 maven 项目的情况下使用 jmh 对代码进行基准测试

我正在开发一个Maven项目,我希望使用jmh来对我的代码进行基准测试。我想组织我的项目,使其包含源代码、单元测试和基准测试。gradle中似乎有一种方法可以在不创建单独的gradle项目的情况下对代码进行基准测试(参见link)。有没有办法在Maven中执行此操作? 最佳答案 简短的回答是是。我在我的项目中遇到过这个目录布局(但你绝对可以改变它)+-src/+-main/java-sources+-test/+-java-testsources+-perf-benchmarks你需要几个插件来实现这一点。build-helper-

java - 是否存在 `==` 为真但 `equals` 为假的情况?

在标准的JavaAPI中,是否存在==会返回true,而equals会返回false。虽然从理论上讲,这可以像这样简单地写入用户定义的类中classA{publicbooleanequals(Objecto){returnthis!=o;}}对于某些对象b和c,b==c是否会返回true,但是b.equals(c)返回false?此外,有这样的行为可能有什么好处吗? 最佳答案 没有*。Thecontractforequalshas5rules,第一个涵盖了这种情况:Theequalsmethodimplementsanequival

java - 如何在不更改注释的情况下禁用 Hibernate 中某些特定实体的二级缓存

我在我的应用程序中使用Hibernate二级缓存,出于某些业务原因我不能再更改实体注释。在我的项目中,除了从Hibernate更改数据库外,还存在其他不通过Hibernate的nativeSQL。因此,从原生SQL更新数据库后,Hibernate二级缓存数据可能会过时。这就是为什么我要禁用某些实体的二级缓存(以编程方式或除更改注释以外的其他方式)。提前致谢! 最佳答案 警告:正如JensSchauder所指出的,不可能通过设置maxElementsInMemory="0"将Ehcache配置为在内存中存储0个元素,因为它实际上会导致

java - 在少数特定情况下丢失的日志消息

我正在使用java.util.logging来记录我的应用程序的所有日志。直到最近,我一直在使用没有任何特定配置的日志记录工具。一切都按预期工作,所有日志都在控制台(stderr)中可见现在,我想为我的日志自定义配置。我希望日志显示在控制台上,但我也希望将它们写入文件中。我想出了以下解决方案:publicstaticvoidmain(String[]args){System.setProperty("java.util.logging.config.file","log.config");LoggerdefLogger=Logger.getLogger("fr.def");//alll