Java 无法获取锁异常:超过了spring sql的锁等待超时
您好,我在这里得到了一个超时异常,因为标题说明,我没有找到任何相关的答案,因为这是唯一发生的事务。另外,当我去掉事务状态时,我的测试通过得很好。我的创作方法:Java 无法获取锁异常:超过了spring sql的锁等待超时,java,mysql,spring,spring-jdbc,Java,Mysql,Spring,Spring Jdbc,您好,我在这里得到了一个超时异常,因为标题说明,我没有找到任何相关的答案,因为这是唯一发生的事务。另外,当我去掉事务状态时,我的测试通过得很好。我的创作方法: @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) public void createAMember(int memberid, String name, String address1, String address2, String tow
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
public void createAMember(int memberid, String name, String address1, String address2, String town, String contact_number, int bookallowance, double balance, boolean active) {
String SQL = "insert into member (id,name,address1,address2,town,contact_number,book_allowance, balance, active) values (?,?,?,?,?,?,?, ?, ?)";
getJdbcTemplate().update(SQL, new Object[] { memberid,name,address1,address2,town,contact_number,bookallowance,balance,active});
System.out.println("Created Member Name = " + name + " memberid= " + memberid);
//throw new libException();
}
我的实际测试:
@Test
@DatabaseSetup(value="classpath:dbEntries.xml", type=DatabaseOperation.CLEAN_INSERT)
public void testCreateMember() throws SQLException{
MemberDaoJDBCTemplate memberDaoJDBCTemplate=(MemberDaoJDBCTemplate)autoWireContext.getBean("memberDaoJDBCTemplate");
//int firstCount=memberDaoJDBCTemplate.countAllMembers();
memberDaoJDBCTemplate.createAMember(id,Name, Address1,Address2,Town,Contact_number,book_allowance,Balance,active);
System.out.println("kafka");
//int secondCount=memberDaoJDBCTemplate.countAllMembers();
//assertNotEquals(firstCount, secondCount);
}
我的数据源bean:
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/library"/>
<property name="username" value="root"/></bean>
我是个新手,所以如果我能补充什么的话,请说,我已经努力了一段时间了,所以任何提示都很感激。Edit1:这是我正在运行的唯一测试,即createAMember似乎我问了一个模糊或困难的问题,或者我问的方式不对。不管怎么说,在做了很多努力之后,我找到了这个问题的答案。我的原始代码实际上试图
CreateAMember
在这里:
public void createAMember(int-memberid、字符串名称、字符串地址1、字符串地址2、字符串城镇、字符串联系人号码、int-bookfacient、双平衡、布尔激活){
String SQL=“插入成员(id、姓名、地址1、地址2、城镇、联系人号码、帐簿津贴、余额、有效)值(?,,,,,,,,,,,,,?)”;
getJdbcTemplate().update(SQL,新对象[]{memberid,名称,地址1,地址2,城镇,联系电话,簿记津贴,余额,活动});
System.out.println(“创建的成员名称=“+Name+”memberid=“+memberid”);
//抛出新的libException();
结构必须更整齐,同时识别类型并将其整齐地放在准备好的语句中。下面的重新调整对我来说很有效。
PreparedStatementCreatorFactory psc=新的PreparedStatementCreatorFactory(SQL);
addParameter(新的SqlParameter(“id”,Types.INTEGER));
addParameter(新的SqlParameter(“name”,Types.VARCHAR));
addParameter(新的SqlParameter(“address1”,Types.VARCHAR));
addParameter(新的SqlParameter(“address2”,Types.VARCHAR));
addParameter(新的SqlParameter(“contact_number”,Types.VARCHAR));
addParameter(新的SqlParameter(“book_余量”,Types.INTEGER));
addParameter(新的SqlParameter(“balance”,Types.DOUBLE));
addParameter(新的SqlParameter(“active”,Types.BOOLEAN));
Object[]params=new Object[]{memberid,name,address1,address2,town,contact_number,bookfacility,balance,active};
钥匙夹=新生成的钥匙夹();
getJdbcTemplate().update(psc.newPreparedStatementCreator(params),holder);
System.out.println(“holder:+holder.getKey().toString());
System.out.println(“创建的记录名=“+Name+”ID=“+memberid”);
我最初的方法适用于简单的JDBC交互,这就是产生混淆的地方。事务需要如上所示的结构。我希望这篇文章可以在某些方面帮助像我这样无知的某某