package com.xiaoxie.dds.service.impl;
import com.alibaba.druid.pool.DruidDataSource;
import com.xiaoxie.dds.domain.Ds;
import com.xiaoxie.dds.domain.dto.DsDto;
import com.xiaoxie.dds.manager.DynamicDataSourceManager;
import com.xiaoxie.dds.mapper.DsMapper;
import com.xiaoxie.dds.service.DsService;
import com.xiaoxie.dds.utils.AESUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@Service
@RequiredArgsConstructor
public class DsServiceImpl implements DsService {
private final DynamicDataSourceManager dynamicDataSourceManager;
private final Map<Object, Object> dataSourceMap = new ConcurrentHashMap<>();
@Value("${crypto.secret}")
private String secretKey;
private final DsMapper dsMapper;
@Override
public List<Ds> selectByName(String name) {
return dsMapper.selectByName(name);
}
@Override
public boolean testConnection(DsDto dsDto) {
try {
String password = AESUtils.decrypt(dsDto.getPassword(), secretKey);
return testConnectDB(dsDto.getUrl(), dsDto.getUsername(), password);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 添加数据源
* @param dsDto
* @return
*/
@Override
@Transactional
public boolean addDs(DsDto dsDto){
//1、把数据库连接信息保存到数据库
Ds ds = new Ds();
BeanUtils.copyProperties(dsDto, ds);
ds.setCreateTime(new Date());
dsMapper.insertSelective(ds);
//2、动态添加新的数据源
try {
String password = AESUtils.decrypt(dsDto.getPassword(), secretKey);
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(dsDto.getUrl());
dataSource.setUsername(dsDto.getUsername());
dataSource.setPassword(password);
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSourceMap.put(dsDto.getName(), dataSource);
dynamicDataSourceManager.setTargetDataSources(dataSourceMap);
dynamicDataSourceManager.afterPropertiesSet();
} catch (Exception e) {
throw new RuntimeException(e);
}
return true;
}
/**
* 切换数据源
* @param dataSourceName
*/
@Override
public void switchDataSource(String dataSourceName) {
DynamicDataSourceManager.setDataSource(dataSourceName);
}
@Override
public void clearDataSource() {
DynamicDataSourceManager.clearDataSource();
}
@Override
public List<Ds> selectAll() {
return dsMapper.selectAll();
}
/**
* 测试数据库是否可连接
* @param url
* @param username
* @param password
* @return
*/
private boolean testConnectDB(String url, String username, String password) {
try{
Connection connection = DriverManager.getConnection(url, username, password);
return connection != null && !connection.isClosed();
} catch (Exception e) {
return false;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoo中Mybatis多数据源动态切换
共48个文件
java:17个
xml:13个
meta:5个
0 下载量 144 浏览量
2024-11-27
22:06:19
上传
评论
收藏 80KB RAR 举报
温馨提示
SpringBoo中Mybatis多数据源动态切换
资源推荐
资源详情
资源评论
收起资源包目录
dds.rar (48个子文件)
dds
HELP.md 2KB
mvnw.cmd 7KB
pom.xml 3KB
.gitattributes 38B
src
test
java
com
xiaoxie
dds
DdsApplicationTests.java 213B
main
resources
mapper
TestMapper.xml 348B
DsMapper.xml 4KB
templates
add_source.html 2KB
images
static
js
add_source.js 6KB
jquery-3.6.0.min.js 87KB
crypto-js-4.1.1.min.js 47KB
css
style.css 746B
application.yml 418B
java
com
xiaoxie
dds
mapper
TestMapper.java 220B
DsMapper.java 605B
controller
TestController.java 1KB
AddSourceController.java 2KB
utils
AESUtils.java 1017B
service
impl
DsServiceImpl.java 4KB
DsService.java 424B
manager
DynamicDataSourceManager.java 1KB
DataSourceInitializer.java 2KB
DdsApplication.java 314B
domain
Ds.java 623B
dto
DsDto.java 203B
resp
ResultData.java 2KB
ReturnCode.java 615B
Test.java 137B
config
DataSourceConfig.java 2KB
.mvn
wrapper
maven-wrapper.properties 951B
.idea
jarRepositories.xml 1KB
dataSources
a1661d57-c886-46d9-8763-2f9a8ee062fe.xml 41KB
a1661d57-c886-46d9-8763-2f9a8ee062fe
storage_v2
_src_
schema
performance_schema.kIw0nw.meta 76B
sys.zb4BAA.meta 61B
information_schema.FNRwLQ.meta 76B
mysql.osA4Bg.meta 63B
dds.84MBAA.meta 58B
dataSources.local.xml 1018B
uiDesigner.xml 9KB
workspace.xml 5KB
misc.xml 539B
dataSources.xml 968B
compiler.xml 767B
.gitignore 0B
encodings.xml 265B
free-mybatis-generator-config.xml 1KB
mvnw 10KB
.gitignore 395B
共 48 条
- 1
资源评论
xiaoxie_advent
- 粉丝: 178
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- bdwptqmxgj11.zip
- onnxruntime-win-x86
- onnxruntime-win-x64-gpu-1.20.1.zip
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 首次尝试使用 Win,DirectX C++ 中的形状渲染套件.zip
- 预乘混合模式是一种用途广泛的三合一混合模式 它已经存在很长时间了,但似乎每隔几年就会被重新发现 该项目包括使用预乘 alpha 的描述,示例和工具 .zip
- 项目描述 DirectX 引擎支持版本 9、10、11 库 Microsoft SDK 功能相机视图、照明、加载网格、动画、蒙皮、层次结构界面、动画控制器、网格容器、碰撞系统 .zip
- 项目 wiki 文档中使用的代码教程的源代码库.zip
- 面向对象的通用GUI框架.zip
- 基于Java语言的PlayerBase游戏角色设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功