SpringBoot使用分包方式拆分数据源

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36594703/article/details/81301518

1.首先pom.xml配置文件和上一篇整合mybatis的完全一样,直接拿过来用就可以了。

2.创建两个数据库test01和test02,一个数据库呢对应一个数据源这时候就不能使用默认的数据源了。

3.说下多数据源:例如公司分为两个数据库,一个数据库专门存放共同的配置文件,一个数据库垂直业务数据库,垂直是根据业务划分的,在一个项目中有多个数据源指不同库jdbc连接,多数据源划分可以分包划分(业务)、注解方式划分。

4.现在application.properties配置文件中写这两个数据源,注意前面配置的名字要小心:

spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test01
spring.datasource.test1.username=root
spring.datasource.test1.password=123456
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test02
spring.datasource.test2.username=root
spring.datasource.test2.password=123456
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver

5.创建两个包test01和test02,然后每个包里面包含mapper、service,以test01包下的文件为例,test02包下的一样只需要把1改为2.

UserMapperTest01.java:

@Mapper
public interface UserMapperTest01 {
	@Select("select * from user where name=#{name}")
	User findByName(@Param("name")String name);
	@Insert("insert into user(name,age) values(#{name},#{age})")
	int insert(@Param("name")String name,@Param("age")Integer age);
}

UserServiceTest01.java:

@Service
public class UserServiceTest01 {
	@Autowired
	private UserMapperTest01 userMapperTest01;
	public int insertUser(String name,Integer age) {
		int insertUserResult=userMapperTest01.insert(name, age);
		int i=1/age;
		System.out.println(insertUserResult);		
		//怎么验证事务开启成功
		return insertUserResult;
	}
}

6.创建两个datasource的配置文件,DataSource1Config.java和DataSource2Config.java,以1为例,2一样只需要把 1改为2.

@Configuration
@MapperScan(basePackages="com.itmayiedu.test01",sqlSessionFactoryRef="test1SqlSessionFactory")
public class DataSource1Config {
	@Bean(name="test1DataSource")
	@ConfigurationProperties(prefix="spring.datasource.test1")
	@Primary
	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);
		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) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

7.Controller层:

@RestController
public class MybatisMultiDataSourceController {
	@Autowired
	private UserServiceTest01 userServiceTest01;
	@Autowired
	private UserServiceTest02 userServiceTest02;
	@RequestMapping("/insertUserTest01")
	public Integer insertUserTest1(String name,Integer age) {
		return userServiceTest01.insertUser(name, age);
	}
	@RequestMapping("/insertUserTest02")
	public Integer insertUserTest2(String name,Integer age) {
		return userServiceTest02.insertUser(name, age);
	}
}

8.启动类:

@SpringBootApplication
//@MapperScan(basePackages= {"com.itmayiedu.test01.mapper"})
public class MyBatisApp01 {
	public static void main(String[] args) {
		SpringApplication.run(MyBatisApp01.class,args);
	}


 

猜你喜欢

转载自blog.csdn.net/qq_36594703/article/details/81301518