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);
}
}