获得“试图锁定时发现死锁; 尝试重启事务“

我的应用程序(java spring-core)有几个并发运行的线程并访问db,我在某个高峰时间遇到exception 07:43:33,400 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1213, SQLState: 40001 07:43:33,808 ERROR [org.hibernate.util.JDBCExceptionReporter] Deadlock found when trying to get lock; try restarting transaction 07:43:33,808 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session org.hibernate.exception.LockAcquisitionException: could not insert: [com.xminds.bestfriend.frontend.model.Question] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:107) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2436) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2856) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:184) at […]

如何根据值来比较两个地图

如何按价值比较两张地图? 我有两个包含相等值的地图,并希望通过它们的值进行比较。 这是一个例子: Map a = new HashMap(); a.put(“foo”, “bar”+”bar”); a.put(“zoo”, “bar”+”bar”); Map b = new HashMap(); b.put(new String(“foo”), “bar”+”bar”); b.put(new String(“zoo”), “bar”+”bar”); System.out.println(“equals: ” + a.equals(b)); // obviously false …. what to call to obtain a true? [[ 编辑:有人请编辑并修复此问题,以表示其实际意味着什么。 上面的代码打印“true”,而不是“false”。 ]] 显然,要实现比较并不困难,只需比较所有键及其相关值即可。 我不相信我是第一个这样做的人,因此必须在java或jakarta.commons库中已经有一个库函数。 谢谢

我什么时候应该使用Hashtable而不是HashMap

这不是关于Hashtable和HashMap之间差异的问题。 我知道Hashtable对象不能接受键或值条目的null值,它是同步集合,并且它使用的内存比HashMap略少。 我想知道使用Hashtable而不是HashMap更合适的场景。

Java Thread:Run方法不能抛出已检查的exception

在Java线程中,’run’方法不能抛出’checked exception’。 我在Core Java(第1卷)一书中遇到过这个问题。 有人可以解释背后的推理吗?

将Locale特定String转换为BigDecimal的最佳方法

我必须将德语区域设置格式化的String转换为BigDecimal。 但是,我正在努力寻找最佳解决方案。 以下代码显示了我的问题: String numberString = “2.105,88”; NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN); try { Number parsed = nf.parse(numberString); BigDecimal bd1 = new BigDecimal(parsed.toString()); System.out.println(bd1.toString()); BigDecimal bd2 = new BigDecimal(parsed.doubleValue()); System.out.println(bd2); BigDecimal bd3 = new BigDecimal(numberString); System.out.println(bd3); } catch (ParseException e) { e.printStackTrace(); } 这个的出局是 2105.88 2105.8800000000001091393642127513885498046875 java.math.BigDecimal(java)中的线程“main”java.lang.NumberFormatException中的exception。在test.BigDecimalTest.main(BigDecimalTest.java:22)的java.math.BigDecimal。(未知来源) 第一个输出是正确的,但将String转换为Number (精确地为Double ),然后再将String转换为String然后转换为特定类型的Number , BigDecimal并没有多大意义。 第二个输出不正确,但可以通过设置BigDecimal的比例来解决。 但是,数字量并不总是已知。 第三个输出显然不是我想要的。 我的问题是,最好的方法是什么? […]

如何处理RxJava中观察者的onNext引发的exception?

请考虑以下示例: Observable.range(1, 10).subscribe(i -> { System.out.println(i); if (i == 5) { throw new RuntimeException(“oops!”); } }, Throwable::printStackTrace); 这将输出1到5之间的数字,然后打印exception。 我想要实现的是让观察者保持订阅并在抛出exception后继续运行,即打印从1到10的所有数字。 我尝试过使用retry()和其他各种error handling操作符 ,但是,如文档中所述,它们的目的是处理observable本身发出的错误。 最简单的解决方案就是将整个onNext成try-catch块,但这对我来说听起来不是一个好方法。 在类似的Rx.NET问题中 ,建议的解决方案是创建一个扩展方法,通过创建代理可观察来进行包装。 我试图重拍它: Observable origin = Observable.range(1, 10); Observable proxy = Observable.create((Observable.OnSubscribe) s -> origin.subscribe(i -> {try { s.onNext(i); } catch (Exception ignored) {}}, s::onError, s::onCompleted)); proxy.subscribe(i -> { System.out.println(i); if (i […]

Java中的接口:无法使已实现的方法受到保护或私有

我知道接口必须是公共的。 但是,我不希望这样。 我希望我的实现方法只能从他们自己的包中访问,所以我希望我的实现方法受到保护。 问题是我不能使接口或实现的方法受到保护。 什么是解决方法? 是否存在与此问题相关的设计模式? 从Java指南中,抽象类也不能完成这项工作。

查看java源代码

有没有办法查看Java中的默认类( java.awt.*; javax.swing.*;等)背后的实际代码,看看它到底发生了什么? 我并不仅仅是文档或方法列表等,而是源代码本身的全部细节(换句话说,如果复制并粘贴到整个方法/类中,可以用来创建整个方法/类的精确副本) Java中程序的代码)。

值’0000-00-00’不能表示为java.sql.Date

我正在研究一些需要从数据库中提取数据的项目,我使用Spring MVC从DB构建模型来选择数据。 这是我的JSP页面的问题: Date to select: Name to select: Type to select: –SELECT– –SELECT– –SELECT– 如您所见,我尝试使用Spring标记库中的 。 题: 但是当它用这个控制器准备我的模型时: @Controller public class HomeController{ @Autowired private ControllerSupportClass controllerSupportClass; @RequestMapping(value=”/search”, method=RequestMethod.GET) public String search(Model model) { List listOfDates = controllerSupportClass.findAllDatesForm(); List listOfInstitutionsNames = controllerSupportClass.findAllInstitutionsForm(); List listOfInstitutionsTypes = controllerSupportClass.findAllTypesForm(); model.addAttribute(“listOfInstitutionsTypes”, listOfInstitutionsTypes); model.addAttribute(“listOfInstitutionsNames”, listOfInstitutionsNames); model.addAttribute(“listOfDates”, listOfDates); return “search”; } […]

逐行读取文件的最快方法是每行有2组字符串?

我可以逐行读取每行包含两个字符串的最快方法是什么。 示例输入文件将是: Fastest, Way To, Read One, File Line, By Line …. can be a large file 即使字符串之间有空格,每行也总是有两组字符串,例如“By Line” 目前我正在使用 FileReader a = new FileReader(file); BufferedReader br = new BufferedReader(a); String line; line = br.readLine(); long b = System.currentTimeMillis(); while(line != null){ 是否足够有效或使用标准JAVA API有更高效的方式(请不要外部库)任何帮助表示赞赏谢谢!