Mulit Database by MySQL
2024. 2. 3. 20:38ㆍSpring Boot
단순히 MySQL을 하나 연결하는 방법은
application.properties에 설정을 넣으면
자동으로 설정 되기 때문에 간단하다
하지만 여러개의 MySQL을 연결하기 위해서는 설정을 직접 해줘야한다
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import java.util.*;
@EnableJpaRepositories(
basePackages = "com.example.demo.mySQL",
entityManagerFactoryRef = "mySQLManagerFactory",
transactionManagerRef = "mySQLTransactionManager"
)
@Configuration
@PropertySource("classpath:mySQL.properties")
public class mySQLConfig {
@Value("${url}")
private String url;
@Value("${name}")
private String name;
@Value("${password}")
private String password;
@Bean
public DataSource mySQLSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(name);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean mySQLManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(mySQLSource());
em.setPackagesToScan(new String[] {"com.example.demo.mySQL"});
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setShowSql(false);
adapter.setGenerateDdl(true);
em.setJpaVendorAdapter(adapter);
HashMap<String, Object> prop = new HashMap<>();
prop.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
prop.put("hibernate.hbm2ddl.auto", "update");
prop.put("hibernate.format_sql", true);
em.setJpaPropertyMap(prop);
return em;
}
@Bean
public PlatformTransactionManager mySQLTransactionManager() {
JpaTransactionManager manager = new JpaTransactionManager();
manager.setEntityManagerFactory(mySQLManagerFactory().getObject());
return manager;
}
}
이런 식으로
DataSource,
LocalContainerEntityManagerFactoryBean
PlatformTransactionManager
를 직접 설정해주어야한다
대부분은 application.properties에 설정한 값을 직접 설정해서 Bean으로 등록해주면 되지만
basePackages = "com.example.demo.mySQL",
는 사용할 JpaRepository가 있는 Package를 등록해야하고
em.setPackagesToScan(new String[] {"com.example.demo.mySQL"});
는 사용할 Entity를 정의한 Class가 있는 곳을 등록해야한다
이렇게 직접 설정해서 Database를 연결하면 여러개의 Database를 연결 할 수 있다
'Spring Boot' 카테고리의 다른 글
| Elasticsearch (0) | 2024.02.13 |
|---|---|
| Image File Handling (0) | 2024.02.03 |
| Redis (0) | 2024.01.28 |
| RestController (0) | 2024.01.28 |
| Oauth2 by Google (0) | 2024.01.22 |