Mulit Database by MySQL

2024. 2. 3. 20:38Spring 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