diff --git a/nladmin-system/README.md b/nladmin-system/README.md index dea0b8b..3b8b24c 100644 --- a/nladmin-system/README.md +++ b/nladmin-system/README.md @@ -1 +1,3 @@ # 诺力开发平台 +## 主从复制(Master-Slave Replication) + diff --git a/nladmin-system/doc/img.png b/nladmin-system/doc/img.png new file mode 100644 index 0000000..73cc05f Binary files /dev/null and b/nladmin-system/doc/img.png differ diff --git a/nladmin-system/nlsso-server/pom.xml b/nladmin-system/nlsso-server/pom.xml index 92dfc2c..7988986 100644 --- a/nladmin-system/nlsso-server/pom.xml +++ b/nladmin-system/nlsso-server/pom.xml @@ -32,6 +32,12 @@ + + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + 5.1.1 + com.dameng DmJdbcDriver18 @@ -76,11 +82,11 @@ 11.2.0.4 - - com.baomidou - dynamic-datasource-spring-boot-starter - 4.1.3 - + + + + + org.fusesource.jansi diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml index 5e418f1..0b088db 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application-dev.yml @@ -9,6 +9,12 @@ nl: username: root password: 12356 database: nl-platform + slave: + ip: 127.0.0.1 + port: 3306 + username: root + password: 12356 + database: nl_platform redis: ip: 127.0.0.1 port: 6379 diff --git a/nladmin-system/nlsso-server/src/main/resources/config/application.yml b/nladmin-system/nlsso-server/src/main/resources/config/application.yml index 38d4fa7..7677c51 100644 --- a/nladmin-system/nlsso-server/src/main/resources/config/application.yml +++ b/nladmin-system/nlsso-server/src/main/resources/config/application.yml @@ -12,62 +12,102 @@ spring: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure messages: basename: language/login/login,language/error/error,language/buss/buss,language/task/task - datasource: - druid: - initial-size: 5 #初始化时建立物理连接的个数 - min-idle: 15 #最小连接池数量 - maxActive: 30 #最大连接池数量 - maxWait: 3000 #获取连接时最大等待时间,单位毫秒 - #申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 - test-while-idle: true - time-between-eviction-runs-millis: 300000 #既作为检测的间隔时间又作为test-while-idle执行的依据 - min-evictable-idle-time-millis: 900000 #销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接 - #用来检测连接是否有效的sql - #mysql中为 select 'x' - #oracle中为 select 1 from dual - validation-query: SELECT 'x' - test-on-borrow: true #申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true - test-on-return: false #归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true - exception-sorter: true #当数据库抛出不可恢复的异常时,抛弃该连接 - pool-prepared-statements: true #是否缓存preparedStatement,mysql5.5+建议开启 - max-pool-prepared-statement-per-connection-size: 20 #当值大于20时poolPreparedStatements会自动修改为true - #通过connectProperties属性来打开mergeSql功能;慢SQL记录 - connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 -# use-global-data-source-stat: true #合并多个DruidDataSource的监控数据 - #filters通过别名的方式配置扩展插件,常用的插件有: - #监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall - filter: - stat: + shardingsphere: + datasource: + names: master,slave + master: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + # 是否自动回收超时连接 + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: enabled: true - # 记录慢SQL - log-slow-sql: true - slow-sql-millis: 1000 - merge-sql: true - wall: - config: - multi-statement-allow: true - #设置访问druid监控页面的拦截路径及账号和密码,默认没有 - stat-view-servlet: - enabled: true - url-pattern: /druid/* - login-username: admin - login-password: admin - dynamic: - primary: mysql - datasource: - mysql: - driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy - url: jdbc:log4jdbc:mysql://${DB_HOST:${nl.config.mysql.ip}}:${DB_PORT:${nl.config.mysql.port}}/${DB_NAME:${nl.config.mysql.database}}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true - username: ${DB_USER:${nl.config.mysql.username}} - password: ${DB_PWD:${nl.config.mysql.password}} - type: com.alibaba.druid.pool.DruidDataSource - druid: + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false filters: DruidFilter,stat - initial-size: 5 #初始化时建立物理连接的个数 - min-idle: 15 #最小连接池数量 - maxActive: 30 #最大连接池数量 - maxWait: 3000 #获取连接时最大等待时间,单位毫秒 + url: jdbc:mysql://${DB_HOST:${nl.config.mysql.ip}}:${DB_PORT:${nl.config.mysql.port}}/${DB_NAME:${nl.config.mysql.database}}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:${nl.config.mysql.username}} + password: ${DB_PWD:${nl.config.mysql.password}} + slave: + type: com.alibaba.druid.pool.DruidDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + # 初始连接数 + initial-size: 20 + # 最小连接数 + min-idle: 30 + # 最大连接数 + max-active: 300 + # 是否自动回收超时连接 + socket-timeout: 10 + query-time-out: 7 + transaction-query-timeout: 30 + # 获取连接超时时间 + max-wait: 4000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 60000 + # 连接在池中最小生存的时间 + min-evictable-idle-time-millis: 300000 + # 连接在池中最大生存的时间 + max-evictable-idle-time-millis: 900000 + # 指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除 + test-while-idle: true + # 指明是否在从池中取出连接前进行检验,如果检验失败, 则从池中去除连接并尝试取出另一个 + test-on-borrow: true + # 是否在归还到池中前进行检验 + test-on-return: false + # 检测连接是否有效 + validation-query: select 1 + # 配置监控统计 + webStatFilter: + enabled: true + stat-view-servlet: + enabled: true + url-pattern: /druid/* + reset-enable: false + filters: + DruidFilter,stat + url: jdbc:mysql://${DB_HOST:${nl.config.slave.ip}}:${DB_PORT:${nl.config.slave.port}}/${DB_NAME:${nl.config.slave.database}}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true + username: ${DB_USER:${nl.config.slave.username}} + password: ${DB_PWD:${nl.config.slave.password}} + rules: + readwrite-splitting: + data-sources: + db: + type: Static + props: + #接口有事务,读写分离不生效,默认全部使用主库 + write-data-source-name: master + read-data-source-names: slave + #负载均衡算法名称 + load-balancer-name: round-robin flyway: #开启 enabled: false