springboot整合mybatis和springdataJpa多数据源查询数据配置

springboot整合mybatis和springdataJpa多数据源查询数据配置

大家好,因为近期项目中有用到操作多个数据库的时候,我项目中持久层框架是mybatis和sprngdataJpa所以在使用到这两个框架的时候,我这里配置了两套操作多个数据库的配置分别是mybatis和jpa。

1.mybatis配置

1.首先在yml文件中配置数据库连接

spring:
  datasource:
    test1:
        jdbc-url: jdbc:mysql://localhost:3306/test1?serverTimezone=CTT&useUnicode=true&characterEncoding=utf8
        driverClassName: com.mysql.cj.jdbc.Driver
        username: root
        password: xxx
    test2:
        jdbc-url: jdbc:mysql://localhost:3306/test2?serverTimezone=CTT&useUnicode=true&characterEncoding=utf8
        driverClassName: com.mysql.cj.jdbc.Driver
        username: root
        password: xxx

2.新建mybatis配置类两个

@Configuration
//com.dxl.springboot.mapper.test1表示在这个包下的所以mapper中的sql都使用当前的这个数据源去操作数据库
//sqlSessionFactoryRef :起一个当前这个数据源的SqlSessionFactory名字
@MapperScan(basePackages = "com.alice.springboot.mapper.test1", sqlSessionFactoryRef = "dataSource-1-SqlSessionFactory")
public class MybatisDataSourceConfig1 {
 
    // 将这个对象放入Spring容器中
    @Bean(name = "dataSource-1")
    // 表示这个数据源是默认数据源
    @Primary
    // 读取application.properties中的配置参数映射成为一个对象
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource getDateSource1()
    {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "dataSource-1-SqlSessionFactory")
    @Primary
    public SqlSessionFactory test1SqlSessionFactory(@Qualifier("dataSource-1") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test1/*.xml"));
        return bean.getObject();
    }

@Configuration
//com.dxl.springboot.mapper.test2表示在这个包下的所以mapper中的sql都使用当前的这个数据源去操作数据库
//sqlSessionFactoryRef :起一个当前这个数据源的SqlSessionFactory名字
@MapperScan(basePackages = "com.alice.springboot.mapper.test2", sqlSessionFactoryRef = "dataSource-2-SqlSessionFactory")
public class MybatisDataSourceConfig2 {
 
    // 将这个对象放入Spring容器中
    @Bean(name = "dataSource-2")
    // prefix表示参数的前缀
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource getDateSource2()
    {
        return DataSourceBuilder.create().build();
    }
 
    @Bean(name = "dataSource-2-SqlSessionFactory")
    public SqlSessionFactory test2SqlSessionFactory(@Qualifier("dataSource-2") DataSource datasource)
            throws Exception
    {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(datasource);
        bean.setMapperLocations(
                // 设置mybatis的xml所在位置
                new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/test2/*.xml"));
        return bean.getObject();
    }

2.Jpa配置

1.首先在yml文件中配置数据库连接

spring:
  datasource:
    test1:
        jdbc-url: jdbc:mysql://localhost:3306/test1?serverTimezone=CTT&useUnicode=true&characterEncoding=utf8
        driverClassName: com.mysql.cj.jdbc.Driver
        username: root
        password: xxx
    test2:
        jdbc-url: jdbc:mysql://localhost:3306/test2?serverTimezone=CTT&useUnicode=true&characterEncoding=utf8
        driverClassName: com.mysql.cj.jdbc.Driver
        username: root
        password: xxx

2.创建两个jap的配置类

basePackages = {“com.springboot.jpa.dxl.dao1”}) 这个配置改成自己的dao包名字

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "JpaDataSourceEntityManagerFactory-1", transactionManagerRef = "JpaDataSourceTransactionManager-1", basePackages = {"com.springboot.jpa.dxl.dao1"})
public class JpaDataSourceConfig1 {

    @Primary
    @Bean(name = "jpaDataSource-1")
    @ConfigurationProperties(prefix = "spring.datasource.test1")
    public DataSource customerDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "JpaDataSourceEntityManagerFactory-1")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("jpaDataSource-1") DataSource dataSource) {
    //packages("com.springboot.jpa.dxl.pojo") 这个配置改成自己的实体类包路径
    //sistenceUnit("persistenceUnit-1") 起个名字不能重复
        return builder.dataSource(dataSource).packages("com.springboot.jpa.dxl.pojo").persistenceUnit("persistenceUnit-1").build();
    }

    @Primary
    @Bean(name = "JpaDataSourceTransactionManager-1")
    public PlatformTransactionManager customerTransactionManager(@Qualifier("JpaDataSourceTransactionManager-1") EntityManagerFactory customerEntityManagerFactory) {
        return new JpaTransactionManager(customerEntityManagerFactory);
    }
}
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "JpaDataSourceEntityManagerFactory-2", transactionManagerRef = "JpaDataSourceTransactionManager-2", basePackages = {"com.springboot.jpa.dxl.dao2"})
public class JpaDataSourceConfig2 {

    @Primary
    @Bean(name = "jpaDataSource-2")
    @ConfigurationProperties(prefix = "spring.datasource.test2")
    public DataSource customerDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "JpaDataSourceEntityManagerFactory-2")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("jpaDataSource-2") DataSource dataSource) {
    //packages("com.springboot.jpa.dxl.pojo") 这个配置改成自己的实体类包路径
    //sistenceUnit("persistenceUnit-2") 起个名字不能重复
        return builder.dataSource(dataSource).packages("com.springboot.jpa.dxl.pojo").persistenceUnit("persistenceUnit-2").build();
    }

    @Primary
    @Bean(name = "JpaDataSourceTransactionManager-1")
    public PlatformTransactionManager customerTransactionManager(@Qualifier("JpaDataSourceTransactionManager-2") EntityManagerFactory customerEntityManagerFactory) {
        return new JpaTransactionManager(customerEntityManagerFactory);
    }
}

好了经过上面的配置项目中就可以使用多数据源进行对数据库的操作了,操作的时候如果想用哪个数据源就把对应的dao中的那个接口注入到代码中就可以使用了。

有什么不懂的小伙伴可以留言,记得点赞哦~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合Mybatis配置JNDI数据源的方法如下: 1. 在application.properties或application.yml文件中,配置JNDI数据源的相关信息。例如,可以使用以下配置: ``` spring.datasource.jndi-name=jndi/oscardb ``` 2. 在Mybatis配置文件中,指定Mapper文件的位置。例如,可以使用以下配置: ``` mybatis.mapper-locations=classpath:mapper/*.xml ``` 3. 在Spring Boot的启动类中,添加`@MapperScan`注解来扫描Mapper接口。例如,可以使用以下配置: ``` @SpringBootApplication @MapperScan("com.example.mapper") public class Application { public static void main(String\[\] args) { SpringApplication.run(Application.class, args); } } ``` 4. 在Spring Boot配置类中,使用`@Bean`注解配置JNDI数据源。例如,可以使用以下配置: ``` @Configuration public class DataSourceConfig { @Bean public DataSource dataSource() throws NamingException { JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); jndiObjectFactoryBean.setJndiName("java:comp/env/jdbc/数据库名"); jndiObjectFactoryBean.afterPropertiesSet(); return (DataSource) jndiObjectFactoryBean.getObject(); } } ``` 通过以上步骤,你可以在Spring Boot中成功配置JNDI数据源并整合Mybatis。 #### 引用[.reference_title] - *1* [springboot + mybatis + jndi](https://blog.csdn.net/jiandong06/article/details/108659673)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot整合MybatisPlus多数据源](https://blog.csdn.net/qq_37284798/article/details/129279732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Spring整合mybatis配置JNDI数据源](https://blog.csdn.net/mwx523037520036/article/details/127700054)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值