Home
>
Code Review
>
π»[Code Review] MySQLConfig ν΄λμ€ μ½λ 리뷰.
Code review
π»[Code Review] MySQLConfig ν΄λμ€ μ½λ 리뷰.
1οΈβ£ μ 체 μ½λ.
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.support.TransactionTemplate;
import javax.sql.DataSource;
@Configuration
@EnableTransactionManagement
public class MySQLConfig {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
@Bean(name = "createUserTransactionManager")
public PlatformTransactionManager createUserTranscationManager(DataSource dataSource) {
DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource);
return manager;
}
}
2οΈβ£ μ½λ 리뷰 - μμΈνκ² λ―μ΄λ³΄κΈ° π
1οΈβ£ ν΄λμ€ μ μΈλΆ.
@Configuration
@EnableTransactionManagement
public class MySQLConfig {...
-
@Configuration
- μ΄ ν΄λμ€κ° Springμ μ€μ ν΄λμ€μμ λνλ
λλ€.
-
@Bean
μ΄λ
Έν
μ΄μ
μ΄ μλ λ©μλλ€μ ν΅ν΄ Beanμ μμ± λ° λ±λ‘ν©λλ€.
-
@EnableTransactioonManagement
- μ€νλ§μμ μ μΈμ νΈλμμ
κ΄λ¦¬λ₯Ό νμ±νν©λλ€.
-
@Transactional
μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ νΈλμμ
κ΄λ¦¬λ₯Ό μ§μνλλ‘ μ€μ ν©λλ€.
2οΈβ£ μμ± μ£Όμ
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
-
@Value
- Spring application.properties λλ application.yml νμΌμ μ μλ μ€μ κ°μ κ°μ Έμ΅λλ€.
- μλ₯Ό λ€μ΄, application.propertiesμ μλμ κ°μ νλͺ©μ΄ μ μ λμ΄ μμΌλ©΄:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- μ΄ κ°λ€μ΄ url, username, password, driverClassName νλμ μ£Όμ
λ©λλ€.
3οΈβ£ νΈλμμ
맀λμ μμ±.
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
-
@Bean
- μ΄ λ©μλκ° λ°ννλ κ°μ²΄(
DataSourceTransactionManager
)λ₯Ό Springμ BeanμΌλ‘ λ±λ‘ν©λλ€.
-
DataSourceTransactionManager
- λ°μ΄ν°λ² μ΄μ€ νΈλμμ
μ κ΄λ¦¬νλ Springμ κΈ°λ³Έ νΈλμμ
맀λμ ν΄λμ€μ
λλ€.
- DataSource κ°μ²΄λ₯Ό λ°μμ νΈλμμ
μ κ΄λ¦¬ν©λλ€.
- DataSourceλ JDBCλ₯Ό ν΅ν΄ MySQL λ°μ΄ν°λ² μ΄μ€ μ°κ²°μ μ 곡ν©λλ€.
4οΈβ£ νΈλμμ
ν
νλ¦Ώ μμ±.
@Bean
public TransactionTemplate transactionTemplate(PlatformTransactionManager transactionManager) {
return new TransactionTemplate(transactionManager);
}
-
TransactionTemplate
- νλ‘κ·Έλλ° λ°©μμΌλ‘ νΈλμμ
κ΄λ¦¬λ₯Ό μ§μνλ ν
νλ¦Ώ ν΄λμ€μ
λλ€.
- PlatformTransactionManagerλ₯Ό μ¬μ©νμ¬ νΈλμμ
μ μμ, 컀λ°, λ‘€λ°± λ±μ κ΄λ¦¬ν©λλ€.
- μ μΈμ νΈλμμ
(
@Transaction
) λμ νλ‘κ·Έλλ° λ°©μμΌλ‘ νΈλμμ
μ μ μ΄νκ³ μ ν λ μ¬μ©λ©λλ€.
5οΈβ£ μΆκ°μ μ΄ νΈλμμ
맀λμ λ±λ‘.
@Bean(name = "createUserTransactionManager")
public PlatformTransactionManager createUserTransactionManager(DataSource dataSource) {
DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource);
return manager;
}
-
λ³λμ νΈλμμ
맀λμ λ±λ‘
-
@Bean(name = "createUserTransactionManager")
λ‘ μ§μ νμ¬ λ€λ₯Έ μ΄λ¦μ νΈλμμ
맀λμ λ₯Ό λ±λ‘ν©λλ€.
- μ΄λ κ² νλ©΄ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ λλ νΉμ μμ
μ λν΄ λ€λ₯Έ νΈλμμ
맀λμ λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- μ΄ Beanμ νμμ λ°λΌ μμ‘΄μ± μ£Όμ
μ μ΄λ¦μΌλ‘ μ°Έμ‘°ν μ μμ΅λλ€:
@Autowired
@Qualifier("createUserTransactionManager")
private PlatformTransactionManager transactionManager;
3οΈβ£ μ΄ μ½λμ μ£Όμ κΈ°λ₯.
1οΈβ£ λ°μ΄ν°λ² μ΄μ€ νΈλμμ
κ΄λ¦¬.
- λ°μ΄ν°λ² μ΄μ€ μμ
μ νΈλμμ
(μμ, 컀λ°, λ‘€λ°±)μ μ μ΄ν©λλ€.
2οΈβ£ μ μΈμ λ° νλ‘κ·Έλλ°μ νΈλμμ
μ§μ.
-
@Transactional
λ‘ μ μΈμ νΈλμμ
μ μ§μνλ©°, TransactionTemplate
μ ν΅ν΄ νλ‘κ·Έλλ° λ°©μμΌλ‘ νΈλμμ
μ κ΄λ¦¬ν μ μμ΅λλ€.
3οΈβ£ μ μ°ν νΈλμμ
맀λμ .
- νλ μ΄μμ νΈλμμ
맀λμ λ₯Ό μ μνμ¬ λ€μν νΈλμμ
κ΄λ¦¬ μꡬλ₯Ό μΆ©μ‘±ν©λλ€.
4οΈβ£ μΆκ°λ‘ μμλλ©΄ μ’μ μ .
1οΈβ£ λ€μ€ λ°μ΄ν°λ² μ΄μ€ νκ²½.
- λ κ° μ΄μμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ κ²½μ°, κ°κ°μ λ°μ΄ν°μμ€μ νΈλμμ
맀λμ λ₯Ό λ³λλ‘ μ€μ νμ¬ κ΄λ¦¬ν μ μμ΅λλ€.
2οΈβ£ DataSource Bean μμ±.
- μ΄ μ½λμμλ DataSourceκ° μ£Όμ
λλ€κ³ κ°μ νμ§λ§, DataSourceλ₯Ό μ§μ μμ±νλ €λ©΄ λ³λμ Bean μ μκ° νμν©λλ€:
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setDriverClassName(driverClassName);
return dataSource;
}