✨ 添加新特性。支持多数据源密码加密
This commit is contained in:
1 parent
04d0b833ca
commit
c740fd6693
6 files changed
+109
-24
No files matched your search
+15
-10
@@ -1,8 +1,11 @@
|
||||
package com.pig4cloud.pigx.codegen.config;
|
||||
|
||||
import com.mysql.cj.jdbc.Driver;
|
||||
import com.pig4cloud.pigx.codegen.util.DataSourceConstant;
|
||||
import com.zaxxer.hikari.HikariDataSource;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -30,6 +33,7 @@ import java.util.Optional;
|
||||
public class DynamicDataSourceConfig implements TransactionManagementConfigurer {
|
||||
private final Map<Object, Object> dataSourceMap = new HashMap<>(8);
|
||||
private final DataSourceProperties dataSourceProperties;
|
||||
private final StringEncryptor stringEncryptor;
|
||||
|
||||
@Bean("dynamicDataSource")
|
||||
public DynamicDataSource dataSource() {
|
||||
@@ -56,17 +60,18 @@ public class DynamicDataSourceConfig implements TransactionManagementConfigurer
|
||||
dds.setUsername(dataSourceProperties.getUsername());
|
||||
dds.setPassword(dataSourceProperties.getPassword());
|
||||
|
||||
String sql = "select * from sys_datasource_conf where del_flag = '0' ";
|
||||
List<Map<String, Object>> dbList = new JdbcTemplate(dds).queryForList(sql);
|
||||
List<Map<String, Object>> dbList = new JdbcTemplate(dds).queryForList(DataSourceConstant.QUERY_DS_SQL);
|
||||
log.info("开始 -> 初始化动态数据源");
|
||||
Optional.of(dbList).ifPresent(list -> list.forEach(db -> {
|
||||
log.info("数据源:{}", db.get("name"));
|
||||
log.info("数据源:{}", db.get(DataSourceConstant.DS_NAME));
|
||||
HikariDataSource ds = new HikariDataSource();
|
||||
ds.setJdbcUrl(String.valueOf(db.get("url")));
|
||||
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
|
||||
ds.setUsername(String.valueOf(db.get("username")));
|
||||
ds.setPassword(String.valueOf(db.get("password")));
|
||||
dataSourceMap.put(db.get("id"), ds);
|
||||
ds.setJdbcUrl(String.valueOf(db.get(DataSourceConstant.DS_JDBC_URL)));
|
||||
ds.setDriverClassName(Driver.class.getName());
|
||||
ds.setUsername((String) db.get(DataSourceConstant.DS_NAME));
|
||||
|
||||
String decPwd = stringEncryptor.decrypt((String) db.get(DataSourceConstant.DS_USER_PWD));
|
||||
ds.setPassword(decPwd);
|
||||
dataSourceMap.put(db.get(DataSourceConstant.DS_ROUTE_KEY), ds);
|
||||
}));
|
||||
|
||||
log.info("完毕 -> 初始化动态数据源,共计 {} 条", dataSourceMap.size());
|
||||
@@ -75,11 +80,12 @@ public class DynamicDataSourceConfig implements TransactionManagementConfigurer
|
||||
/**
|
||||
* 重新加载数据源配置
|
||||
*/
|
||||
public void reload() {
|
||||
public Boolean reload() {
|
||||
init();
|
||||
DynamicDataSource dataSource = dataSource();
|
||||
dataSource.setTargetDataSources(dataSourceMap);
|
||||
dataSource.afterPropertiesSet();
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,5 +99,4 @@ public class DynamicDataSourceConfig implements TransactionManagementConfigurer
|
||||
return txManager();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+3
-11
@@ -18,7 +18,6 @@ package com.pig4cloud.pigx.codegen.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.pig4cloud.pigx.codegen.config.DynamicDataSourceConfig;
|
||||
import com.pig4cloud.pigx.codegen.entity.SysDatasourceConf;
|
||||
import com.pig4cloud.pigx.codegen.service.SysDatasourceConfService;
|
||||
import com.pig4cloud.pigx.common.core.util.R;
|
||||
@@ -37,7 +36,6 @@ import org.springframework.web.bind.annotation.*;
|
||||
@AllArgsConstructor
|
||||
@RequestMapping("/dsconf")
|
||||
public class SysDsConfController {
|
||||
private final DynamicDataSourceConfig dynamicDataSourceConfig;
|
||||
private final SysDatasourceConfService sysDatasourceConfService;
|
||||
|
||||
/**
|
||||
@@ -83,9 +81,7 @@ public class SysDsConfController {
|
||||
@SysLog("新增数据源表")
|
||||
@PostMapping
|
||||
public R save(@RequestBody SysDatasourceConf sysDatasourceConf) {
|
||||
sysDatasourceConfService.save(sysDatasourceConf);
|
||||
dynamicDataSourceConfig.reload();
|
||||
return new R<>();
|
||||
return new R<>(sysDatasourceConfService.saveDsByEnc(sysDatasourceConf));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -97,9 +93,7 @@ public class SysDsConfController {
|
||||
@SysLog("修改数据源表")
|
||||
@PutMapping
|
||||
public R updateById(@RequestBody SysDatasourceConf sysDatasourceConf) {
|
||||
sysDatasourceConfService.updateById(sysDatasourceConf);
|
||||
dynamicDataSourceConfig.reload();
|
||||
return new R<>();
|
||||
return new R<>(sysDatasourceConfService.updateDsByEnc(sysDatasourceConf));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,9 +105,7 @@ public class SysDsConfController {
|
||||
@SysLog("删除数据源表")
|
||||
@DeleteMapping("/{id}")
|
||||
public R removeById(@PathVariable Integer id) {
|
||||
sysDatasourceConfService.removeById(id);
|
||||
dynamicDataSourceConfig.reload();
|
||||
return new R<>();
|
||||
return new R<>(sysDatasourceConfService.removeById(id));
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -47,15 +47,15 @@ public class SysDatasourceConf extends Model<SysDatasourceConf> {
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
*
|
||||
* jdbcurl
|
||||
*/
|
||||
private String url;
|
||||
/**
|
||||
*
|
||||
* 用户名
|
||||
*/
|
||||
private String username;
|
||||
/**
|
||||
*
|
||||
* 密码
|
||||
*/
|
||||
private String password;
|
||||
/**
|
||||
|
||||
+14
@@ -26,5 +26,19 @@ import com.pig4cloud.pigx.codegen.entity.SysDatasourceConf;
|
||||
* @date 2019-03-31 16:00:20
|
||||
*/
|
||||
public interface SysDatasourceConfService extends IService<SysDatasourceConf> {
|
||||
/**
|
||||
* 保存数据源并且加密
|
||||
*
|
||||
* @param sysDatasourceConf
|
||||
* @return
|
||||
*/
|
||||
Boolean saveDsByEnc(SysDatasourceConf sysDatasourceConf);
|
||||
|
||||
/**
|
||||
* 更新数据源
|
||||
*
|
||||
* @param sysDatasourceConf
|
||||
* @return
|
||||
*/
|
||||
Boolean updateDsByEnc(SysDatasourceConf sysDatasourceConf);
|
||||
}
|
||||
+34
@@ -16,10 +16,14 @@
|
||||
*/
|
||||
package com.pig4cloud.pigx.codegen.service.impl;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.pig4cloud.pigx.codegen.config.DynamicDataSourceConfig;
|
||||
import com.pig4cloud.pigx.codegen.entity.SysDatasourceConf;
|
||||
import com.pig4cloud.pigx.codegen.mapper.SysDatasourceConfMapper;
|
||||
import com.pig4cloud.pigx.codegen.service.SysDatasourceConfService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
@@ -29,6 +33,36 @@ import org.springframework.stereotype.Service;
|
||||
* @date 2019-03-31 16:00:20
|
||||
*/
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class SysDatasourceConfServiceImpl extends ServiceImpl<SysDatasourceConfMapper, SysDatasourceConf> implements SysDatasourceConfService {
|
||||
private final DynamicDataSourceConfig dynamicDataSourceConfig;
|
||||
private final StringEncryptor stringEncryptor;
|
||||
|
||||
/**
|
||||
* 保存数据源并且加密
|
||||
*
|
||||
* @param sysDatasourceConf
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean saveDsByEnc(SysDatasourceConf sysDatasourceConf) {
|
||||
sysDatasourceConf.setPassword(stringEncryptor.encrypt(sysDatasourceConf.getPassword()));
|
||||
this.baseMapper.insert(sysDatasourceConf);
|
||||
return dynamicDataSourceConfig.reload();
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新数据源
|
||||
*
|
||||
* @param sysDatasourceConf
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateDsByEnc(SysDatasourceConf sysDatasourceConf) {
|
||||
if (StrUtil.isNotBlank(sysDatasourceConf.getPassword())) {
|
||||
sysDatasourceConf.setPassword(stringEncryptor.encrypt(sysDatasourceConf.getPassword()));
|
||||
}
|
||||
this.baseMapper.updateById(sysDatasourceConf);
|
||||
return dynamicDataSourceConfig.reload();
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.pig4cloud.pigx.codegen.util;
|
||||
|
||||
/**
|
||||
* @author lengleng
|
||||
* @date 2019-04-01
|
||||
* <p>
|
||||
* 数据源相关常量
|
||||
*/
|
||||
public interface DataSourceConstant {
|
||||
/**
|
||||
* 查询数据源的SQL
|
||||
*/
|
||||
String QUERY_DS_SQL = "select * from sys_datasource_conf where del_flag = 0";
|
||||
|
||||
/**
|
||||
* 动态路由KEY
|
||||
*/
|
||||
String DS_ROUTE_KEY = "id";
|
||||
|
||||
/**
|
||||
* 数据源名称
|
||||
*/
|
||||
String DS_NAME = "name";
|
||||
|
||||
/**
|
||||
* jdbcurl
|
||||
*/
|
||||
String DS_JDBC_URL = "url";
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
String DS_USER_NAME = "username";
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
String DS_USER_PWD = "password";
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user