1717import org .springframework .transaction .PlatformTransactionManager ;
1818
1919import com .zaxxer .hikari .HikariDataSource ;
20+ import com .zaxxer .hikari .HikariDataSource ;
21+ import org .springframework .beans .factory .annotation .Qualifier ;
22+ import org .springframework .jdbc .datasource .LazyConnectionDataSourceProxy ;
2023
2124@ Configuration
2225@ EnableJpaRepositories (
@@ -41,27 +44,35 @@ public class MySqlConfig {
4144 @ Bean
4245 @ Primary
4346 @ ConfigurationProperties (prefix = "spring.datasource" )
44- public DataSource mysqlDataSource () {
47+ public HikariDataSource mysqlHikariDataSource () {
4548 HikariDataSource dataSource = DataSourceBuilder .create ()
4649 .type (HikariDataSource .class )
4750 .build ();
4851
49- // Hikari 커넥션 풀 설정
50- dataSource .setMaximumPoolSize (10 ); // 최대 커넥션 수
51- dataSource .setMinimumIdle (10 ); // 최소 유휴 커넥션
52- dataSource .setIdleTimeout (30000 ); // 유휴 커넥션 유지 시간 (30초)
53- dataSource .setConnectionTimeout (3000 ); // 커넥션 대기 시간 (3초)
54- dataSource .setMaxLifetime (1800000 ); // 커넥션 최대 수명 (30분)
52+ dataSource .setMaximumPoolSize (10 );
53+ dataSource .setMinimumIdle (10 );
54+ dataSource .setIdleTimeout (30000 );
55+ dataSource .setConnectionTimeout (3000 );
56+ dataSource .setMaxLifetime (1800000 );
5557
5658 return dataSource ;
5759 }
5860
61+ @ Bean (name = "mysqlDataSource" )
62+ @ Primary
63+ public DataSource mysqlDataSource (
64+ @ Qualifier ("mysqlHikariDataSource" ) HikariDataSource hikariDataSource
65+ ) {
66+ return new LazyConnectionDataSourceProxy (hikariDataSource );
67+ }
5968
6069 @ Bean (name = "mysqlEntityManagerFactory" )
6170 @ Primary
62- public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory () {
71+ public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory (
72+ @ Qualifier ("mysqlDataSource" ) DataSource dataSource
73+ ) {
6374 LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean ();
64- em .setDataSource (mysqlDataSource () );
75+ em .setDataSource (dataSource );
6576 em .setPackagesToScan (
6677 "com.example.log4u.common" ,
6778 "com.example.log4u.domain.comment" ,
@@ -75,6 +86,7 @@ public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory() {
7586 "com.example.log4u.domain.subscription" ,
7687 "com.example.log4u.domain.hashtag"
7788 );
89+
7890 HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter ();
7991 vendorAdapter .setShowSql (true );
8092 vendorAdapter .setGenerateDdl (true );
@@ -91,9 +103,11 @@ public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory() {
91103
92104 @ Bean (name = "mysqlTransactionManager" )
93105 @ Primary
94- public PlatformTransactionManager mysqlTransactionManager () {
106+ public PlatformTransactionManager mysqlTransactionManager (
107+ @ Qualifier ("mysqlEntityManagerFactory" ) LocalContainerEntityManagerFactoryBean mysqlEmf
108+ ) {
95109 JpaTransactionManager transactionManager = new JpaTransactionManager ();
96- transactionManager .setEntityManagerFactory (mysqlEntityManagerFactory () .getObject ());
110+ transactionManager .setEntityManagerFactory (mysqlEmf .getObject ());
97111 return transactionManager ;
98112 }
99113}
0 commit comments