springboot使用mybatisplus+hikari数据库连接池如何代码实现两个数据库之间的某些表的数据共享,五分钟刷新一次,后端代码怎么写
时间: 2024-04-30 18:23:44 浏览: 146
1. 配置数据源和数据库连接池
首先,在application.properties(或application.yml)文件中配置两个数据源和对应的数据库连接池,例如:
```
# 第一个数据源
spring.datasource.ds1.jdbc-url=jdbc:mysql://localhost:3306/ds1?useSSL=false&serverTimezone=UTC
spring.datasource.ds1.username=root
spring.datasource.ds1.password=123456
spring.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
# 第二个数据源
spring.datasource.ds2.jdbc-url=jdbc:mysql://localhost:3306/ds2?useSSL=false&serverTimezone=UTC
spring.datasource.ds2.username=root
spring.datasource.ds2.password=123456
spring.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据库连接池
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
```
2. 配置MybatisPlus和MapperScan
在启动类中配置MybatisPlus和MapperScan,例如:
```
@SpringBootApplication
@MapperScan(basePackages = {"com.example.mapper"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
// 配置MybatisPlus
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
@Bean
public SqlSessionFactory sqlSessionFactory(@Qualifier("ds1") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
sqlSessionFactory.setPlugins(mybatisPlusInterceptor());
return sqlSessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
// 配置MapperScan
@Bean(name = "ds1")
@ConfigurationProperties(prefix = "spring.datasource.ds1")
public DataSource ds1() {
return new HikariDataSource();
}
@Bean(name = "ds2")
@ConfigurationProperties(prefix = "spring.datasource.ds2")
public DataSource ds2() {
return new HikariDataSource();
}
}
```
3. 编写Mapper和Service
接下来,可以编写Mapper和Service来操作数据库表,例如:
```
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
// 查询ds1数据库中的用户表
public List<User> getUserListFromDs1() {
return userMapper.getUserList();
}
// 查询ds2数据库中的用户表
public List<User> getUserListFromDs2() {
return userMapper.getUserList2();
}
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 查询ds1数据库中的用户表
@Select("SELECT * FROM user")
List<User> getUserList();
// 查询ds2数据库中的用户表
@Select("SELECT * FROM user")
List<User> getUserList2();
}
```
4. 定时任务实现数据共享
最后,可以使用Spring的定时任务来实现数据共享,例如:
```
@Service
public class DataShareService {
@Autowired
private UserService userService;
@Scheduled(cron = "0 0/5 * * * ?")
public void shareData() {
List<User> userListFromDs1 = userService.getUserListFromDs1();
List<User> userListFromDs2 = userService.getUserListFromDs2();
// TODO: 将数据从ds1数据库同步到ds2数据库中
// TODO: 将数据从ds2数据库同步到ds1数据库中
}
}
```
在定时任务中,可以使用UserService的方法来获取数据库表中的数据,然后进行数据同步操作。具体的同步操作可以根据业务需求来实现。
阅读全文