25 -SpringBoot學習(4)- 數據庫訪問(2)-多數據源

1 配置多數據源

1.1 分別在兩個數據庫建表

在這裏插入圖片描述

CREATE table user(
	id  int PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50),
	password VARCHAR(50),
	email VARCHAR(50),
  birthday TIMESTAMP
);

CREATE table customer(
	id  int PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
	tel VARCHAR(50)
);

1.2 配置文件

  • application.properties
#數據庫配置
spring.datasource.test1.url=jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf8&useSSL=false
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver


spring.datasource.test2.url=jdbc:mysql://localhost:3306/springboot_test2?characterEncoding=utf8&useSSL=false
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver

1.3 寫兩個數據源配置

在這裏插入圖片描述

package com.tzb.springboot.datasource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration//註解到springboot容器中
@MapperScan(basePackages="com.tzb.springboot.test1.mapper",sqlSessionFactoryRef="test1SqlSessionFactory")
public class DataSource01 {

    /**
     * @return 返回test1數據庫的數據源
     */
    @Bean(name="test1DataSource")
    @Primary//主數據源,一個應用只能有一個
    @ConfigurationProperties(prefix="spring.datasource.test1")
    public DataSource dateSource(){
        return DataSourceBuilder.create().build();
    }

    /**
     * @return 返回test1數據庫的會話工廠
     */
    @Bean(name = "test1SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("test1DataSource") DataSource ds) throws Exception{
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(ds);

        return bean.getObject();
    }

    /**
     * @return 返回test1數據庫的事務
     */
    @Bean(name = "test1TransactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * @return 返回test1數據庫的會話模版
     */
    @Bean(name = "test1SqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(
            @Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

package com.tzb.springboot.datasource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;

@Configuration//註解到springboot容器中
@MapperScan(basePackages="com.tzb.springboot.test2.mapper",sqlSessionFactoryRef="test2SqlSessionFactory")
public class DataSource02 {

    /**
     * @return 返回test2數據庫的數據源
     */
    @Bean(name="test2DataSource")
    @ConfigurationProperties(prefix="spring.datasource.test2")
    public DataSource dateSource(){
        return DataSourceBuilder.create().build();
    }

    /**
     * @return 返回test2數據庫的會話工廠
     */
    @Bean(name = "test2SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("test2DataSource") DataSource ds) throws Exception{
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(ds);

        return bean.getObject();
    }

    /**
     * @return 返回test2數據庫的事務
     */
    @Bean(name = "test2TransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * @return 返回test2數據庫的會話模版
     */
    @Bean(name = "test2SqlSessionTemplate")
    public SqlSessionTemplate sqlSessionTemplate(
            @Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

1.4 test1 Mapper&service

在這裏插入圖片描述

public interface UserMapper {
    @Insert("INSERT user (username,password) values (#{username},#{password})")
    public int save(@Param("username") String username, @Param("password") String password);
}
@Service
@Transactional
public class UserServiceImpl {

    @Autowired
    private UserMapper userMapper;

    public void register(String username, String password) {
        userMapper.save(username, password);
    }

}

1.5 test2 Mapper&service

public interface CustomerMapper {

    @Insert("INSERT customer (name,tel) values (#{name},#{tel})")
    public int save(@Param("name") String name, @Param("tel") String tel);
}
@Service
@Transactional
public class CustomerServiceImpl {

    @Autowired
    private CustomerMapper mapper;

    public void register(String name, String tel) {
        mapper.save(name, tel);
    }
}

1.6 控制器

@RestController
@RequestMapping("user")
public class UserController {

    @Autowired
    private UserServiceImpl userService;

    @Autowired
    private CustomerServiceImpl service;

    @RequestMapping("register")
    @ResponseBody // 返回的數據轉爲 json
    public String register(String username, String password) {
        userService.register(username, password);
        service.register(username,"120");
        return "SUCCESS";
    }
}


1.7 測試

@EnableAutoConfiguration
@ComponentScan(basePackages ={"com.tzb.springboot.datasource",
        "com.tzb.springboot.test1.service","com.tzb.springboot.test2.service"})
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章