diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java index 87df35f7..5a41a2c6 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java @@ -18,5 +18,5 @@ public @interface DataSource /** * 切换数据源名称 */ - public String value() default "MASTER"; + public DataSourceType value() default DataSourceType.MASTER; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java index 71725968..4b5341d1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -10,5 +10,10 @@ public enum DataSourceType /** * 主库 */ - MASTER + MASTER, + + /** + * 从库 + */ + SLAVE } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java index b7ccfc10..c4eab3fb 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java @@ -43,7 +43,7 @@ public class DataSourceAspect if (StringUtils.isNotNull(dataSource)) { - DynamicDataSourceContextHolder.setDateSoureType(dataSource.value()); + DynamicDataSourceContextHolder.setDateSoureType(dataSource.value().name()); } try diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java index 91993e97..b4e9a522 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java @@ -1,7 +1,6 @@ package com.ruoyi.framework.config; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -9,64 +8,40 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import org.springframework.jdbc.core.BeanPropertyRowMapper; -import org.springframework.jdbc.core.JdbcTemplate; - -import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.framework.datasource.DynamicDataSource; -import com.ruoyi.framework.datasource.SysDatasource; /** - * 数据源配置类 + * druid 配置多数据源 * - * @author wangchl - * + * @author ruoyi */ @Configuration -public class DruidConfig { - - @Bean - @ConfigurationProperties("spring.datasource.druid.master") - public DataSource masterDataSource() { - return DruidDataSourceBuilder.create().build(); - } +public class DruidConfig +{ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource() + { + return DruidDataSourceBuilder.create().build(); + } - @Bean - @ConfigurationProperties("spring.datasource.druid.slave") - @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") - public DataSource slaveDataSource() { - return DruidDataSourceBuilder.create().build(); - } + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource() + { + return DruidDataSourceBuilder.create().build(); + } - /** - * - * @param masterDataSource - * @param slaveDataSource - * @return - */ - @Bean(name = "dynamicDataSource") - @Primary - public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) { - Map targetDataSources = new HashMap<>(); - // 设置数据源列表 - targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); - // 从数据库中直接读取数据库 - JdbcTemplate jdbcTemplate = new JdbcTemplate(masterDataSource); - List dsList = jdbcTemplate.query("select * from sys_datasource", new Object[] {}, - new BeanPropertyRowMapper(SysDatasource.class)); - if (dsList != null) { - for (SysDatasource ds : dsList) { - DruidDataSource dds = new DruidDataSource(); - dds.setUrl(ds.getUrl()); - dds.setUsername(ds.getUser()); - dds.setPassword(ds.getPwd()); - dds.setDriverClassName("com.mysql.cj.jdbc.Driver"); - // dds.setDbType(dbType); - targetDataSources.put(ds.getName(), dds); - } - } - return new DynamicDataSource(masterDataSource, targetDataSources); - } + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource, DataSource slaveDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + targetDataSources.put(DataSourceType.SLAVE.name(), slaveDataSource); + return new DynamicDataSource(masterDataSource, targetDataSources); + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/SysDatasource.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/SysDatasource.java deleted file mode 100644 index c81fe059..00000000 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/SysDatasource.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.ruoyi.framework.datasource; - -/** - * 动态数据源表 sys_datasource - * - * @author wangchl - * @date 2018-10-10 - */ -public class SysDatasource { - - /** ID */ - private String id; - /** 密码 */ - private String pwd; - /** 用户 */ - private String user; - /** 地址 */ - private String url; - /** 名称 */ - private String name; - - public void setId(String id) - { - this.id = id; - } - - public String getId() - { - return id; - } - public void setPwd(String pwd) - { - this.pwd = pwd; - } - - public String getPwd() - { - return pwd; - } - public void setUser(String user) - { - this.user = user; - } - - public String getUser() - { - return user; - } - public void setUrl(String url) - { - this.url = url; - } - - public String getUrl() - { - return url; - } - public void setName(String name) - { - this.name = name; - } - - public String getName() - { - return name; - } - -} diff --git a/sql/sys_datasource.sql b/sql/sys_datasource.sql deleted file mode 100644 index edbd0d46..00000000 --- a/sql/sys_datasource.sql +++ /dev/null @@ -1,38 +0,0 @@ -/* - Navicat Premium Data Transfer - - Source Server : 127.0.0.1 - Source Server Type : MySQL - Source Server Version : 50561 - Source Host : 127.0.0.1:3306 - Source Schema : ruoyi - - Target Server Type : MySQL - Target Server Version : 50561 - File Encoding : 65001 - - Date: 20/12/2018 11:48:21 -*/ - -SET NAMES utf8mb4; -SET FOREIGN_KEY_CHECKS = 0; - --- ---------------------------- --- Table structure for sys_datasource --- ---------------------------- -DROP TABLE IF EXISTS `sys_datasource`; -CREATE TABLE `sys_datasource` ( - `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT 'ID', - `pwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', - `user` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户', - `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'IP地址', - `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '库名称', - `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注' -) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '动态数据源' ROW_FORMAT = Compact; - --- ---------------------------- --- Records of sys_datasource --- ---------------------------- -INSERT INTO `sys_datasource` VALUES ('1', '123456', 'root', 'jdbc:mysql://127.0.0.1:3306/zwsd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true', 'zwsd', '掌握时代'); - -SET FOREIGN_KEY_CHECKS = 1;