From c740fd66932c62e9e48c98872a530613fa245192 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=86=B7=E5=86=B7?= Date: Mon, 1 Apr 2019 07:34:48 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=B7=BB=E5=8A=A0=E6=96=B0?= =?UTF-8?q?=E7=89=B9=E6=80=A7=E3=80=82=E6=94=AF=E6=8C=81=E5=A4=9A=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E5=AF=86=E7=A0=81=E5=8A=A0=E5=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/DynamicDataSourceConfig.java | 25 +++++++----- .../controller/SysDsConfController.java | 14 ++----- .../codegen/entity/SysDatasourceConf.java | 6 +-- .../service/SysDatasourceConfService.java | 14 +++++++ .../impl/SysDatasourceConfServiceImpl.java | 34 ++++++++++++++++ .../pigx/codegen/util/DataSourceConstant.java | 40 +++++++++++++++++++ 6 files changed, 109 insertions(+), 24 deletions(-) create mode 100644 pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/DataSourceConstant.java diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java index 7252f0fb7..41f175e25 100644 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java @@ -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 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> dbList = new JdbcTemplate(dds).queryForList(sql); + List> 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(); } - } \ No newline at end of file diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/controller/SysDsConfController.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/controller/SysDsConfController.java index 7d5f21fa2..57cbafe66 100755 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/controller/SysDsConfController.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/controller/SysDsConfController.java @@ -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)); } } diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/entity/SysDatasourceConf.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/entity/SysDatasourceConf.java index a66d82ece..218d8c969 100755 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/entity/SysDatasourceConf.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/entity/SysDatasourceConf.java @@ -47,15 +47,15 @@ public class SysDatasourceConf extends Model { */ private String name; /** - * + * jdbcurl */ private String url; /** - * + * 用户名 */ private String username; /** - * + * 密码 */ private String password; /** diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/SysDatasourceConfService.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/SysDatasourceConfService.java index d84446746..8a2100605 100755 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/SysDatasourceConfService.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/SysDatasourceConfService.java @@ -26,5 +26,19 @@ import com.pig4cloud.pigx.codegen.entity.SysDatasourceConf; * @date 2019-03-31 16:00:20 */ public interface SysDatasourceConfService extends IService { + /** + * 保存数据源并且加密 + * + * @param sysDatasourceConf + * @return + */ + Boolean saveDsByEnc(SysDatasourceConf sysDatasourceConf); + /** + * 更新数据源 + * + * @param sysDatasourceConf + * @return + */ + Boolean updateDsByEnc(SysDatasourceConf sysDatasourceConf); } diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/SysDatasourceConfServiceImpl.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/SysDatasourceConfServiceImpl.java index 36091f6a0..74e923eb3 100755 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/SysDatasourceConfServiceImpl.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/service/impl/SysDatasourceConfServiceImpl.java @@ -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 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(); + } } diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/DataSourceConstant.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/DataSourceConstant.java new file mode 100644 index 000000000..d69d719b3 --- /dev/null +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/util/DataSourceConstant.java @@ -0,0 +1,40 @@ +package com.pig4cloud.pigx.codegen.util; + +/** + * @author lengleng + * @date 2019-04-01 + *

+ * 数据源相关常量 + */ +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"; + +}