рдореИрдВ jdbi3 рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЯреБрдХрдбрд╝реЗ рдвреВрдВрдврдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдХреНрдпрд╛ рдЬреАрдердм рдкрд░ рдПрдХ jdbi-example-repository рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд░реНрдл рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ jdbi3 рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВ?
рдореИрдВ рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛ред рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
/рд╕реЗрдм
рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреА рд▓реЗрди-рджреЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдмрд╕ Jdbi
рдФрд░ рдЕрдкрдиреЗ рдбреАрдПрдУ рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<strong i="7">@Bean</strong>
public DataSource dataSource() {
// From Spring Boot's connection pool configuration;
}
<strong i="8">@Bean</strong>
public Jdbi createJdbi(DataSource dataSource) {
return Jdbi.create(dataSource);
}
<strong i="9">@Bean</strong>
public UserDao userDao(Jdbi jdbi) {
return jdbi.onDemand(UserDao.class);
}
рдирдорд╕реНрддреЗ @bastman , @alwins0n #989 рдореЗрдВ рдмреЗрд╣рддрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗ рд░рд╣рд╛ рд╣реИ - рдХреНрдпрд╛ рдЖрдк рдЕрдм рддрдХ рдЙрдирдХреЗ рдХрд╛рдо рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдФрд░ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдХреАрдХрд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЕрд▓рдЧ рдорд╛рдВрдЧ рд░рд╣реЗ рд╣реИрдВ?
jdbi рдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рддреБрдЪреНрдЫ рд╣реИ, рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ @Configuration
рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ @Bean
рдПрдиреЛрдЯреЗрдЯ рд╡рд┐рдзрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдПрдХ Jdbi рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ - рдЬреИрд╕рд╛ рдХрд┐ @arteam рджреНрд╡рд╛рд░рд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдореЗрд░реЗ рд╡рд╕рдВрдд рдкреАрдЖрд░ рдореЗрдВ рдХрд┐рдП рдЧрдП рдХрдард┐рди рдХрд╛рдо, рд╡рд╕рдВрдд рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЬреЗрдбреАрдмреАрдЖрдИ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдк рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдпрд╣ рд╕реНрд╡реАрдХреГрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ (2) рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдЯреЛрдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди/рд╕реНрдкреНрд░рд┐рдВрдЧ-рдмреВрдЯ-рд╕реНрдЯрд╛рд░реНрдЯрд░ рдмрдирд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЕрдЧрд░ рдЖрдк рдпрд╣реА рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВред (рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рдХреЛ рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╛рдпрд╛рдо рд╣реИ: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-auto-configuration.html )
рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ jdbi2.x рдХреЗ рд╕рд╛рде рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред jdbi3.x рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИред рдпрд╣ рдЬреЗрдбреАрдмреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕рдВрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрд╕рд▓ рдореЗрдВ рдЖрдк рдкреНрд░реЙрдХреНрд╕реА рдХреЛ TransactionAwareDataSourceProxy рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдФрд░ рдЬреЗрдбреАрдмреАрдЖрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред (рдореЗрд░реЗ рдкрд╛рд╕ @arteam рдХреЗ рдЙрддреНрддрд░ рд╕реЗ c/
<strong i="8">@Bean</strong>
public DataSource dataSource() {
// From Spring Boot's connection pool configuration;
}
<strong i="9">@Bean</strong>
public TransactionAwareDataSourceProxy txDataSource(DataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource);
}
<strong i="10">@Bean</strong>
public PlatformTransactionManager transactionManager(DataSource dataSource) {
//not sure if this is needed
return new DataSourceTransactionManager(dataSource);
}
<strong i="11">@Bean</strong>
public Jdbi createJdbi(TransactionAwareDataSourceProxy dataSource) {
//note that parameter is TransactionAwareDataSourceProxy instead of plain DataSource
return Jdbi.create(dataSource);
}
<strong i="12">@Bean</strong>
public UserDao userDao(Jdbi jdbi) {
return jdbi.onDemand(UserDao.class);
}
рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдореМрдЬреВрдж рд╣реИред
рдХреНрдпрд╛ рдЖрдк рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рдкреАрдЖрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдЬреЗрдбреАрдмреАрдЖрдИ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд "рд▓реЗрди-рджреЗрди рдЬрд╛рдЧрд░реВрдХ" рдХрдиреЗрдХреНрд╢рди рдлреИрдХреНрдЯреНрд░реА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред
iirc рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдФрд░ рд╣реИрдВрдбрд▓ рд░рд╛рдЬреНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрди-рд╕рд┐рдВрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдбреАрдПрд╕ рдПрдХ рдХрдиреЗрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ (рдЬреЛ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИ) рдЬреЛ рд▓реЗрдирджреЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдкреНрд░рдпреБрдХреНрдд рд╣реИрдВрдбрд▓ рдмрдВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ (рдкреБрдирдГ) рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдкрд░ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реМрджрд╛ рдХрд╛ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдмрд▓реНрдХрд┐ рдХреЛрдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди 99% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХрдиреЗрдХреНрд╢рди рд╣реИред рдореЗрд░реЗ рдкреАрдЖрд░ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рд╕рдВрднрд╛рд▓ рд╣реИред
jdbi3 рдХреЛ stringtemplate4 рдФрд░ рд╕рдореВрд╣ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рджреЗрдЦреЗрдВ https://github.com/jdbi/jdbi/issues/1052
рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ 2.0.0 . рдореЗрдВ jdbi3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд░реЗрдкреЛ рдХрдВрдХрд╛рд▓ рдХрд╛ рд▓рд┐рдВрдХ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ
рдЬрдм рдореИрдВ рд╡рд╕рдВрдд рдХреЗ @Transactional рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдХреА рд╕рдорд╛рдзрд╛рди @kaandok рд▓рд╛рдЧреВ, рдореИрдВ рд╡рдЬрд╣ рд╕реЗ рд╣реИрдВрдбрд▓ рдмрдВрдж рдХрд░рдиреЗ рдЬрдм рд╡рд╣рд╛рдБ рдЦреБрд▓рд╛ рд▓реЗрдирджреЗрди рдореМрдЬреВрдж рдЕрдкрд╡рд╛рдж рдирд┐рдореНрди рдорд┐рд▓рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрд╢рдВрд╕рд┐рдд/рд▓рд╛рдЧреВ рд╕рдорд╛рдзрд╛рди рд╣реИ?
"рдЕрдиреБрдЪрд┐рдд рд▓реЗрдирджреЗрди рдкреНрд░рдмрдВрдзрди рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛: рдПрдХ рдЦреБрд▓реЗ рд▓реЗрдирджреЗрди рдХреЗ рд╕рд╛рде рдПрдХ рд╣реИрдВрдбрд▓ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдирджреЗрди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╣реИрдВрдбрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреЗрдбреАрдмреАрдЖрдИ рдиреЗ рдЗрд╕ рд▓реЗрдирджреЗрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рд╣реИред"
@cengha рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреБрдЫ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдиреАрдЪреЗ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд░реНрдЧ рд╣реИ:
<strong i="6">@Bean</strong>
public HikariDataSource hikariDataSource() {
HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(driverClassName);
dataSourceConfig.setJdbcUrl(jdbcUrl);
dataSourceConfig.setUsername(username);
dataSourceConfig.setPassword(password);
dataSourceConfig.setAutoCommit(true);
return new HikariDataSource(dataSourceConfig);
}
<strong i="7">@Bean</strong>
public TransactionAwareDataSourceProxy transactionAwareDataSourceProxy(HikariDataSource dataSource) {
return new TransactionAwareDataSourceProxy(dataSource);
}
<strong i="8">@Bean</strong>
public PlatformTransactionManager platformTransactionManager(HikariDataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
<strong i="9">@Bean</strong>
public Jdbi jdbi(TransactionAwareDataSourceProxy transactionAwareDataSourceProxy) {
Jdbi jdbi = Jdbi.create(transactionAwareDataSourceProxy);
jdbi.installPlugin(new SqlObjectPlugin());
return jdbi;
}
рдпрд╣рд╛рдБ рд╕реЗрд╡рд╛ рдкрд░рдд рд╣реИ
<strong i="13">@Override</strong>
<strong i="14">@Transactional</strong>
public Long createX(X x) {
Long aLong = XDao.insertX(x);
if(true) throw new RuntimeException();
return aLong;
}
рдЬрдм рдСрдЯреЛ-рдХрдорд┐рдЯ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓реЗрди-рджреЗрди рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рд▓реЗрдирджреЗрди рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд░реЛрд▓рдмреИрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рд░рдирдЯрд╛рдЗрдо рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд╛рдж) рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рд╡рд╕рдВрдд 2.0.3, рдЬреЗрдбреАрдмреАрдЖрдИ 3.0.0-рдмреАрдЯрд╛ 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдореИрдВ JDBI рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рдм рдХреБрдЫ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ jdbi2.x рдХреЗ рд╕рд╛рде рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред jdbi3.x рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦреА рд╣реИред рдпрд╣ рдЬреЗрдбреАрдмреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд▓реЗрдирджреЗрди рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕рдВрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрд╕рд▓ рдореЗрдВ рдЖрдк рдкреНрд░реЙрдХреНрд╕реА рдХреЛ TransactionAwareDataSourceProxy рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдФрд░ рдЬреЗрдбреАрдмреАрдЖрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВред (рдореЗрд░реЗ рдкрд╛рд╕ @arteam рдХреЗ рдЙрддреНрддрд░ рд╕реЗ c/