spring:
jpa:
properties:
hibernate:
connection:
provider_disables_autocommit: true
datasource:
hikari:
auto-commit: false
YAML
๋ณต์ฌ
default ๋ ์์ ๋ฐ๋์ด๋ค.
์์ ์ค์ ์ ํ์ธํ๋ ๊ณณ์
LogicalConnectionManagedImpl ์ begin() ์ธ๋ฐ,
initiallyAutoCommit = !doConnectionsFromProviderHaveAutoCommitDisabled() && determineInitialAutoCommitMode(getConnectionForTransactionManagement());
YAML
๋ณต์ฌ
!doConnectionsFromProviderHaveAutoCommitDisabled() ์ด ๋ถ๋ถ์ด๋ค.
์ ์ค์ ์ ํด์ฃผ์ง ์์ผ๋ฉด provider_disables_autocommit=false ๊ฐ ๋๊ณ ! ์ฐ์ฐ์๋ก ์ธํด true ๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ฉด getConnectionForTransactionManagement() ๋ฉ์๋๋ฅผ ์คํ์ํค๊ณ connection ์ hikari pool ์์ ๋ฐ์์จ๋ค.
์ด๋ ๊ฒ ๋๋ฉด ํ์ฌ ์์ ์์ service method ๋ฅผ ์คํ์ํค์ง๋ ์์๋๋ฐ transaction interceptor ์ ์ํด transaction ์ ์ด๋ฉด์ connection ๊น์ง ๋ฌผ๊ฒ ๋๋ค.
๊ทธ๋์ ์์ ์ค์ ์ true ๋ก ํด์ฃผ๋ฉด, doConnectionsFromProviderHaveAutoCommitDisabled() ์ true ๊ฐ ๋๊ณ ! ์ฐ์ฐ์์ ์ํด false ๊ฐ ๋๋ฉด์ getConnectionForTransactionManagement() ๋ ์คํ์ํค์ง ์์ connection ์ ์ด ์์ ์์ ๊ฐ์ ธ์ค์ง ์๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด ๊ฒฝ์ฐ connection ์ ๊ฐ์ ธ๊ฐ๋ ์์ ์?
โข
๋ชจ๋ ์ค๋น๋ฅผ ๋ง์น๊ณ StatementPreparerImpl ์์ connection() ์ ํธ์ถํ ๋
โข
logicalConnection().getPhysicalConnection() ํ๋ค. ์ด ๋ acquireConnectionIfNeeded() ์ด ํธ์ถ๋๊ณ ์ด ๋ physical connection ์ด null ์ด๊ธฐ๋๋ฌธ์ ๋ฌผ๋ฆฌ์ ์ปค๋ฅ์
์ ํ๋ํ๋ค.