springcloud+jps+mybatis多数据库配置

Easter79
• 阅读 592
  1. 多数据库配置

配置我们目录结构设置:

config

 ---datasource

----jpa

----mybatis

----redis 

Datasource中是数据的相关配置

Jap中是springDatajpa的相关配置

Mybatis中是mybatis的相关配置

Redis中是redis的相关配置

如果还有其他的可以自行创建目录

3.1.DataSource的配置

/**

 * @author youkun

 * @data 2018/7/22

 * 多数据库连接

 */

@Configuration

public class DataSourceConfig {

    /**

     * 数据库1

     * @return

     */

    @Primary

    @RefreshScope

    @Bean(name = "primaryDataSource")

    @Qualifier("primaryDataSource")

    @ConfigurationProperties(prefix = "spring.datasource.primary")

    public DataSource primaryDataSource(){

        return DataSourceBuilder.create().build();

    }

    /**

     * 数据库2

     * @return

     */

    @RefreshScope

    @Bean(name="secondaryDataSource")

    @Qualifier("secondaryDataSource")

    @ConfigurationProperties(prefix = "spring.datasource.secondary")

    public DataSource secondaryDataSource(){

        return DataSourceBuilder.create().build();

    }

}

需要注意的是我们需要表明默认使用哪个需要加上@Primary注解

@ConfigurationProperties中设置的是我们需要读取哪个库的配置可以参考后面的配置

3.2.Jap的相关配置

每一个库对应一个jpa的配置类,默认的需要加上@Primary注解

如:库一
/**
 * @author youkun
 * @data 2018/7/22
 * jpa__多数据库自动生成表设置
 */

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManagerFactoryPrimary",
        transactionManagerRef = "transactionManagerPrimary",
        basePackages = {"com.tzbank.common.entity"})
public class JpaPrimaryConfig { @Autowired
    @Qualifier("primaryDataSource") private DataSource primaryDataSource; /**
     * jpa__设置
     * @param
builder * @return */ @Primary
    @Bean(name="entityManagerPrimary") @Qualifier("entityManagerPrimary") public EntityManager entityManager(EntityManagerFactoryBuilder builder){ return entityManagerFactoryPrimary(builder).getObject().createEntityManager();
    } @Primary
    @Bean(name = "entityManagerFactoryPrimary") @Qualifier("entityManagerFactoryPrimary") public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(EntityManagerFactoryBuilder builder){ return builder
                .dataSource(primaryDataSource)
                .properties(getVendorProperties(primaryDataSource))
                .packages("com.tzbank.common.entity.primary")
                .persistenceUnit("primaryPersistenceUnit")
                .build();
    } @Autowired(required = false) private JpaProperties jpaProperties; private Map getVendorProperties(DataSource dataSource){ return jpaProperties.getHibernateProperties(dataSource);
    } @Primary
    @Bean(name = "transactionManagerPrimary") @Qualifier("transactionManagerPrimary")
    PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder){ return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());
    }

}

库二:

/**

 * @author youkun

 * @data 2018/7/22

 * jpa_多数据库自动生成表设置_

 */

@Configuration

@EnableTransactionManagement

@EnableJpaRepositories(

        entityManagerFactoryRef = "entityManagerFactory",

        transactionManagerRef = "transactionManagerSecondary",

        basePackages = {"com.tzbank.common.entity.secondary"})

public class JpaSecondaryConfig {

    @Autowired

    @Qualifier("secondaryDataSource")

    private DataSource secondaryDataSource;

    /**

     * jpa_设置_

     * @param builder

     * @return

     */

    @Bean(name="entityManager")

    @Qualifier("entityManager")

    public EntityManager entityManager(EntityManagerFactoryBuilder builder){

        return entityManagerFactorySecondary(builder).getObject().createEntityManager();

    }

 

    @Bean(name = "entityManagerFactory")

    @Qualifier("entityManagerFactory")

    public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(EntityManagerFactoryBuilder builder){

        return builder

                .dataSource(secondaryDataSource)

                .properties(getVendorProperties(secondaryDataSource))

                .packages("com.tzbank.common.entity.secondary")

                .persistenceUnit("secondaryPersistenceUnit")

                .build();

    }

    @Autowired

    private JpaProperties jpaProperties;

    private Map getVendorProperties(DataSource dataSource){

        return jpaProperties.getHibernateProperties(dataSource);

    }

    @Bean(name = "transactionManagerSecondary")

    @Qualifier("transactionManagerSecondary")

    PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder){

        return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());

    }

}

需要注意的:如果在启动保持entityManagerFactory****相关的错误我们只需把entityManagerFactoryRef 改成的 entityManagerFactory 同样 LocalContainerEntityManagerFactoryBean 中的这个的方法的bean的名称也需要改成一样的,

EnableJpaRepositories注解中basePackages 设置的是jpa中Respository所在的位置,因为我们项目中没有用到属于就设置的是实体所在的位置

LocalContainerEntityManagerFactoryBean 中的packages是实体所在的包

  1. mybatis设置

每一个库对应一个mybatis的配置类,默认的需要加上@Primary注解

如:库一

/**

 * @author youkun

 * @data 2018/7/22

 * mybatis_多数据设置_

 */

@Configuration

@MapperScan(value = "com.tzbank.common.dao.primary",sqlSessionTemplateRef = "sqlSessionTemplatePrimary")

public class MybatisPrimaryConfig {

    @Autowired

    @Qualifier("primaryDataSource")

    private DataSource primaryDataSource;

    @Bean

    @Primary

    @RefreshScope

    public SqlSessionFactory sqlSessionFactoryPrimary() throws Exception{

        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

        bean.setDataSource(primaryDataSource);

        _//_配置xml目录

        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

        bean.setMapperLocations(resolver.getResources("classpath*:mapperXML/primary/*.xml"));

        return bean.getObject();

    }

    @Bean

    @Primary

    @RefreshScope

    public SqlSessionTemplate sqlSessionTemplatePrimary(@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactory)throws Exception{

        return new SqlSessionTemplate(sqlSessionFactory);

    }

}

库二:

/**

 * @author youkun

 * @data 2018/7/22

 * mybatis_多数据设置_

 */

@Configuration

@MapperScan(value = "com.tzbank.common.dao.secondary",sqlSessionTemplateRef = "sqlSessionTemplateSecondary")

public class MybatisSecondaryConfig {

    @Autowired

    @Qualifier("secondaryDataSource")

    private DataSource secondaryDataSource;

    @Bean

    @RefreshScope

    public SqlSessionFactory sqlSessionFactorySecondary() throws Exception{

        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

        bean.setDataSource(secondaryDataSource);

        _//_配置xml目录

        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

        bean.setMapperLocations(resolver.getResources("classpath*:mapperXML/secondary/*.xml"));

        return bean.getObject();

    }

    @Bean

    @RefreshScope

    public SqlSessionTemplate sqlSessionTemplateSecondary(@Qualifier("sqlSessionFactorySecondary") SqlSessionFactory sqlSessionFactory)throws Exception{

        return new SqlSessionTemplate(sqlSessionFactory);

    }

}

需要注意的配置

@MapperScan注解中的value是dao所在的位置

SqlSessionFactory中的getResources是xml所在的位置
5.redis的配置(集群)

/**

 * redis 集群的配置

 */

@Configuration

public class RedisClusterConfig {

    @Component

    @ConfigurationProperties(prefix = "spring.redis.cluster")

    @Data

    @RefreshScope

    public class ClusterConfigurationProperties{

        List nodes;

    }

    @Bean

    @RefreshScope

    @Primary

    public RedisConnectionFactory connectionFactory(ClusterConfigurationProperties clusterConfigurationProperties){

        return  new JedisConnectionFactory(new RedisClusterConfiguration(clusterConfigurationProperties.getNodes()));

    }

}

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Stella981 Stella981
2年前
MyBatis基于Maven的入门
主要内容如下: 1.myBatis在maven中的配置 2.myBatis在工程中的config配置文件3.myBatis为Bean和表的映射文件4.myBatis基本的使用 myBatis在maven中的配置,在pom.xml中增加内容       1.增加依赖 ,mybatis的,还有mysql的驱动的
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
Mybatis useGeneratedKeys 填充自增主键值(使用Mysql)的原理分析
一、Mybatis配置<insertid"insert"parameterType"com.test.TestDO"keyProperty"id"useGeneratedKeys"true"useGeneratedKeys“true”时,mybatis会将自增ID值填充到TestDO对象中的id(
Stella981 Stella981
2年前
CAS 实现站内单点登录及实现第三方 OAuth、OpenId 登录(四)
一、OAuth配置1.配置OAuth提供商<bean id"weibo" class"com.buession.oauth.provider.impl.WeiboProvider"    <property name"key" value"the_key_for_
Stella981 Stella981
2年前
Redis相关配置
1、计量单位,大小写不敏感,配置redis内存。Noteonunits:whenmemorysizeisneeded,itispossibletospecifyitintheusualformof1k5GB4Mandsoforth:1k1000by
Stella981 Stella981
2年前
Maven使用 国内镜像配置
Maven使用国内镜像配置  Maven  setting.xml中配置<repositories<repository<idnexus</id<namelocalprivatenexus</name
Wesley13 Wesley13
2年前
spring+mybatis 根据业务场景访问不同数据库,读写分离
//配置文件<beanid"sqlSessionFactory1"class"org.mybatis.spring.SqlSessionFactoryBean"   <propertyname"dataSource"ref"DataSource1"/   <propertyname"configLocat
Stella981 Stella981
2年前
SpringBoot2.0之六 多环境配置
  开发过程中面对不同的环境,例如数据库、redis服务器等的不同,可能会面临一直需要修改配置的麻烦中,在以前的项目中,曾通过Tomcat的配置来实现,有的项目甚至需要手动修改相关配置,这种方式费时费力,出错的概率还极大,SpringBoot为我们提供了更加简单方便的配置方案来解决多环境的配置问题,下面我们看看怎么实现。一、新建一个项目(本文以上篇的代码
Stella981 Stella981
2年前
Spring Security使用详解3(基于数据库的用户角色配置)
之前的文章样例中,认证数据都是定义在内存里。而在真实项目中,用户的基本信息以及角色等都存储在数据库中,因此需要从数据库中获取数据进行认证。本文通过样例进行演示。三、基于数据库的用户角色配置1、添加依赖、配置数据库本次样例使用MyBatis来操作数据库,首先在项目中添加MyBatis相关依赖,并进行数据库连接配置。(1
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k