【快速使用ShardingJDBC的哈希分片策略进行分库分表】
文章目录
- 🔊博主介绍
- 🥤本文内容
- 🍊1.引入maven依赖
- 🍊2.启动类上添加注解@MapperScan
- 🍊3.添加application.properties配置
- 🍊4.普通的自定义实体类
- 🍊5.写个测试类验证一下
- 🍊6.控制台打印的日志
- 🍊7.观察一下数据库的数据
- 🍊8.maven的setting文件
- 📢文章总结
- 📥博主目标
🔊博主介绍
🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文专业写手、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。🌎跑过十五公里、🚀徒步爬过衡山、🔥有过三个月减肥20斤的经历、是个喜欢躺平的狠人。
📕拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCould、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RockerMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。
📙有过从0到1的项目高并发项目开发与管理经验,对JVM调优、MySQL调优、Redis调优 、ElasticSearch调优、消息中间件调优、系统架构调优都有着比较全面的实战经验。
📘有过云端搭建服务器环境,自动化部署CI/CD,弹性伸缩扩容服务器(最高200台),了解过秒级部署(阿里云的ACK和华为云的云容器引擎CCE)流程,能独立开发和部署整个后端服务,有过分库分表的实战经验。
🎥经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧,与清华大学出版社签下了四本书籍的合约,并将陆续在明年出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码–沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋能够多多支持!
文章目录
- 🔊博主介绍
- 🥤本文内容
- 🍊1.引入maven依赖
- 🍊2.启动类上添加注解@MapperScan
- 🍊3.添加application.properties配置
- 🍊4.普通的自定义实体类
- 🍊5.写个测试类验证一下
- 🍊6.控制台打印的日志
- 🍊7.观察一下数据库的数据
- 🍊8.maven的setting文件
- 📢文章总结
- 📥博主目标
📚前面提到过【快速使用ShardingJDBC的哈希分片策略进行分表】,接下来就需要对其进行分库了。
🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。
💡在这个美好的时刻,本人不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。
🥤本文内容

🍊1.引入maven依赖
在pom.xml中添加依赖
<!-- Maven 构建配置 -->
<build><!-- 插件列表 --><plugins><!-- Maven 编译插件 --><plugin><!-- 插件所在 groupId --><groupId>org.apache.maven.plugins</groupId><!-- 插件所在 artifactId --><artifactId>maven-compiler-plugin</artifactId><!-- 插件配置 --><configuration><!-- 源码编译版本 --><source>8</source><!-- 目标编译版本 --><target>8</target></configuration></plugin></plugins>
</build><!-- Maven 依赖管理配置 -->
<dependencyManagement><!-- 依赖列表 --><dependencies><!-- Spring Boot 依赖管理 --><dependency><!-- 依赖所在 groupId --><groupId>org.springframework.boot</groupId><!-- 依赖所在 artifactId --><artifactId>spring-boot-dependencies</artifactId><!-- 依赖版本 --><version>2.3.1.RELEASE</version><!-- 依赖类型 --><type>pom</type><!-- 依赖范围 --><scope>import</scope></dependency></dependencies>
</dependencyManagement><!-- 项目依赖列表 -->
<dependencies><!-- 分库分表组件 Sharding JDBC --><dependency><!-- 依赖所在 groupId --><groupId>org.apache.shardingsphere</groupId><!-- 依赖所在 artifactId --><artifactId>sharding-jdbc-spring-boot-starter</artifactId><!-- 依赖版本 --><version>4.1.1</version></dependency><!-- Spring Boot 核心依赖 --><dependency><!-- 依赖所在 groupId --><groupId>org.springframework.boot</groupId><!-- 依赖所在 artifactId --><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot 测试依赖 --><dependency><!-- 依赖所在 groupId --><groupId>org.springframework.boot</groupId><!-- 依赖所在 artifactId --><artifactId>spring-boot-starter-test</artifactId></dependency><!-- 数据源连接池组件 Druid --><dependency><!-- 依赖所在 groupId --><groupId>com.alibaba</groupId><!-- 依赖所在 artifactId --><artifactId>druid</artifactId><!-- 依赖版本 --><version>1.1.22</version></dependency><!-- MySQL 驱动依赖 --><dependency><!-- 依赖所在 groupId --><groupId>mysql</groupId><!-- 依赖所在 artifactId --><artifactId>mysql-connector-java</artifactId></dependency><!-- MyBatis-Plus 集成依赖 --><dependency><!-- 依赖所在 groupId --><groupId>com.baomidou</groupId><!-- 依赖所在 artifactId --><artifactId>mybatis-plus-boot-starter</artifactId><!-- 依赖版本 --><version>3.0.5</version></dependency>
</dependencies>
🍊2.启动类上添加注解@MapperScan
扫描对应的mapper路径
@MapperScan("com.example.shardingDemo.mapper")
@SpringBootApplication
public class ShardingJDBCApplication {public static void main(String[] args) {SpringApplication.run(ShardingJDBCApplication.class,args);}
}
🍊3.添加application.properties配置
# 哈希分片策略分库分表
# 设置数据源名称为 m1
spring.shardingsphere.datasource.names=m1,m2
# 设置数据源类型为 Druid 数据源
spring.shardingsphere.datasource.m1.type=com.alibaba.druid.pool.DruidDataSource
# 设置数据源驱动为 MySQL 的 JDBC 驱动
spring.shardingsphere.datasource.m1.driver-class-name=com.mysql.cj.jdbc.Driver
# 设置数据源连接 URL,连接本地 MySQL 数据库的 userdb 库
spring.shardingsphere.datasource.m1.url=jdbc:mysql://192.168.122.128:3306/masterdemo?serverTimezone=GMT%2B8
# 设置连接数据库所需的用户名和密码
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=bfb8f36cc2616995
# 设置数据源名称为 m2
spring.shardingsphere.datasource.m2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.m2.url=jdbc:mysql://192.168.122.128:3306/masterdemo2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=bfb8f36cc2616995
# 设置分片表的实际数据节点,对应两个数据表:m1.t_user_1 和 m1.t_user_2
spring.shardingsphere.sharding.tables.user.actual-data-nodes=m$->{1..2}.t_user_$->{1..2}
# 设置分片键为 user_id
spring.shardingsphere.sharding.tables.user.key-generator.column=user_id
# 设置分布式 ID 生成算法为 SNOWFLAKE 算法,worker ID 为 1
spring.shardingsphere.sharding.tables.user.key-generator.type=SNOWFLAKE
# Spring Boot 应用配置项:ShardingSphere 分库分表配置之课程表的主键生成策略配置项,属性名: worker.id,属性值: 1 (表示该应用程序所使用的 Snowflake 算法的工作节点 ID 为 1)
spring.shardingsphere.sharding.tables.user.key-generator.props.worker.id=1
# 设置分表算法为 inline 分片算法,分片列为 user_id,分片规则为课程编号为奇数的记录在 m1.t_user_1 表中,课程编号为偶数的记录在 m1.t_user_2 表中
spring.shardingsphere.sharding.tables.user.table-strategy.inline.sharding-column=user_id
# table-strategy.inline:表示使用内联表达式的分片策略。lgorithm-expression:表示表名生成算法表达式。t_user_$->{user_id%2+1}:表示生成的表名,即t_user_后面接下标为(user_id%2+1)的表。
# user_id是表中的一个自增主键,%2表示对2取余数,+1表示取余结果加1,即user_id值为偶数进入到t_user_1表,user_id值为奇数进入到t_user_2表。
spring.shardingsphere.sharding.tables.user.table-strategy.inline.algorithm-expression=t_user_$->{user_id%2+1}
# 使用 Spring 和 ShardingSphere 进行数据库分片,将 user 表根据 user_id 字段进行分片,数据库策略为 inline,即使用算法表达式进行分片
spring.shardingsphere.sharding.tables.user.database-strategy.inline.sharding-column=user_id
# 用户 ID 对2取余再加1,结果为1或2,根据结果选择数据库 m1 或 m2 进行存储
spring.shardingsphere.sharding.tables.user.database-strategy.inline.algorithm-expression=m$->{user_id%2+1}
# 设置 SQL 显示开启,方便调试
spring.shardingsphere.props.sql.show=true
# 允许覆盖 Bean 定义,用于调试时快速更新配置
spring.main.allow-bean-definition-overriding=true
🍊4.普通的自定义实体类
import lombok.Data;
@Data
public class User {private int userId;private String userName;private String status;private int age;
}
🍊5.写个测试类验证一下
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.shardingDemo.entity.Course;
import com.example.shardingDemo.entity.Dict;
import com.example.shardingDemo.entity.User;
import com.example.shardingDemo.mapper.CourseMapper;
import com.example.shardingDemo.mapper.DictMapper;
import com.example.shardingDemo.mapper.UserMapper;
import org.apache.shardingsphere.api.hint.HintManager;
import org.junit.Test;
import org.junit.jupiter.api.Tags;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;@RunWith(SpringRunner.class)
@SpringBootTest
public class ShardingJDBCTest {@ResourceCourseMapper courseMapper;@ResourceDictMapper dictMapper;@ResourceUserMapper userMapper;@Testpublic void addUser(){for(int i = 0 ; i < 10 ; i ++){User user = new User();user.setUserId(i);user.setUserName("张三"+i);user.setAge(i);user.setStatus("1");userMapper.insert(user);}}
}
🍊6.控制台打印的日志
. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.3.1.RELEASE)2023-11-08 19:05:14.284 INFO 20848 --- [ main] c.e.a.ShardingJDBCTest : Starting ShardingJDBCTest on WIN-20230222ULN with PID 20848 (started by Administrator in E:\WarkSpace\基础篇书籍\第8章\apache-shardingsphere-demo)
2023-11-08 19:05:14.285 INFO 20848 --- [ main] c.e.a.ShardingJDBCTest : No active profile set, falling back to default profiles: default
2023-11-08 19:05:14.668 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'stringToNoneShardingStrategyConfigurationConverter' of type [org.apache.shardingsphere.spring.boot.converter.StringToNoneShardingStrategyConfigurationConverter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.675 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.sharding-org.apache.shardingsphere.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.678 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.masterslave-org.apache.shardingsphere.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.680 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.encrypt-org.apache.shardingsphere.shardingjdbc.spring.boot.encrypt.SpringBootEncryptRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.encrypt.SpringBootEncryptRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.682 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere.shadow-org.apache.shardingsphere.shardingjdbc.spring.boot.shadow.SpringBootShadowRuleConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.shadow.SpringBootShadowRuleConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.685 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'spring.shardingsphere-org.apache.shardingsphere.shardingjdbc.spring.boot.common.SpringBootPropertiesConfigurationProperties' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.common.SpringBootPropertiesConfigurationProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.811 INFO 20848 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration' of type [org.apache.shardingsphere.shardingjdbc.spring.boot.SpringBootConfiguration$$EnhancerBySpringCGLIB$$bfc54c27] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2023-11-08 19:05:14.990 INFO 20848 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} inited
2023-11-08 19:05:15.410 INFO 20848 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-2} inited
2023-11-08 19:05:15.462 INFO 20848 --- [ main] o.a.s.core.log.ConfigurationLogger : ShardingRuleConfiguration:
tables:user:actualDataNodes: m$->{1..2}.t_user_$->{1..2}databaseStrategy:inline:algorithmExpression: m$->{user_id%2+1}shardingColumn: user_idkeyGenerator:column: user_idprops:worker.id: '1'type: SNOWFLAKElogicTable: usertableStrategy:inline:algorithmExpression: t_user_$->{user_id%2+1}shardingColumn: user_id2023-11-08 19:05:15.462 INFO 20848 --- [ main] o.a.s.core.log.ConfigurationLogger : Properties:
sql.show: 'true'2023-11-08 19:05:15.471 INFO 20848 --- [ main] ShardingSphere-metadata : Loading 1 logic tables' meta data.
2023-11-08 19:05:15.520 INFO 20848 --- [ main] ShardingSphere-metadata : Meta data load finished, cost 58 milliseconds._ _ |_ _ _|_. ___ _ | _
| | |\/|_)(_| | |_\ |_)||_|_\ / | 3.0.5
2023-11-08 19:05:15.618 WARN 20848 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.Course.
2023-11-08 19:05:15.687 WARN 20848 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.Dict.
2023-11-08 19:05:15.699 WARN 20848 --- [ main] c.b.m.core.toolkit.TableInfoHelper : Warn: Could not find @TableId in Class: com.example.apacheshardingspheredemo.entity.User.
2023-11-08 19:05:15.786 INFO 20848 --- [ main] c.e.a.ShardingJDBCTest : Started ShardingJDBCTest in 1.657 seconds (JVM running for 2.159)
2023-11-08 19:05:16.150 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.150 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@63e70bf9), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@63e70bf9, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[0, 张三0, 1, 0])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[0])])
2023-11-08 19:05:16.150 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_user_1 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [0, 张三0, 1, 0]
2023-11-08 19:05:16.171 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.171 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@67dc6b48), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@67dc6b48, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[1, 张三1, 1, 1])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[1])])
2023-11-08 19:05:16.171 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m2 ::: INSERT INTO t_user_2 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [1, 张三1, 1, 1]
2023-11-08 19:05:16.174 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.174 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@11cadb32), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@11cadb32, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[2, 张三2, 1, 2])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[2])])
2023-11-08 19:05:16.174 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_user_1 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [2, 张三2, 1, 2]
2023-11-08 19:05:16.177 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.178 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@704c3bdf), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@704c3bdf, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[3, 张三3, 1, 3])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[3])])
2023-11-08 19:05:16.178 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m2 ::: INSERT INTO t_user_2 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [3, 张三3, 1, 3]
2023-11-08 19:05:16.181 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.181 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@605eb072), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@605eb072, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[4, 张三4, 1, 4])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[4])])
2023-11-08 19:05:16.181 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_user_1 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [4, 张三4, 1, 4]
2023-11-08 19:05:16.184 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.184 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@43fd77d8), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@43fd77d8, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[5, 张三5, 1, 5])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[5])])
2023-11-08 19:05:16.184 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m2 ::: INSERT INTO t_user_2 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [5, 张三5, 1, 5]
2023-11-08 19:05:16.187 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.187 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@32ba5c65), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@32ba5c65, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[6, 张三6, 1, 6])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[6])])
2023-11-08 19:05:16.187 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_user_1 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [6, 张三6, 1, 6]
2023-11-08 19:05:16.191 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.191 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5d96d434), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5d96d434, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[7, 张三7, 1, 7])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[7])])
2023-11-08 19:05:16.191 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m2 ::: INSERT INTO t_user_2 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [7, 张三7, 1, 7]
2023-11-08 19:05:16.195 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.195 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@13dd7887), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@13dd7887, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[8, 张三8, 1, 8])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[8])])
2023-11-08 19:05:16.195 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m1 ::: INSERT INTO t_user_1 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [8, 张三8, 1, 8]
2023-11-08 19:05:16.199 INFO 20848 --- [ main] ShardingSphere-SQL : Logic SQL: INSERT INTO user ( user_id,
user_name,
status,
age ) VALUES ( ?,
?,
?,
? )
2023-11-08 19:05:16.199 INFO 20848 --- [ main] ShardingSphere-SQL : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@538aa83f, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@44de8e00), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@44de8e00, columnNames=[user_id, user_name, status, age], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=65, stopIndex=65, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=68, stopIndex=68, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=71, stopIndex=71, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=74, stopIndex=74, parameterMarkerIndex=3)], parameters=[9, 张三9, 1, 9])], generatedKeyContext=Optional[GeneratedKeyContext(columnName=user_id, generated=false, generatedValues=[9])])
2023-11-08 19:05:16.199 INFO 20848 --- [ main] ShardingSphere-SQL : Actual SQL: m2 ::: INSERT INTO t_user_2 ( user_id,
user_name,
status,
age ) VALUES (?, ?, ?, ?) ::: [9, 张三9, 1, 9]
2023-11-08 19:05:16.207 INFO 20848 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closing ...
2023-11-08 19:05:16.208 INFO 20848 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} closed
2023-11-08 19:05:16.209 INFO 20848 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-2} closing ...
2023-11-08 19:05:16.209 INFO 20848 --- [extShutdownHook] com.alibaba.druid.pool.DruidDataSource : {dataSource-2} closed
Disconnected from the target VM, address: '127.0.0.1:53866', transport: 'socket'Process finished with exit code 0
🍊7.观察一下数据库的数据
masterdemo.t_user_1表的数据如图下所示:

可以发现masterdemo库的t_user_1表的user_id都是偶数,masterdemo库的t_user_2表没有数据。
masterdemo2.course_2表的数据如图下所示:

可以发现masterdemo2库的t_user_2表的user_id都是奇数,masterdemo2库的t_user_1表没有数据。
🍊8.maven的setting文件
为了避免部分同学下载依赖包不一致导致maven依赖下载不下来,我这里给上自己的配置文件,代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Maven 的配置文件 -->
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0http://maven.apache.org/xsd/settings-1.1.0.xsd"><!-- 设置本地仓库的路径 --><localRepository>D:\Java\ReMaven</localRepository><!-- 设置镜像 --><mirrors><mirror><id>central</id><url>https://repo1.maven.org/maven2/</url><mirrorOf>*</mirrorOf></mirror><!-- 定义一个镜像 --><!-- <mirror><id>aliyunmaven</id> <name>Alibaba Maven Mirror</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>--><mirror><id>aliyunmaven</id><!-- 镜像的id --><mirrorOf>*</mirrorOf><!-- 镜像代理的仓库id,这里将中央仓库的地址替换为阿里云的地址 --><name>阿里云公共仓库</name><!-- 镜像的名称 --><url>https://maven.aliyun.com/repository/public</url><!-- 镜像的地址 --></mirror></mirrors><!-- 设置代理 --><proxies></proxies><!-- 设置私有仓库的认证信息 --><servers></servers><!-- 定义构建时添加的环境参数 --><profiles><!-- 定义一个profile --><profile><id>jdk-1.8</id> <!-- profile的id --><activation> <!-- 激活条件 --><activeByDefault>true</activeByDefault> <!-- 默认激活 --><jdk>1.8</jdk> <!-- 使用的JDK版本 --></activation><properties> <!-- 定义环境变量 --><maven.compiler.source>1.8</maven.compiler.source> <!-- 编译代码的源版本 --><maven.compiler.target>1.8</maven.compiler.target> <!-- 编译代码的目标版本 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 项目源码的编码方式 --><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 项目输出的编码方式 --><java.version>1.8</java.version> <!-- 使用的Java版本 --></properties></profile></profiles><!-- 设置默认激活的环境 --><activeProfiles><activeProfile>jdk-1.8</activeProfile> <!-- 默认激活的profile --></activeProfiles>
</settings>

📢文章总结
对本篇文章进行总结:
🔔以上就是今天要讲的内容,阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
🚀🎉希望各位读者大大多多支持用心写文章的博主,现在时代变了,🚀🎉 信息爆炸,酒香也怕巷子深🔥,博主真的需要大家的帮助才能在这片海洋中继续发光发热🎨,所以,🏃💨赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 💂 博客主页: 我是廖志伟
- 👉开源项目:java_wxid
- 🌥 哔哩哔哩:我是廖志伟
- 🎏个人社区:幕后大佬
- 🔖个人微信号:
SeniorRD - 🎉微信号二维码:

📥博主目标

- 🍋程序开发这条路不能停,停下来容易被淘汰掉,吃不了自律的苦,就要受平庸的罪,持续的能力才能带来持续的自信。我本是一个很普通的程序员,放在人堆里,除了与生俱来的盛世美颜,就剩180的大高个了,就是我这样的一个人,默默写博文也有好多年了。
- 📺有句老话说的好,牛逼之前都是傻逼式的坚持,希望自己可以通过大量的作品、时间的积累、个人魅力、运气、时机,可以打造属于自己的技术影响力。
- 💥内心起伏不定,我时而激动,时而沉思。我希望自己能成为一个综合性人才,具备技术、业务和管理方面的精湛技能。我想成为产品架构路线的总设计师,团队的指挥者,技术团队的中流砥柱,企业战略和资本规划的实战专家。
- 🎉这个目标的实现需要不懈的努力和持续的成长,但我必须努力追求。因为我知道,只有成为这样的人才,我才能在职业生涯中不断前进并为企业的发展带来真正的价值。在这个不断变化的时代,我们必须随时准备好迎接挑战,不断学习和探索新的领域,才能不断地向前推进。我坚信,只要我不断努力,我一定会达到自己的目标。
🔔有需要对自己进行综合性评估,进行职业方向规划,我可以让技术大牛帮你模拟面试、针对性的指导、传授面试技巧、简历优化、进行技术问题答疑等服务。
可访问:https://java_wxid.gitee.io/tojson/

相关文章:
【快速使用ShardingJDBC的哈希分片策略进行分库分表】
文章目录 🔊博主介绍🥤本文内容🍊1.引入maven依赖🍊2.启动类上添加注解MapperScan🍊3.添加application.properties配置🍊4.普通的自定义实体类🍊5.写个测试类验证一下🍊6.控制台打印…...
102. 二叉树的层序遍历
原题链接:102. 二叉树的层序遍历 以下代码为模板,需要层序遍历时都可以使用该模板进行代码更改 全代码: class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {//创建一个TreeNode* 队列用于存储树中的每…...
macOS磁盘分区调整软件--Paragon Camptune X 中文
Paragon Camptune X是一款专为Mac用户设计的强大分区大小调整工具。通过它,用户可以简便地调整Mac硬盘上的分区大小,实现存储空间的高效管理。无论是需要在Mac和Windows系统之间切换的双系统用户,还是有其他特定存储需求的用户,Ca…...
kaggle中报错NameError: name ‘q_1‘ is not defined
在开始练习之前,先点击“全部运行”按钮。...
SQL注入漏洞 其他注入
文章目录 宽字节注入案例 HTTP头部注入Cookie注入base64User-Agent注入Referer 注入 SQL注入读写文件条件1.是否拥有读写权限2.文件路径3.secure_file_priv 读取文件写入文件 SQLMap安装sqlmapkail 源安装仓库克隆 参数简介快速入门;SQLmap(常规…...
Java自学第2课:Java语言基础知识要点
1 Java主类结构 任务:创建新项目名为item,包名为number,类名为first。 1.1 包声明 不指定包时,默认就是工程名,指定后,类文件可以分类了,是这意思吧。包就大概等于一个文件夹。而且在类文件中…...
flink状态和检查点
检查点和状态后端的区别 检查点 就是某个时间点下的所有算子的状态快照。这个时间点就是等所有任务将“同一个数据”处理完毕的时候。 状态后端:是一个管理状态的组件,还负责将本地状态(检查点)持久化到远程文件存储系统中。 分…...
数据仓库工具箱-零售业务
文章目录 一、维度模型设计的4步过程1.1 第一步:选择业务过程1.2 第二步:声明粒度1.3 第三步:确定维度1.4 第四步:确定事实 二、零售业务案例研究2.1 第一步:选择业务过程2.2 第二步:声明粒度2.3 第三步&am…...
网络工程实验记录
网络工程 show ip route show running-config 第一周 相同设备使用交叉线,不同设备之间使用直通线 R1能ping通10.1.1.1 R2能ping通所有的 R3能ping通172.16.1.1 即路由器只能到达自身线连接出去的,另一端就连接不了了。 此时给R1分配静态路由 R…...
Danswer 接入 Llama 2 模型 | 免费在 Google Colab 上托管 Llama 2 API
一、前言 前面在介绍本地部署免费开源的知识库方案时,已经简单介绍过 Danswer《Danswer 快速指南:不到15分钟打造您的企业级开源知识问答系统》,它支持即插即用不同的 LLM 模型,可以很方便的将本地知识文档通过不同的连接器接入到…...
react:路由
官方文档:https://reactrouter.com/en/main/start/overview#pending-navigation-ui 一:简单版本 先 npm i react-router-dom main.ts中内容替换为 import ReactDOM from react-dom/client import App from ./App.tsx import ./index.css import {creat…...
【AI工具】手把手带你使用Gradio分享你的模型
手把手带你使用Gradio分享你的模型 1. 快速入门2. 基本参数|支持的接口2.1 Interface类以及基础模块2.2 组件属性2.3 多输入输出组件2,4 图像组件2.5 Chatbots2.6 动态界面接口2.7 Blocks:更具灵活性和调控性2.7.1 Blocks入门2.7.2 更复杂的Blocks3. 分享自定义采样训练参考资…...
海洋专用cmocean颜色包_共22种--全平台可用
海洋专用cmocean颜色包_共22种–全平台可用 往期推荐: Python语言_matplotlib包_共80种–全平台可用 Python语言_single_color_共140种–全平台可用 R语言_RColorBrewer包–全平台可用 R语言gplots包的颜色索引表–全平台可用 R语言中的自带的调色板–五种–全平台…...
uni-app多端开发
uni-app 多端开发 一、命令创建uni-app 项目二、在微信小程序后台找到 appId 填写 appId三、运行项目四、使用 uni-ui4-1、下载4-2、自动导入4-3、ts项目下载类型校验 (uni-ui 组件库)4-3-1、下载4-3-2、配置 五、持久化 pinia六、数据请求封装七、获取组…...
Linux中固定ip端口和修改ip地址
一,更改虚拟网络编辑器 1,首先启动VMware,选择自己要更改ip或固定ip的虚拟机,并找到虚拟网络配编辑器,点击进入 2,进入之后需要点击右下角获取管理员权限后才能修改,有管理员权限之后图片如下 …...
csdn初始模板【自用】
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
2311rust无畏并发.
原文 Rust无畏并发 Rust是为了解决两个麻烦问题: 1,如何安全系统编程 2,如何无畏并发 最初,这些问题似乎是无关的,但令惊讶的是,方法竟然是相同的:使Rust安全的相同工具也可帮助解决并发问题. 内存安全和并发错误,一般认为是代码在不应访问数据时访问数据.Rust依靠所有权为…...
阿里云中的云服务器的ubuntu中的vim没有显示行号
没有行号: 在终端输入命令: vim ~/.vimrc set nu...
Golang 在 Mac、Linux、Windows 下如何交叉编译
Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序。 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 具体组合…...
如何写好一篇学术论文
目录 前言 1.标题和摘要 1.1标题 1.2摘要及关键词 1.2.1摘要 1.2.2关键词 2.正文 2.1引言 2.2问题建模 2.3研究方法及分析 2.4仿真(伪代码) 2.5实验结果及分析 2.6 总结 2.7延深 2.7.1图片处理 2.7.2审稿回复 2.7.3如何避免拒稿 2.7.4写…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
