spring boot mybatis 多数据源

不多说,直接上代码

application.properties
spring.datasource.dev.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dev.username=root
spring.datasource.dev.password=root
spring.datasource.dev.jdbc-url=jdbc\:mysql\://ip\:3306/dev?autoReconnect\=true\&failOverReadOnly\=false&characterEncoding\=utf8

spring.datasource.dev1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dev1.username=root
spring.datasource.dev1.password=root
spring.datasource.dev1.jdbc-url=jdbc\:mysql\://ip\:3306/dev1?autoReconnect\=true\&failOverReadOnly\=false&characterEncoding\=utf8

创建config包,创建相应的配置文件
DataSourseConfig.java

@Configuration这个注解不能缺少,缺少了不起作用。
@Primary //第一个使用此注解,此后其他配置类删除此注解

/**
 * @author john
 * @date 2019/2/21
 */
@Configuration
@MapperScan(basePackages = "com.test.dao.dev",sqlSessionTemplateRef = "testSqlSessionTemplate")
public class DataSourseConfig {
    @Bean(name = "testDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dev")
    @Primary
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "testSqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("testDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //使用注解,所以注掉此行,使用xml开启这行
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/dev/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "testTransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("testDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "testSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("testSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
DataSourse1Config.java

@Primary 删除,只有第一个配置要添加

/**
 * @author john
 * @date 2019/2/21
 */
@Configuration 
@MapperScan(basePackages = "com.test.dao.dev1",sqlSessionTemplateRef = "test1SqlSessionTemplate")
public class DataSourse1Config {
    @Bean(name = "test1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.dev1")
    public DataSource testDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test1SqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/dev1/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "test1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
创建dao包,分dev和dev1

只粘贴一个dao类作为实例。

/**
 * @author john
 * @date 2019/2/21
 */
public interface TestDao {
    /**
     * 查询
     * @param keyword
     * @return
     * @throws Exception
     */
    @Select("select * from t_test where keyword like #{keyword}")
    List<TestBean> select(@Param("keyword")String keyword)throws Exception;

    /**
     * 更新url
     * @param url
     * @param id
     * @return
     * @throws Exception
     */
    @Update("update t_test set url=#{url} where id =#{id}")
    int update(@Param("url")String url,@Param("id")long id)throws Exception;
}

启动类

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class EmotionApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(EmotionApplication.class, args);
    }
}

TestService

/**
 * @author john
 * @date 2019/2/21
 */
@Component
public class EmotionService {

    @Autowired
    TestDao testDao;

    public void init(Map<String,String> map)throws Exception{
        testDao.update("http://",12);
           System.out.println("="+keyword+"查询结果保存完成");
            
    }
}
Spring Boot结合MyBatis使用多数据源(Multiple Data Sources)通常是为了支持应用需要同时连接并操作多个数据库的情况,比如事务隔离、读写分离等场景。在Spring Boot项目中配置多数据源,你需要做以下几个步骤: 1. 添依赖:在你的`pom.xml`文件中添Spring Cloud Config和Spring FMT的依赖,以及针对每个数据源的JDBC驱动。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> ``` 2. 配置数据源:在`application.properties`或`application.yml`中分别配置两个数据源,如`spring.datasource.master`和`spring.datasource.slave`。 3. 创建DataSource bean:使用@Configuration注解创建一个@Configuration类,并使用@Bean方法定义多个DataSource bean,给每个bean指定对应的数据源配置。 ```java @Configuration public class DataSourceConfig { @Bean(name = "masterDataSource") @ConfigurationProperties(prefix = "spring.datasource.master") public DataSource masterDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "slaveDataSource") @ConfigurationProperties(prefix = "spring.datasource.slave") public DataSource slaveDataSource() { return DataSourceBuilder.create().build(); } } ``` 4. 使用@Profile选择数据源:通过`@Profile("production")`或`@Profile({"dev", "test"}`来切换使用哪个数据源。这样,在运行时可以根据环境变量自动切换到相应的数据源。 5. MyBatis的配置:在MyBatis的配置文件中,你可以使用`sqlSessionFactory`的`dataSource`属性,指向对应的DataSource bean。 6. 数据访问层:在DAO层,注入对应的DataSource或SqlSessionTemplate,然后根据业务需求选择合适的数据源执行查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值