๐ง ํธ๋์ญ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ด๋?
ํธ๋์ญ์ ์ ์์ํ๊ธฐ ์ํด ๋ง๋ Connection ์ค๋ธ์ ํธ๋ฅผ ํน๋ณํ ์ ์ฅ์์ ๋ณด๊ดํ๋ฉด์,
ํธ์ถ๋๋ DAO์ ๋ฉ์๋์์ ์์ ์ ์ฅ๋ Connection์ ๊ฐ์ ธ๋ค ์ฌ์ฉํ๋ ๊ธฐ๋ฒ.
์ฆ, ํ๋์ ํธ๋์ญ์ ์ ๋๊ธฐํ ๋ฐฉ์์ ํตํด ์ด ์ฌ์ด์ ์คํ๋ ๋ฉ์๋๋ค์ ๋๊ธฐํ๋ ํธ๋์ญ์ ์ ์ฌ์ฉํ๊ฒ ํ๋ ๊ธฐ๋ฒ.
UserService์ ํธ๋์ญ์ ์์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํธ๋์ญ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํด ํด๊ฒฐํด๋ณด์
์คํ๋ง์ ํธ๋์ญ์ ๋๊ธฐํ ๊ด๋ฆฌ ํด๋์ค์ธ TransactionSynchronizationManager๋ฅผ ์ ๊ณตํด์ค๋ค.
๋ฐ๋ผ์ ์ ํด๋์ค์ ๋ฉ์๋๋ค์ ํตํด ๋๊ธฐํ๋ฅผ ํด๋ณด์.
TransactionSynchronizationManager ๋ฉ์๋๋ค
๐ initSynchronization : ํธ๋์ญ์ ๋๊ธฐํ ๊ด๋ฆฌ์๋ฅผ ์ด์ฉํด ๋๊ธฐํ ์์ ์ ์ด๊ธฐํํด์ค๋ค.
๐ unbindResource, clearSynchronization : ๋๊ธฐํ ์์ ์ ์ข ๋ฃ ๋ฐ ์ ๋ฆฌ๋ฅผ ํด์ค๋ค.
์์ ํธ๋์ญ์ ๊ฒฝ๊ณ์ค์ ๊ตฌ์กฐ์ ํธ๋์ญ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ upgradeLevels ๋ฉ์๋
ํธ๋์ญ์ ๊ฒฝ๊ณ์ค์ ๊ตฌ์กฐ๋?
https://withseungryu.tistory.com/97
public void upgradeLevels(int event) throws Exception {
TransactionSynchronizationManager.initSynchronization();
Connection c = DataSourceUtils.getConnection(dataSource);
c.setAutoCommit(false);
try{
List<User> users = userDao.getAll();
for(User user : users) {
if(event == 0) {
if(canUpgradeLevel(user)) {
upgradeLevel(user);
}
}else {
if(userLevelUpgradePolicy.canUpgradeLevel(user)) {
userLevelUpgradePolicy.upgradeLevel(user);
}
}
}
c.commit();
}catch(Exception e) {
c.rollback();
throw e;
}finally {
DataSourceUtils.releaseConnection(c, dataSource);
TransactionSynchronizationManager.unbindResource(this.dataSource);
TransactionSynchronizationManager.clearSynchronization();
}
}
์์ ๊ฐ์ด ํ๋ฉด user๋ง๋ค update() ๋ฉ์๋๊ฐ ์คํ ์ ํ๋์ ํธ๋์ญ์ ์ผ๋ก ๋๊ธฐํํด์ ์คํ.
์ด๋ JdbcTemplate์ ํธ์ถ๋ ๋๋ง๋ค ์ง์ Connection์ ์์ฑํ๊ณ ์ข ๋ฃํ๋๋ฐ,
๊ณผ์ฐ ๋๊ธฐํ ์์ผฐ์ ๋๋ ์ด๋ป๊ฒ ๋์์ ํ ๊น?
JdbcTemplate์ ์๋ฆฌํ์ฌ ๋ฏธ๋ฆฌ ์์ฑ๋ ํธ๋์ญ์ ๋๊ธฐํ ์ ์ฅ์์ ํธ๋์ญ์ ์ด ์์ ๋๋ ์ง์ ๋ง๋ค์ง๋ง
ํธ๋์ญ์ ๋๊ธฐํ ์ ์ฅ์์ ํธ๋์ญ์ ์ด ์กด์ฌํ๋ฉด ์๋ก ๋ง๋ค์ง ์๊ณ ์ด๋ฅผ ์ด์ฉํด ๋์ํ๋ค.
๐ ์ ๋ฆฌ
ํธ๋์ญ์ ์ ๋ํ ๋ฌธ์ ๊ฐ ์๊ธธ ๊ฒฝ์ฐ๋ฅผ ์ ํ์ ์ ํ์ฌ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ฃผ์!