Skip to content

Commit 13c8fd7

Browse files
authored
Merge pull request #72 from prgrms-web-devcourse-final-project/feature/lazy-connection-datasource
데이터소스 환경에 LazyConnection 프록시 적용
2 parents 18d871c + 99a1597 commit 13c8fd7

File tree

2 files changed

+47
-17
lines changed

2 files changed

+47
-17
lines changed

src/main/java/com/example/log4u/common/config/MySqlConfig.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import org.springframework.transaction.PlatformTransactionManager;
1818

1919
import 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
}

src/main/java/com/example/log4u/common/config/PostgreSqlConfig.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
1515
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
1616
import org.springframework.transaction.PlatformTransactionManager;
17+
import com.zaxxer.hikari.HikariDataSource;
18+
import org.springframework.beans.factory.annotation.Qualifier;
19+
import org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy;
1720

1821
@Configuration
1922
@EnableJpaRepositories(
@@ -27,14 +30,25 @@ public class PostgreSqlConfig {
2730

2831
@Bean
2932
@ConfigurationProperties(prefix = "spring.second-datasource")
30-
public DataSource postgresqlDataSource() {
31-
return DataSourceBuilder.create().build();
33+
public HikariDataSource postgresqlHikariDataSource() {
34+
return DataSourceBuilder.create()
35+
.type(HikariDataSource.class)
36+
.build();
37+
}
38+
39+
@Bean(name = "postgresqlDataSource")
40+
public DataSource postgresqlDataSource(
41+
@Qualifier("postgresqlHikariDataSource") HikariDataSource hikariDataSource
42+
) {
43+
return new LazyConnectionDataSourceProxy(hikariDataSource);
3244
}
3345

3446
@Bean(name = "postgresqlEntityManagerFactory")
35-
public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory() {
47+
public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory(
48+
@Qualifier("postgresqlDataSource") DataSource dataSource
49+
) {
3650
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
37-
em.setDataSource(postgresqlDataSource());
51+
em.setDataSource(dataSource);
3852
em.setPackagesToScan("com.example.log4u.domain.map.entity");
3953

4054
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
@@ -52,9 +66,11 @@ public LocalContainerEntityManagerFactoryBean postgresqlEntityManagerFactory() {
5266
}
5367

5468
@Bean(name = "postgresqlTransactionManager")
55-
public PlatformTransactionManager postgresqlTransactionManager() {
69+
public PlatformTransactionManager postgresqlTransactionManager(
70+
@Qualifier("postgresqlEntityManagerFactory") LocalContainerEntityManagerFactoryBean postgresqlEmf
71+
) {
5672
JpaTransactionManager transactionManager = new JpaTransactionManager();
57-
transactionManager.setEntityManagerFactory(postgresqlEntityManagerFactory().getObject());
73+
transactionManager.setEntityManagerFactory(postgresqlEmf.getObject());
5874
return transactionManager;
5975
}
6076
}

0 commit comments

Comments
 (0)