基于springboot+mybatisPlus,对两个不同服务器上的数据库中的数据进行CRUD,我自己使用的两个都是mysql数据库;db1为我自己的本地库,db2为阿里云服务器上的库,首先我们创建两张表;

在db1库中创建user表,建表语句如下:

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(64) DEFAULT NULL,`age` tinyint(2) DEFAULT NULL,`sex` tinyint(1) DEFAULT NULL COMMENT '0:女 1:男',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

然后在db2库中创建product表,建表语句如下:

CREATE TABLE `product` (`id` int(10) NOT NULL,`phone` bigint(11) DEFAULT NULL,`address` varchar(64) DEFAULT NULL,`email` varchar(32) DEFAULT NULL,`birth` date DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

创建完成后,新建一个springboot项目,创建好后导入Mybatis Plus Generator和mysql依赖

     <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.25</version></dependency>

除了导入 mybatis-plus-generator依赖外,还需要导入velocity模板,因为MP是按照这个模板来生成代码的。接着新建一个Generator类来生成我们所需要的文件:

public class Generator {public static void main(String[] args) {//1.创建generator对象AutoGenerator autoGenerator = new AutoGenerator();//2.配置数据源db1DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setDbType(DbType.MYSQL); //数据源类型为mysqldataSourceConfig.setUrl("jdbc:mysql://localhost:3306/db1?useSSL=false&useUnicode=true&characterEncoding=utf-8");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("密码");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");//配置数据源db2 ,dataSourceConfig.setDbType(DbType.MYSQL); //数据源类型为mysqldataSourceConfig.setUrl("jdbc:mysql://8.142.139.26:3306/db2?useSSL=false&useUnicode=true&characterEncoding=utf-8");dataSourceConfig.setUsername("用户名");dataSourceConfig.setPassword("你的密码");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");autoGenerator.setDataSource(dataSourceConfig);//3.全局配置(指明这些类生成的具体位置以及作者....)GlobalConfig globalConfig = new GlobalConfig();//这里填写要成的位置globalConfig.setOutputDir("D:\\javaProject\\sprng2db"+"/src/main/java");globalConfig.setOpen(false);//不打开文件globalConfig.setAuthor("gaoyj");//让service名字前面没有IglobalConfig.setServiceName("%Service");autoGenerator.setGlobalConfig(globalConfig);//4.设置包信息(生成的类放在哪个包里面)PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.solongyj");packageConfig.setModuleName("generator");packageConfig.setController("controller");packageConfig.setService("service");packageConfig.setServiceImpl("service.impl");packageConfig.setEntity("entity");autoGenerator.setPackageInfo(packageConfig);//5.配置策略StrategyConfig strategyConfig = new StrategyConfig();//提供lombokstrategyConfig.setEntityLombokModel(true);//支持驼峰strategyConfig.setNaming(NamingStrategy.underline_to_camel);strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);autoGenerator.setStrategy(strategyConfig);//6.执行autoGenerator.execute();}

先执行db1,然后把数据库配置修改为db2的内容,再操作一次,执行完毕后结构如下:

然后是两个数据源的配置类,db1的配置类代码如下:

@Configuration
@MapperScan(basePackages = "com.solongyj.demo.mapper.db1", sqlSessionTemplateRef  = "db1SqlSessionTemplate")
public class DataSourceDb1config {/*** 获取映射文件所在的路径*/@Value("${mybatis.db1.mapper-locations}")private String db1tMapperPath;/*** 数据源加载** @return*/@Bean(name = "db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.db1.druid")public DataSource test1DataSource() {return DataSourceBuilder.create().build();}/*** 注入SqlSessionFactory,指定数据源和映射文件路径** @param dataSource* @return* @throws Exception*/@Bean(name = "db1SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(dataSource);Resource[] resources = new PathMatchingResourcePatternResolver().getResources(db1tMapperPath);bean.setMapperLocations(resources);return bean.getObject();}/*** 注入DataSourceTransactionManager事物管理器** @param dataSource* @return*/@Bean(name = "db1TransactionManager")public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}/*** @param sqlSessionFactory* @return* @throws Exception*/@Bean(name = "db1SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}
}

db2配置类代码:

@Configuration
@MapperScan(basePackages = "com.solongyj.demo.mapper.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate")
public class DataSourceDb2Config {/*** 获取映射文件所在的路径*/@Value("${mybatis.db2.mapper-locations}")private String db2tMapperPath;/*** 数据源加载** @return*/@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2.druid")public DataSource test1DataSource() {return DataSourceBuilder.create().build();}/*** 注入SqlSessionFactory,指定数据源和映射文件路径** @param dataSource* @return* @throws Exception*/@Bean(name = "db2SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();bean.setDataSource(dataSource);Resource[] resources = new PathMatchingResourcePatternResolver().getResources(db2tMapperPath);bean.setMapperLocations(resources);return bean.getObject();}/*** 注入DataSourceTransactionManager事物管理器** @param dataSource* @return*/
//    @Bean(name = "db2TransactionManager")public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}/*** @param sqlSessionFactory* @return* @throws Exception*/@Bean(name = "db2SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}

application.yml中配置

server:port: 8089
#配置数据源,db1&db2
spring:datasource:db1:druid:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://localhost:3306/db1?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=trueusername: rootpassword: rootdb2:druid:driver-class-name: com.mysql.cj.jdbc.Driverjdbc-url: jdbc:mysql://ip:port/db2?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=trueusername: 你的用户名password: 你的密码# xml文件映射路径
mybatis:db1:mapper-locations: classpath:mapper/db1/*.xmldb2:mapper-locations: classpath:mapper/db2/*.xmllogging:level:com.solongyj.demo: debug

配置完成后进行一个简单的测试,在user表数据插入成功后再执行product表数据的插入

@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Autowiredprivate UserMapper userMapper;@Autowiredprivate ProductMapper productMapper;@Overridepublic void addUser(User user) {log.info("db1数据开始插入");int userRow = userMapper.insert(user);//这里在插入user成功后进行db2中的product的插入,这些数据全都随机生成if (userRow != 0) {log.info("db1数据插入成功");Product product = new Product();product.setPhone(RandomUtil.getPhone());product.setAddress(RandomUtil.getAddress());product.setEmail(RandomUtil.getEmail(6, 9));product.setBirth(new Date());log.info("db2数据开始插入");int prodRow = productMapper.insert(product);if (prodRow != 0) {log.info("db1和db2数据插入成功");}}}
}

其中user数据我们以json格式传进来,product数据我写了一个随机生成中文姓名,性别,Email,手机号,住址的工具类,其代码如下:

/*** 随机生成中文姓名,性别,Email,手机号,住址** @author solongyj* @date 2022/3/29*/
public class RandomUtil {public static String base = "abcdefghijklmnopqrstuvwxyz0123456789";private static String firstName = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹郜喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闵席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀";private static String girl = "珍贞莉桂娣叶璧璐娅琦晶妍茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇姬舒影荔枝思丽 ";private static String boy = "杰彦涛昌强成康星光天达安岩中茂进林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘";private static String[] address = "北京路,南京路,上海路,郑州路,杭州路,福州路,兰州路,哈尔滨路,长春路,沈阳路,成都路,重庆路,济南路,西安路,银川路,太原路,合肥路,南昌路,广州路,海南路,台北路,贵州路,昆明路".split(",");private static final String[] email_suffix = "@gmail.com,@qq.com,@163.com,@sina.com,@sohu.com".split(",");public static int getNum(int start, int end) {return (int) (Math.random() * (end - start + 1) + start);}/*** 返回Email** @param lMin 最小长度* @param lMax 最大长度* @return*/public static String getEmail(int lMin, int lMax) {int length = getNum(lMin, lMax);StringBuffer sb = new StringBuffer();for (int i = 0; i < length; i++) {int number = (int) (Math.random() * base.length());sb.append(base.charAt(number));}sb.append(email_suffix[(int) (Math.random() * email_suffix.length)]);return sb.toString();}/*** 返回手机号码*/private static String[] telFirst = "135,136,138,139,150,151,152,159,156,133,153".split(",");public static Long getPhone() {int index = getNum(0, telFirst.length - 1);String first = telFirst[index];String second = String.valueOf(getNum(1, 888) + 10000).substring(1);String third = String.valueOf(getNum(1, 9100) + 10000).substring(1);return Long.valueOf(first + second + third);}/*** 返回中文姓名*/private static String name_sex = "";public static String getChineseName() {int index = getNum(0, firstName.length() - 1);String first = firstName.substring(index, index + 1);int sex = getNum(0, 1);String str = boy;int length = boy.length();if (sex == 0) {str = girl;length = girl.length();name_sex = "女";} else {name_sex = "男";}index = getNum(0, length - 1);String second = str.substring(index, index + 1);int hasThird = getNum(0, 1);String third = "";if (hasThird == 1) {index = getNum(0, length - 1);third = str.substring(index, index + 1);}return first + second + third;}/*** 返回地址** @return*/public static String getAddress() {int index = getNum(0, address.length - 1);String first = address[index];String second = String.valueOf(getNum(11, 150)) + "号";String third = "-" + getNum(1, 20) + "-" + getNum(1, 10);return first + second + third;}}

总体结构如下图

在controller层调用UserService的addUser方法,然后启动该项目,因为配置的端口号是8089,所以在测试时地址为http://localhost:8089/addUser

如图

经测试,db1和db2都可以成功插入数据。

以上就是关于java对两个不同服务器上的数据库中的数据进行的简单的数据新增,同理,三个以及多个数据源操作也可按照该方法进行配置;

代码我已上传到gitee,感兴趣的小伙伴可以看一看:https://gitee.com/solongyj/spring2db.git

java项目配置双数据源,对两个不同服务器上的数据库中的数据进行CRUD相关推荐

  1. 使用两个dateTimePicker 根据日期区间查询数据库中的数据

    数据库中的数据形式为XXXX年XX月XX日 1.在数据库中创建一个提取数字的方法: IF OBJECT_ID('DBO.GET_NUMBER') IS NOT NULL DROP FUNCTION D ...

  2. maven java项目 配置双数据库(多数据库配置)

    前言 为什么要配置双数据库或者多数据库. 当你需要从两个或多个数据库进行获取数据库表的数据或者插入数据,每个数据库的数据库驱动(driver),url路径,用户名(username).密码(passw ...

  3. java项目配置多数据源

    有些web应用需要连接多个数据源,本文讲解一下如何使用多个数据源,大题思路是这样的,系统启动的时候创建多个数据源,然后具体执行sql的时候去切换数据源执行对应的sql.如何切换数据源呢?spring提 ...

  4. SSM项目_配置双数据源

    近日项目中因为涉及到一个需求是A系统某表的数据要与B系统的某表数据在数据上出现不一致的情况,需要做一个数据比对功能,这时候就涉及到两个系统的数据库的数据比对. 方案一,将A系统的数据导出到Excel文 ...

  5. mybatis多数据源配置_随笔:springboot+mybatis 配置双数据源

    山石彦 | 作者 urlify.cn/vQzIne | 来源 最近工作中有用到双数据源,一个项目(中台)中需要操作两个不同的数据库.当时考虑到了两种方式, 1.通过http请求访问(A项目访问d1数据 ...

  6. SpringMVC+Mybatis+Maven搭建 简单配置双数据源

    POM.xml引包常用的 mybatis  以及 mybatis-spting  spring-webmvc log4j spring-jdbc servler-api spring-jdbc < ...

  7. java项目打jar包的两种情况

    java项目打jar包的两种情况 本文介绍一下java项目打jar包时的两种情况各怎么操作 方法/步骤 1.  1 一.java项目没有导入第三方jar包 这时候打包就比较简单: 1.  首先在Ecl ...

  8. SpringBoot+SpringDataJpa配置双数据源SqlServer和Mysql

    有时候项目中会遇到需要配置双数据源的情况,到SpringBoot2.0版本后和之前配置双数据源的方法有些区别,这里我用的SpringBoot版本是2.0.3,废话不多说,给出主要步骤: 一.项目依赖p ...

  9. bpmn 文件 服务器部署,Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题...

    Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 Java项目activiti BpmnModel生成的流程图,部署服务器乱码问题 项目中需要前端查看流程的情况,所以需 ...

  10. eclipse给mysql修改表数据_Eclipse中java向数据库中添加数据,更新数据,删除数据...

    ASP.NET网页动态添加.更新或删除数据行 看过此篇 http://www.cnblogs.com/insus/p/3247935.html的网友,也许明白Insus.NET是怎样实现动态添加数据行 ...

最新文章

  1. 版本记录及相关数据汇总
  2. 一图弄懂ARM中都有什么
  3. textContent、innerHTML、innerText、outerText、outerHTML、nodeValue使用场景和区别
  4. mysql gone away 测试_python测试开发django-58.MySQL server has gone away错误的解决办法
  5. 经典C语言程序100例之七六
  6. 11.15 dmidecode:查询系统硬件信息
  7. IOS开发之小实例--UIImagePickerController
  8. 〖前端开发〗HTML/CSS基础知识学习笔记
  9. Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允
  10. CSS3实现多样的边框效果
  11. SQLServer安装挂起解决方法
  12. 在git上push代码时缺少Change-Id
  13. 3.13下午 名词动化例句运用,拉丁词汇掌握
  14. UCloud基于Linux内核新特性的下一代外网网关设计及相关开源工作
  15. Mac新手技巧,如何使用 Safari 浏览器?
  16. Mac上的文件拖拽增强工具space drop如何使用?
  17. 阿拉伯数字金额转换为汉语大写
  18. python png 背景透明_去除白色背景得到透明背景png的示例代码
  19. virtualbox导入虚拟机(ubuntu)
  20. jmeter安装成功后打不开,提示:Cause: CannotResolveClassException: com.blazemeter.jmeter.threads.concurrency.Conc

热门文章

  1. 一图看懂ADSL拨号服务器
  2. 渗透之代理小知识--
  3. java中alt_eclipse中alt+/的作用
  4. 基于C#实现卫星坐标计算与单点定位
  5. 扒一扒 ScheduledThreadPoolExecutor
  6. 在c语言中是闰年的条件为,C语言如何判断是闰年,闰年判断条件?
  7. Flink案例代码,面试题
  8. 浅析计算机用户身份识别技术,(浅析身份认证技术.doc
  9. html+css基础教程学习之css连接
  10. cocos2d-x-3.4-025-仿霍比特人3五军之战片尾动画