美文网首页Spring 学习
spring boot jpa mybatis多数据源配置

spring boot jpa mybatis多数据源配置

作者: Hogwarts1024 | 来源:发表于2018-08-10 20:52 被阅读57次

    首先配置数据库

    
    spring:
        datasource:
            primary:
                driver-class-name: com.mysql.jdbc.Driver
                url: jdbc:mysql://****
                username: ****
                password: ****
            secondary:
                driver-class-name: com.mysql.jdbc.Driver
                url: jdbc:mysql://****
                username: ****
                password: ****
    
    

    其次是数据库config,因为项目中用到了jpa所以datasource单独拿出来

    @Configuration
    public class DataSourceConfig {
    
        @Primary//设置主数据库
        @Bean("primaryDB")
        @Qualifier("primaryDB")
        @ConfigurationProperties(prefix = "spring.datasource.primary")
        public DataSource primaryDS() {
            return DataSourceBuilder.create().build();
        }
    
        @Bean("secondaryDB")
        @Qualifier("secondaryDB")
        @ConfigurationProperties(prefix = "spring.datasource.crescent")
        public DataSource secondDS() {
            return DataSourceBuilder.create().build();
        }
        
    }
    

    然后是mybatis的配置

    package com.zero.common.base.config;
    
    import com.github.pagehelper.PageInterceptor;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
    import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.orm.jpa.JpaTransactionManager;
    import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
    import org.springframework.transaction.PlatformTransactionManager;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    import javax.persistence.EntityManager;
    import javax.sql.DataSource;
    import java.util.Map;
    import java.util.Properties;
    
    
    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(entityManagerFactoryRef = "primaryEntityManagerFactory", transactionManagerRef =
            "primaryTransactionManager", basePackages = {"com.zero.project.dal.primary.dao"})
    @MapperScan(basePackages = {"com.zero.project.dal.primary.mapper"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
    public class PrimaryRepositoryConfig {
    
        @Autowired
        private JpaProperties jpaProperties;
    
        @Autowired
        @Qualifier("primaryDataSource")
        private DataSource primaryDataSource;
    
        @Bean(name = "primaryEntityManager")
        public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
            return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
        }
    
        @Bean(name = "primaryEntityManagerFactory")
        public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder) {
            return builder.dataSource(primaryDataSource).properties(getVendorProperties(primaryDataSource))
                    .packages("com.zero.project.dal.primary.entity")
                    .persistenceUnit("persistenceUnit").build();
        }
    
        private Map<String, String> getVendorProperties(DataSource dataSource) {
            return jpaProperties.getHibernateProperties(dataSource);
        }
    
        /**
         * 事务注解
         */
        @Primary
        @Bean(name = "primaryTransactionManager")
        PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
            return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
        }
    
        @Primary
        @Bean("primarySqlSessionFactory")
        public SqlSessionFactory sqlSessionFactory() throws Exception {
            org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
            //驼峰自动转换
            configuration.setMapUnderscoreToCamelCase(true);
    
            SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
            bean.setDataSource(primaryDataSource);
            bean.setConfiguration(configuration);
    
            PageInterceptor pageInterceptor = new PageInterceptor();
            Properties properties = new Properties();
            properties.setProperty("helperDialect", "mysql");
            pageInterceptor.setProperties(properties);
            Interceptor[] interceptors = {pageInterceptor};
            bean.setPlugins(interceptors);
            //添加XML目录
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            try {
                bean.setMapperLocations(resolver.getResources("classpath*:mybatis/primary/**/*.xml"));
                return bean.getObject();
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    
    }
    
    

    secondary数据库配置和主数据库一样只要把@primary注解去掉相应的bean名称修改就行

    相关文章

      网友评论

        本文标题:spring boot jpa mybatis多数据源配置

        本文链接:https://www.haomeiwen.com/subject/cgwlbftx.html