Spring Boot+Mybatis-Plus 다 중 데이터 원본 구현 방법
17253 단어 SpringBootMybatis-Plus다 중 데이터 원본
Mybatis-Plus
선언:이 항목 은 마스터 데이터 원본 과 local 데이터 원본 으로 나 뉜 다.master 데이터 원본 을 온라인 데이터 베이스 로 가정 하고 local 은 로 컬 데이터 베이스 입 니 다.다음 에 저 희 는 xx-job 방식 을 통 해 온라인(master)의 데 이 터 를 로 컬(local)에 동기 화 할 것 입 니 다.프로젝트 git 주 소 는 시간 을 내 서 프로젝트 를 git 창고 에 제출 하여 직접 복제 할 수 있 도록 합 니 다.
sql 파일 이 프로젝트 에 설치 되 어 있 습 니 다.데이터베이스 에 사용 되 는 my sql
프로젝트 생 성
내 가 사용 하 는 아이디어,정상적으로 spring boot 프로젝트 를 만 들 면 됩 니 다.
sql
-- master
CREATE DATABASE db_master;
USE db_master;
--
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT ' id',
username VARCHAR(20) NOT NULL COMMENT ' ',
pwd VARCHAR(50) NOT NULL COMMENT ' ',
phone CHAR(11) NOT NULL COMMENT ' ',
email VARCHAR(50) COMMENT ' ',
gender CHAR(1) COMMENT ' 1--> 0--> ',
age INT COMMENT ' ',
created_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
updated_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
deleted_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
type INT DEFAULT 1 COMMENT ' 1--> 2--> 3--> '
)ENGINE=INNODB;
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('supperAdmin','admin123','13000000000','[email protected]',1,20);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('admin','admin','13200840033','[email protected]',0,14);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('wanggang','wanggang','13880443322','[email protected]',1,36);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('xiaobao','xiaobao','18736450102','[email protected]',0,22);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('zhaoxing','zhaoxing','18966004400','[email protected]',1,29);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('chenyun','chenyun','13987613540','[email protected]',1,25);
INSERT INTO users(username,pwd,phone,email,gender,age) VALUES('ouyangruixue','ouyangruixue','15344773322','[email protected]',0,24);
-- local
CREATE DATABASE db_local;
USE db_local;
--
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT COMMENT ' id',
username VARCHAR(20) NOT NULL COMMENT ' ',
pwd VARCHAR(50) NOT NULL COMMENT ' ',
phone CHAR(11) NOT NULL COMMENT ' ',
email VARCHAR(50) COMMENT ' ',
gender CHAR(1) COMMENT ' 1--> 0--> ',
age INT COMMENT ' ',
created_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
updated_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
deleted_time TIMESTAMP NULL DEFAULT NULL COMMENT ' ',
type INT DEFAULT 1 COMMENT ' 1--> 2--> 3--> '
)ENGINE=INNODB;
--
CREATE TABLE local_test(
id INT PRIMARY KEY AUTO_INCREMENT,
str VARCHAR(20)
)ENGINE=INNODB;
INSERT INTO local_test(str) VALUES ('Hello');
INSERT INTO local_test(str) VALUES ('World');
INSERT INTO local_test(str) VALUES ('Mysql');
INSERT INTO local_test(str) VALUES ('^.^');
pom 파일현재 lombok,my batis-plus,my sql 관련 의존 만 도입 되 었 습 니 다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- Mybatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.ymlproperties 삭제,yml 생 성.사실 yml 이 든 properties 든 상관 없어 요.
server:
port: 8001
spring:
datasource:
master:
url: jdbc:mysql://localhost:3306/db_master?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
local:
url: jdbc:mysql://localhost:3306/db_local?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:mappers/*/*Mapper.xml
# , package
typeAliasesPackage: com.niuniu.sys.module
check-config-location: true
configuration:
# (camel case)
map-underscore-to-camel-case: true
#
cache-enabled: false
call-setters-on-nulls: true
# JdbcTypeForNull, oracle
jdbc-type-for-null: 'null'
#MyBatis NONE: ( ), WARNING: , FAILING: ,
auto-mapping-unknown-column-behavior: warning
global-config:
banner: false
db-config:
# 0:" ID ", 1:" ",2:" ID ( )", 3:" ID (idWorker), 4: ID (UUID), 5: ID (idWorker )";
id-type: auto
# IGNORED:" ", NOT_NULL:" NULL ", NOT_EMPTY:" ", DEFAULT , (1. NOT_NULL,2. )
field-strategy: NOT_EMPTY
#
capital-mode: true
#
logic-delete-value: 0
#
logic-not-delete-value: 1
pagehelper: #pagehelper
helperDialect: mysql #
reasonable: true
supportMethodsArguments: true
params: count=countSql
디 렉 터 리 구조이 항목 은 두 개의 데이터 원본 으로 나 뉘 기 때문이다.각 층 에서 master,local 을 각각 만 날 수 있 습 니 다.
: users , Users model
키 코드 config , master、local , ,
또한 이 프로젝트 는 my batis-plus 를 사용 하기 때문에 SqlSession Factory 를 만 들 때 MybatisSqlSession Factory Bean 을 사용 하여 bean 대상 을 만 드 십시오.로 컬 데이터 원본
package com.demo.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.demo.dao.local",
sqlSessionFactoryRef = "localSqlSessionFactory")
public class LocalDataSourceConfig {
@Value("${spring.datasource.local.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.local.url}")
private String url;
@Value("${spring.datasource.local.username}")
private String username;
@Value("${spring.datasource.local.password}")
private String password;
@Bean(name = "localDataSource")
public DataSource localDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setJdbcUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setMaximumPoolSize(10);
dataSource.setMinimumIdle(5);
dataSource.setPoolName("localDataSourcePool");
return dataSource;
}
/**
* local
*/
@Bean(name = "localSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
// Mybatis
bean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/local/*.xml"));
return bean.getObject();
}
@Bean(name = "localTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("localDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "localSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("localSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
마스터 데이터 원본
package com.demo.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.demo.dao.master",
sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Value("${spring.datasource.master.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.master.url}")
private String url;
@Value("${spring.datasource.master.username}")
private String username;
@Value("${spring.datasource.master.password}")
private String password;
@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setJdbcUrl(url);
dataSource.setDriverClassName(driverClassName);
dataSource.setMaximumPoolSize(10);
dataSource.setMinimumIdle(5);
dataSource.setPoolName("masterDataSource");
return dataSource;
}
/**
* master
*/
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/master/*.xml"));
return bean.getObject();
}
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "masterSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
부분 코드Users 실체 클래스
package com.demo.model;
import lombok.Data;
import java.util.Date;
@Data
public class Users {
private Integer id;
private String username;
private String pwd;
private String phone;
private String email;
private Integer gender;
private Integer age;
private Date created_time;
private Date updated_time;
private Date deleted_time;
private Integer type;
}
UsersMapper
package com.demo.dao.master;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.demo.model.Users;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UsersMapper extends BaseMapper<Users> {
}
UsersService
package com.demo.service.master;
import com.baomidou.mybatisplus.extension.service.IService;
import com.demo.model.Users;
public interface UsersService extends IService<Users> {
}
UsersServiceImpl
package com.demo.service.master.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.demo.dao.master.UsersMapper;
import com.demo.model.Users;
import com.demo.service.master.UsersService;
import org.springframework.stereotype.Service;
@Service
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements UsersService {
}
UsersController
package com.demo.controller.master;
import com.demo.model.Users;
import com.demo.service.master.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/master")
public class UsersController {
@Autowired
private UsersService userssService;
@RequestMapping("/users")
public List<Users> list() {
return userssService.list();
}
}
최종 프로젝트 구조실행 결과
이로써 Spring Boot+Mybatis-Plus 는 다 중 데이터 원본 의 실현 을 마 쳤 습 니 다.
마지막 으로 제 가 만난 구 덩이 를 조금 만 더 써 주세요.
1.master 와 local 에 같은 이름 의 파일 이 나타 나 지 않도록 합 니 다.
2.데이터 원본 설정 에서 SqlSession Factory Bean 을 MybatisSqlSession Factory Bean 으로 대체 합 니 다.
다음 편 은 xx-job 작업 스케줄 링 센터 를 중심 으로 xx-job 를 통 해 로 컬 라 이브 러 리 와 온라인 라 이브 러 리 의 정시 동기 화 를 실현 하 는 방법 을 소개 합 니 다.
Spring Boot+Mybatis-Plus 의 다 중 데이터 원본 구현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Spring Boot Mybatis-Plus 다 중 데이터 원본 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.