Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
0589db89
Commit
0589db89
authored
Sep 03, 2018
by
Junling Bu
Browse files
chore[litemall-db]: 写一个乐观锁更新的测试用例
parent
45c4dba9
Changes
1
Hide whitespace changes
Inline
Side-by-side
litemall-db/src/test/java/org/linlinjava/litemall/db/OptimisticLockTest.java
0 → 100644
View file @
0589db89
package
org.linlinjava.litemall.db
;
import
org.junit.After
;
import
org.junit.Assert
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.linlinjava.litemall.db.dao.LitemallSystemMapper
;
import
org.linlinjava.litemall.db.domain.LitemallSystem
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringJUnit4ClassRunner
;
import
org.springframework.test.context.web.WebAppConfiguration
;
/*
main线程先select,然后睡眠1s,最后做update
another线程则是先select,然后做update
main: select update 2
another: select update 3
如果没有乐观锁,那么最后main线程的update操作是成功的,最终数据库保存的值是2;
如果设置乐观锁,那么最后main线程的update操作是失败的,最终数据库保存的值是3。
在一些业务过程中,需要采用乐观锁,这样可以保证数据更新时不会出现问题。
*/
@WebAppConfiguration
@RunWith
(
SpringJUnit4ClassRunner
.
class
)
@SpringBootTest
public
class
OptimisticLockTest
{
@Autowired
private
LitemallSystemMapper
systemMapper
;
private
Integer
unlockId
;
private
Integer
lockId
;
@Before
public
void
before
()
{
LitemallSystem
unlockSystemConfig
=
new
LitemallSystem
();
unlockSystemConfig
.
setKeyName
(
"test-unlocksystem-key"
);
unlockSystemConfig
.
setKeyValue
(
"test-unlocksystem-value-1"
);
systemMapper
.
insertSelective
(
unlockSystemConfig
);
unlockId
=
unlockSystemConfig
.
getId
();
LitemallSystem
lockSystemConfig
=
new
LitemallSystem
();
lockSystemConfig
.
setKeyName
(
"test-locksystem-key"
);
lockSystemConfig
.
setKeyValue
(
"test-locksystem-value-1"
);
systemMapper
.
insertSelective
(
lockSystemConfig
);
lockId
=
lockSystemConfig
.
getId
();
}
@After
public
void
after
()
{
systemMapper
.
deleteByPrimaryKey
(
unlockId
);
unlockId
=
null
;
systemMapper
.
deleteByPrimaryKey
(
lockId
);
lockId
=
null
;
}
@Test
public
void
runWithOptimisticLock
()
{
LitemallSystem
mainSystem
=
systemMapper
.
selectByPrimaryKey
(
lockId
);
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
LitemallSystem
anotherSystem
=
systemMapper
.
selectByPrimaryKey
(
lockId
);
anotherSystem
.
setKeyValue
(
"test-locksystem-value-3"
);
systemMapper
.
updateWithVersionByPrimaryKey
(
anotherSystem
.
getVersion
(),
anotherSystem
);
}
}).
start
();
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
mainSystem
.
setKeyValue
(
"test-locksystem-value-2"
);
int
updates
=
systemMapper
.
updateWithVersionByPrimaryKey
(
mainSystem
.
getVersion
(),
mainSystem
);
Assert
.
assertEquals
(
updates
,
0
);
mainSystem
=
systemMapper
.
selectByPrimaryKey
(
lockId
);
Assert
.
assertNotEquals
(
mainSystem
.
getKeyValue
(),
"test-locksystem-value-2"
);
Assert
.
assertEquals
(
mainSystem
.
getKeyValue
(),
"test-locksystem-value-3"
);
}
@Test
public
void
runWithoutOptimisticLock
()
{
LitemallSystem
mainSystem
=
systemMapper
.
selectByPrimaryKey
(
unlockId
);
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
LitemallSystem
anotherSystem
=
systemMapper
.
selectByPrimaryKey
(
unlockId
);
anotherSystem
.
setKeyValue
(
"test-unlocksystem-value-3"
);
systemMapper
.
updateByPrimaryKey
(
anotherSystem
);
}
}).
start
();
try
{
Thread
.
sleep
(
1000
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
mainSystem
.
setKeyValue
(
"test-unlocksystem-value-2"
);
int
updates
=
systemMapper
.
updateByPrimaryKey
(
mainSystem
);
Assert
.
assertEquals
(
updates
,
1
);
mainSystem
=
systemMapper
.
selectByPrimaryKey
(
unlockId
);
Assert
.
assertEquals
(
mainSystem
.
getKeyValue
(),
"test-unlocksystem-value-2"
);
Assert
.
assertNotEquals
(
mainSystem
.
getKeyValue
(),
"test-unlocksystem-value-3"
);
}
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment