的配置中是针对 MySql 这种自增数据库的,如果使用 ORACLE 序列方式,可以参考下面的配置:
SQL 中的 {1}
代表的是对应表的大写形式,{0}
是小写形式,这个配置生成的代码会像下面这样:
public class Country {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,
generator = "select SEQ_COUNTRY.nextval from dual")
private Integer id;
// 省略其他
}
2.使用maven执行MBG
Maven 中的插件配置如下:
maven-compiler-plugin
${jdk.version}
${jdk.version}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.6
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
5.1.29
tk.mybatis
mapper
4.0.0
下面看配置文件generatorConfig.xml:
映射文件包名和位置
dao包名和位置
这里和之前相差不多,只是通过
引入了外部属性文件,在
配置时,使用的属性文件中的参数。
运行
在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate
即可(前提是配置了mvn)。
通用代码生成器
代码生成器是基于 MBG 插件的,所以需要配合 MBG 使用。
一个简单的 MBG 配置如下:
在这个配置中,我们只关注 tk.mybatis.mapper.generator.TemplateFilePlugin
。
基于模板的插件 TemplateFilePlugin
这个插件中除了几个必备的属性外,还可以增加任意的属性,属性完全是为了给模板提供数据。
先看一个基本完整的配置:
下面介绍必备的属性。
1. targetProject
用于指定目标项目,一般是 src/main/java
或者 src/main/resource
这样的目录。还可以是 src/test/java
或者 src/test/resource
这样的目录。
在多模块项目中,还能通过相对路径指定为其他的目录,例如:
这个属性值有一个要求,就是目录必须存在,否则不会生成代码!
2. targetPackage
用于指定包的部分,虽然是这个名字,实际上就是路径。
这个属性指定的路径如果不存在,就会自动创建。
这个属性的值可以为空。
例如 mapper/admin
用于生成 mapper/admin/
目录,或者 tk.mybatis.mapper
生成包(本质上还是目录)。
这个属性还有一个特殊的地方,它还支持使用模板,就和下面的 fileName
一样,举个简单的使用场景。
你可能在生成前端代码的时候,希望将表对应的 JSP 生成在自己的一个目录中,此时可以配置为:
模板中可以用到的属性,这里都能用,其他属性后面会介绍。
通过这个路径也能看出来,配置一个插件只能根据模板在一个指定位置(targetProject 和 targetPackage 决定的目录)生成一个文件。
3. templatePath
指定模板路径,可以是任意能够通过 ClassLoader 能够获取的位置,文件类型没有限制。
例如示例中的 generator/test-one.ftl
。
这个属性必须指定,否则不会生成代码!
4. fileName
这个属性用于指定生成文件的名字,这个值支持使用模板,例如上面的 ${tableClass.shortClassName}Test.txt
,具体可用的属性会在后面介绍。
这个属性必须指定,否则不会生成代码!
5. templateFormatter
这个属性可选,默认使用基于 FreeMarker 的实现!
默认情况下,你需要添加下面的依赖:
org.freemarker
freemarker
2.3.23
默认的实现类为:tk.mybatis.mapper.generator.formatter.FreemarkerTemplateFormatter
。
这个类实现了两个接口 TemplateFormatter, ListTemplateFormatter
。
这俩接口分别对应下面 singleMode
参数值的 true
和 false
。
也就是一个表生成一个文件,或者多个表生成一个文件。
对于一般情况下,都是第一种情况。但是在配置文件中,可能会用到多个表的信息。
如果你想使用其他模板引擎,可以自己实现上面的接口。
6. singleMode
上面已经提过,默认为 true
。
一个表生成一个文件时,可用属性可以参考 generator/test-one.ftl
,表的属性在 tableClass
中。
多个表生成一个文件时,可用属性可以参考 generator/test-all.ftl
,所有表的属性在 tableClassSet
中,通过遍历可以获取单个的信息。
7. 其他你需要的属性
模板中需要的特殊信息都可以通过
方法设置,在模板中直接使用这里定义的属性名来使用,后面例子的中的 mapperSuffix
就是这种属性。
TemplateFilePlugin
配置示例
前两个会生成 Dao 后缀的 Mapper 接口和 XML,其中有个针对性的参数 mapperSuffix
用于配置后缀,还有个 mapperPackage
在生成 XML 时获取接口的包名(因为和这里的 targetPackage
可以不同)。
后两个插件用于演示所有可用的属性,而且是两种不同的模式。
在表和实体上可用的所有属性如下:
特殊:targetPackage值在 ${package} 中。
当前时间:
<#assign dateTime = .now>
日期:${dateTime?date}
时间:${dateTime?time}
格式化:${dateTime?string["yyyy-MM-dd HH:mm:ss"]}
所有配置的属性信息:
<#list props?keys as key>
${key} - ${props[key]}
#list>
实体和表的信息:
表名:${tableClass.tableName}
变量名:${tableClass.variableName}
小写名:${tableClass.lowerCaseName}
类名:${tableClass.shortClassName}
全名:${tableClass.fullClassName}
包名:${tableClass.packageName}
列的信息:
=====================================
<#if tableClass.pkFields??>
主键:
<#list tableClass.pkFields as field>
-------------------------------------
列名:${field.columnName}
列类型:${field.jdbcType}
字段名:${field.fieldName}
注释:${field.remarks}
类型包名:${field.typePackage}
类型短名:${field.shortTypeName}
类型全名:${field.fullTypeName}
是否主键:${field.identity?c}
是否可空:${field.nullable?c}
是否为BLOB列:${field.blobColumn?c}
是否为String列:${field.stringColumn?c}
是否为字符串列:${field.jdbcCharacterColumn?c}
是否为日期列:${field.jdbcDateColumn?c}
是否为时间列:${field.jdbcTimeColumn?c}
是否为序列列:${field.sequenceColumn?c}
列长度:${field.length?c}
列精度:${field.scale}
#list>
#if>
<#if tableClass.baseFields??>
基础列:
<#list tableClass.baseFields as field>
-------------------------------------
列名:${field.columnName}
列类型:${field.jdbcType}
字段名:${field.fieldName}
注释:${field.remarks}
类型包名:${field.typePackage}
类型短名:${field.shortTypeName}
类型全名:${field.fullTypeName}
是否主键:${field.identity?c}
是否可空:${field.nullable?c}
是否为BLOB列:${field.blobColumn?c}
是否为String列:${field.stringColumn?c}
是否为字符串列:${field.jdbcCharacterColumn?c}
是否为日期列:${field.jdbcDateColumn?c}
是否为时间列:${field.jdbcTimeColumn?c}
是否为序列列:${field.sequenceColumn?c}
列长度:${field.length?c}
列精度:${field.scale}
#list>
#if>
<#if tableClass.blobFields??>
Blob列:
<#list tableClass.blobFields as field>
-------------------------------------
列名:${field.columnName}
列类型:${field.jdbcType}
字段名:${field.fieldName}
注释:${field.remarks}
类型包名:${field.typePackage}
类型短名:${field.shortTypeName}
类型全名:${field.fullTypeName}
是否主键:${field.identity?c}
是否可空:${field.nullable?c}
是否为BLOB列:${field.blobColumn?c}
是否为String列:${field.stringColumn?c}
是否为字符串列:${field.jdbcCharacterColumn?c}
是否为日期列:${field.jdbcDateColumn?c}
是否为时间列:${field.jdbcTimeColumn?c}
是否为序列列:${field.sequenceColumn?c}
列长度:${field.length?c}
列精度:${field.scale}
#list>
#if>
=====================================
全部列(包含了pk,base,blob 字段,可用的属性和上面的一样):
<#if tableClass.allFields??>
列名 - 字段名
<#list tableClass.allFields as field>
${field.columnName} - ${field.fieldName}
#list>
#if>
4.2.3 测试执行
上面示例就是本项目的测试代码,在 src/test/resources/generator/generatorConfig.xml
中。
还提供了一种 Java 编码方式运行的类,src/test/java/
中的 tk.mybatis.mapper.generator.Generator
,配置上面 xml 中的数据库信息就可以生成。
测试生成的部分 结果如下。
实体:
@Table(name = "`user_info`")
public class UserInfo {
@Id
@Column(name = "`Id`")
@GeneratedValue(generator = "JDBC")
private Integer id;
Dao:
package test.mapper;
import test.model.UserInfo;
/**
* 通用 Mapper 代码生成器
*
* @author mapper-generator
*/
public interface UserInfoDao extends tk.mybatis.mapper.common.Mapper {
}
XML:
test-one.ftl 生成的信息如下:
目标package:
当前时间:
2017-11-6
22:00:45
2017-11-06 22:00:45
所有配置的属性信息:
targetPackage -
templateFormatter - tk.mybatis.mapper.generator.formatter.FreemarkerTemplateFormatter
templatePath - generator/test-one.ftl
targetProject - src/test/resources
fileName - ${tableClass.shortClassName}Test.txt
实体和表的信息:
表名:user_info
变量名:userInfo
小写名:userinfo
类名:UserInfo
全名:test.model.UserInfo
包名:test.model
列的信息:
=====================================
主键:
-------------------------------------
列名:Id
列类型:INTEGER
字段名:id
注释:
类型包名:java.lang
类型短名:Integer
类型全名:java.lang.Integer
是否主键:true
是否可空:false
是否为BLOB列:false
是否为String列:false
是否为字符串列:false
是否为日期列false
是否为时间列false
是否为序列列false
列长度:10
列精度:0
基础列:
-------------------------------------
列名:username
列类型:VARCHAR
字段名:username
注释:用户名
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:false
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:32
列精度:0
-------------------------------------
列名:password
列类型:VARCHAR
字段名:password
注释:密码
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:32
列精度:0
-------------------------------------
列名:usertype
列类型:VARCHAR
字段名:usertype
注释:用户类型
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:2
列精度:0
-------------------------------------
列名:enabled
列类型:INTEGER
字段名:enabled
注释:是否可用
类型包名:java.lang
类型短名:Integer
类型全名:java.lang.Integer
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:false
是否为字符串列:false
是否为日期列false
是否为时间列false
是否为序列列false
列长度:10
列精度:0
-------------------------------------
列名:realname
列类型:VARCHAR
字段名:realname
注释:真实姓名
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:32
列精度:0
-------------------------------------
列名:qq
列类型:VARCHAR
字段名:qq
注释:QQ
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:14
列精度:0
-------------------------------------
列名:email
列类型:VARCHAR
字段名:email
注释:
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:100
列精度:0
-------------------------------------
列名:tel
列类型:VARCHAR
字段名:tel
注释:联系电话
类型包名:java.lang
类型短名:String
类型全名:java.lang.String
是否主键:false
是否可空:true
是否为BLOB列:false
是否为String列:true
是否为字符串列:true
是否为日期列false
是否为时间列false
是否为序列列false
列长度:255
列精度:0
Blob列:
=====================================
全部列:
列名 - 字段名
Id - id
username - username
password - password
usertype - usertype
enabled - enabled
realname - realname
qq - qq
email - email
tel - tel
你可能感兴趣的:(微服务)
《论分布式系统架构设计及其应用》架构师论文
文琪小站
系统架构师 系统架构设计师 软考论文
【摘要】2022年3月,我参与了某金融科技公司“智能风控云平台”项目的研发工作,担任系统架构师职务,负责分布式系统架构设计与核心技术选型。该平台旨在为银行、保险等金融机构提供实时风险评估、反欺诈及数据服务,需支撑每秒十万级并发请求并满足毫秒级响应要求。项目采用微服务架构风格,融合事件驱动、服务网格及分布式数据存储技术,解决了高可用性、弹性扩展及数据一致性等核心问题。本文通过实际案例论证分布式架构设
评测系统的服务网格架构应用
AI天才研究院
DeepSeek 架构 java 微服务 ai
Step1:标题与概述评测系统的服务网格架构应用关键词:服务网格、评测系统、微服务、架构设计、性能优化摘要:本文将详细探讨服务网格在评测系统中的应用,从背景介绍、核心概念、技术分析、架构设计到实际应用,全方位解析服务网格如何提升评测系统的性能和稳定性。通过具体案例和最佳实践,帮助读者深入理解服务网格的价值和实现方法。第1章:背景介绍1.1问题背景在现代信息化社会中,评测系统扮演着至关重要的角色,尤
Docker 和 Docker Compose 的关系
孽小倩
docker docker 容器 运维
1.Docker和DockerCompose的关系Docker和DockerCompose是容器化相关的工具,DockerCompose是Docker的一个补充工具,用于管理多容器应用。它们的关系如下:Docker是一个容器管理工具,负责构建、运行、分发容器。DockerCompose是一个编排工具,用于定义和管理多个Docker容器,通常用于微服务架构或多个服务的协调部署。可以简单理解:Dock
微服务架构中10个常用的设计模式
微服务
在当今的微服务架构中,常见的十种设计模式,分别是服务发现模式、API网关模式、断路器模式、边车模式、负载均衡模式、Saga事务模式、CQRS模式、分片模式、分布式日志跟踪模式、熔断与降级模式。其中,服务发现模式十分关键,通过自动化发现和定位服务,减少人工配置带来的不确定性,让系统可扩展性与高可用性得以更好地保障。同时,这一模式还能有效降低运维难度,在服务数量急剧增加的情况下依然保持灵活管理,提高线
消息队列的特性与使用场景:Kafka、ActiveMQ、RabbitMQ与RocketMQ的深度剖析
啊sen丶
kafka activemq rabbitmq rocketmq 分布式 消息队列
在分布式系统和微服务架构中,消息队列是实现服务间通信和解耦的核心组件。Kafka、ActiveMQ、RabbitMQ和RocketMQ是当前最受欢迎的消息队列解决方案,它们各自具有独特的特性和适用场景。本文将从特性和使用场景两个维度进行对比分析,帮助读者更好地理解它们的差异,并根据实际需求选择合适的消息队列。一、特性对比(一)吞吐量与延迟-Kafka:以高吞吐量著称,适合大规模数据的批量处理。延迟
微服务架构拆分的 7 大黄金法则
微服务
微服务架构拆分的7大黄金法则是什么?简而言之,即需求驱动、单一职责、弹性扩展、自治性、松耦合、可观测性、演进式迭代。在这其中,需求驱动往往最能决定整个拆分策略是否契合业务目标。我们需要从业务痛点与用户需求出发,厘清“为什么要拆”,并用定量或定性的方式判断拆分的必要性与收益点。如果忽视了业务需求的优先级或不加以合理评估,很可能导致微服务拆分过度或不足,既浪费研发资源,也无法让系统在实际环境下发挥真正
Spring Boot整合SA-Token的使用详解
陈辰学长
spring boot 数据库 后端
SpringBoot整合SA-Token的使用详解,涉及到SA-Token的基本介绍、整合步骤、配置、常用API以及实际使用场景等多个方面。以下将详细阐述这一过程,确保内容不少于2000字。一、SA-Token简介SA-Token是一个轻量级的Java权限认证框架,由国人开发,主要解决登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权等一系列权限相关问题。SA
K8S学习之基础三十四:K8S之监控Prometheus部署pod版
云上艺旅
K8S学习 kubernetes 学习 prometheus 云原生
使用KubernetesPod的方式部署Prometheus是一种常见的方法,尤其是在容器化和微服务架构中。以下是详细的步骤:1.创建命名空间(可选)为了方便管理,可以为Prometheus创建一个单独的命名空间。yaml复制apiVersion:v1kind:Namespacemetadata:name:monitoring将上述内容保存为namespace.yaml,然后应用:bash复制ku
Spring Boot中使用RabbitMQ实现简单的消息发送与接收
Takumilovexu
MQ java-rabbitmq rabbitmq spring boot
文章目录环境准备1.RabbitMQ的基础配置2.实现消息发送功能3.实现消息接收功能4.总结在微服务架构和分布式系统中,消息队列是实现异步通信和解耦的重要工具。RabbitMQ作为一种常见的消息中间件,广泛应用于消息传递、任务分发等场景。本文将带你一步步实现如何在SpringBoot应用中使用RabbitMQ进行消息的发送和接收。我们将构建一个消息发送者(Publisher)和一个消息接收者(C
Spring Boot 核心知识点精讲:助你快速上手与深度理解
无眠_
spring boot 运维 后端
SpringBoot核心知识点精讲:助你快速上手与深度理解摘要:SpringBoot以其约定优于配置、快速开发、易部署等特性,成为Java微服务开发的首选框架。本文将深入浅出地介绍SpringBoot的核心知识点,包括自动配置、起步依赖、依赖注入、外部化配置等,帮助读者快速上手SpringBoot并深入理解其运行机制,为高效开发SpringBoot应用打下坚实基础。关键词:SpringBoot,自
微服务调试:多环境 env 组件详解
时雨h
算法 JAVA 面试 java python 运维
微服务调试:多环境env组件详解一、多环境env组件(一)微服务调试的痛点在微服务架构下,开发人员在调试过程中常常会遇到各种挑战。其中一个常见的问题就是在多人协作的开发环境中,如何确保自己的调试请求能够准确地到达自己本地的服务实例,而不是被其他开发者的实例所拦截。例如,假设团队中有两位开发人员A和B,他们都在本地启动了名为"user-service"的微服务实例。当A发起一个针对"user-ser
微服务架构: SpringCloud实战经验总结
苹果酱0567
面试题汇总与解析 课程设计 spring boot vue.js java mysql
微服务架构:SpringCloud实战经验总结一、微服务架构简介什么是微服务架构微服务架构(MicroservicesArchitecture)是一种以业务功能组织的松散耦合、高内聚的服务架构。它将传统的单体应用拆分成一组小型服务,每个服务都可以独立开发、部署、扩展和替换。微服务架构通过服务之间的松耦合和互相隔离,使得开发团队能够更快速地迭代和交付应用,同时提高了整体系统的可扩展性和灵活性。二、S
单体架构、微服务组件与解决方案
Forever Nore
分布式 SpringCloud 架构 微服务 面试
资料:微服务、MQ资料链接:https://pan.baidu.com/s/1nzCJ-hNw854uFJQf6jWobg提取码:yyds单体架构微服务拆分与改进将单体项目拆分成微服务项目1、拆分原则
初见SpringCloud ing
Camellia0212
重生之我要做开发 spring spring cloud
Consul服务注册与发现服务注册与发现服务注册:微服务在启动时,会将自己的信息(如IP地址、端口、服务名称等)注册到Consul。服务发现:其他微服务可以通过Consul查询到已注册的服务,并通过这些信息进行通信。分布式配置管理Consul可以作为配置中心,管理分布式系统的配置。SpringCloudConsul可以将配置信息存储在Consul中,并在应用启动时或者运行时动态获取和更新这些配置信
深入理解Spring Cloud中的服务发现与注册
weixin_836869520
spring cloud 服务发现 spring
深入理解SpringCloud中的服务发现与注册大家好,我是微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!服务发现与注册的重要性在微服务架构中,服务发现与注册是确保服务间通信的关键。传统的单体应用程序可能使用硬编码的方式调用其他服务,但在微服务环境中,服务的地址和实例可能动态变化,因此需要一种机制来动态地管理和发现服务。1.SpringCloud与EurekaSpringClo
Spring Cloud Eureka快速搭建:微服务注册中心的配置步骤
勤劳兔码农
spring cloud eureka 微服务
SpringCloudEureka快速搭建:微服务注册中心的配置步骤目录引言SpringCloud微服务架构概述什么是Eureka?EurekaServer的搭建步骤4.1创建EurekaServer项目4.2配置EurekaServer4.3启动EurekaServer4.4多实例EurekaServer的搭建EurekaClient的配置步骤5.1创建EurekaClient项目5.2配置Eu
探索未来架构:基于AWS的响应式微服务框架
柏赢安Simona
探索未来架构:基于AWS的响应式微服务框架reactive-refarch-cloudformationReactiveMicroservicesArchitectureswithAmazonECS,AWSLambda,AmazonKinesisStreams,AmazonElastiCache,andAmazonDynamoDB项目地址:https://gitcode.com/gh_mirror
Dubbo、SpringCloud框架学习
种豆走天下
dubbo spring cloud 学习
学习Dubbo和SpringCloud框架是微服务架构的一个重要部分。这两个框架在分布式系统中起着重要的作用,分别是阿里巴巴和Spring团队开发的。下面我将为你提供一些基础知识和学习路线,帮助你更好地理解和掌握这两个框架。1.Dubbo框架学习1.1什么是DubboDubbo是阿里巴巴开源的一款高性能的微服务框架。它提供了RPC(远程过程调用)、服务注册与发现、负载均衡、容错、监控等功能。Dub
深入理解Spring Boot:构建高效企业应用的利器
人间忽晚..
spring boot 后端 java
深入理解SpringBoot:构建高效企业应用的利器在快速发展的软件开发领域,快速迭代、高效开发和易于维护成为了开发者们追求的目标。SpringBoot,作为Spring家族的一员,凭借其“约定优于配置”的理念,极大地简化了Spring应用的初始搭建以及开发过程,成为了构建微服务架构和快速开发企业级应用的首选框架。本文将带你深入理解SpringBoot,从基础概念到实战应用,全面剖析其魅力所在。一
Java直通车系列43【Spring Boot】(断路器Hystrix)
浪九天
Java直通车 java 开发语言 spring cloud 后端 spring
目录断路器(Hystrix)1.基本概念2.工作原理3.主要功能场景示例1.项目准备2.添加依赖3.启用Hystrix4.定义服务调用方法并添加Hystrix注解5.在控制器中调用服务方法6.测试断路器(Hystrix)1.基本概念在微服务架构中,服务之间通常存在大量的依赖关系。当某个下游服务出现故障或响应超时,可能会导致调用它的上游服务出现请求堆积、资源耗尽,最终引发整个系统的雪崩效应。断路器(
使用Spring Boot Admin监控和管理微服务
微赚淘客系统开发者@聚娃科技
spring boot 微服务 后端
使用SpringBootAdmin监控和管理微服务大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何利用SpringBootAdmin来监控和管理微服务,提升系统的稳定性和可靠性。1.引言随着微服务架构的流行,系统的复杂性和服务数量不断增加,监控和管理这些微服务变得尤为重要。SpringBootAdmin作为一款
通过数据库网格架构构建现代分布式数据系统
Navicat中国
Navicat 技术智库 数据库 架构 分布式 navicat 信息可视化 mongodb redis
在当今微服务驱动的世界中,企业在跨分布式系统管理数据方面面临着越来越多的挑战。数据库网格架构已成为应对这些挑战的强大解决方案,它提供了一种与现代应用架构相匹配的分散式数据管理方法。本文将探讨数据库网格架构的工作原理,以及如何使用PostgreSQL和MongoDB等流行数据库实施该架构。究竟什么是数据库网格架构?数据库网格架构是一种分散的数据基础架构管理方法,不同的数据库作为一个有凝聚力的系统协同
带大家vue + springboot/springcloud +minio(可选) 实现文件分片上传和断点续传介绍,问题,原理及 前后端完整源码 (模式2:后台集群部署模式)
峡谷电光马仔
minio分片上传 springboot分片上传 springboot断点续传 springcloud断点续传 springcloud分片上传
回顾与介绍本文承接上文《vue+springboot/springcloud+minio(可选)实现文件分片上传和断点续传介绍,问题,原理及前后端完整源码(模式1:后台单点部署模式)》本篇主要针对后台是集群模式下部署时的分片上传方案本篇基于minio的部分可以参考,入不需要文件最后上传到文件服务器,则可忽略minio部分《从0到1手把手搭建springcloudalibaba微服务大型应用框架(九
Java:DDD领域驱动设计深度解析(全览)
以恒1
mvc 架构 java
Java:DDD领域驱动设计深度解析(全览)在软件开发的世界里,我们总在寻找那把打开业务之门的钥匙。有人迷恋MVC的简洁,有人追逐微服务的潮流,而DDD(领域驱动设计)则像一位沉默的智者,提醒着我们:软件不是代码的堆砌,而是对现实世界的映射。DDD:不仅仅是框架,更是一种思维方式!在传统软件开发中,技术实现与业务需求之间始终存在着难以逾越的鸿沟。当业务专家说"我们需要优化客户旅程",开发团队听到的
基于 Golang 的微服务开发实践:使用 Gin 和 GORM 构建 RESTful API
全栈探索者chen
知识分享 golang 微服务 gin 架构 开发语言 后端 安全
基于Golang的微服务开发实践:使用Gin和GORM构建RESTfulAPI前言在微服务架构时代,高性能、易扩展和维护的API服务成为构建企业级系统的关键。Golang(Go)以其高效的执行速度、内置并发模型和优秀的性能表现,正逐渐成为后端微服务开发的热门选择。本文将详细介绍如何使用Gin框架与GORMORM构建一个RESTfulAPI微服务。我们将从项目初始化、数据模型设计、路由与控制器开发,
Dubbo请求调用本地服务
Lorin 洛林
Java 后端经典面试题 dubbo
文章目录前言配置Dubbo本地调用方法一:application.yml中配置方法二:@DubboReference注解中指定注意个人简介前言在微服务架构中,ApacheDubbo作为一款高性能、轻量级的RPC框架,被广泛应用于分布式系统。通常,Dubbo服务是跨进程调用的,但在开发和测试过程中,有时需要在本地调用Dubbo服务,以方便调试和验证。配置Dubbo本地调用默认情况下,Dubbo通过注
庖丁解java(一篇文章学java)
庖丁解java
java 开发语言
(大家不用收藏这篇文章,因为这篇文章会经常更新,也就是删除后重发)一篇文章学java,这是我滴一个执念...当然,真一篇文章就写完java基础,java架构,java业务实现,java业务扩展,根本不可能.所以,这篇文章,就是一个索引,索什么呢?请看下文...关于决定开始写博文的介绍(一切故事的起点源于这一次反省)中小技术公司的软扩展(微服务扩展是否有必要?)-CSDN博客SpringCloud(
RocketMQ、Kafka、RabbitMQ,如何选型?
大梦谁先觉i
中间件 Spring boot Spring Cloud rocketmq kafka rabbitmq
如何根据应用场景选择合适的消息中间件?分布式、微服务、高并发架构中,消息队列(MessageQueue,简称MQ)扮演着至关重要的角色。消息队列用于实现系统间的异步通信、解耦、削峰填谷等功能。目前常见的MQ实现包括RabbitMQ、RocketMQ和Kafka。RocketMQ、Kafka、RabbitMQ如何选择?三大MQ的简单对比特性RabbitMQRocketMQKafka公司/社区Rabb
webpack5(Module Federation)+vue3.0实现微前端
weixin_42140041
前端奇淫技巧 前端 javascript vue.js
项目源码地址:https://github.com/wuxiaohuaer/webpack5-vue-admin一、什么是微前端微前端是一个比较宏观的概念,他的核心就是独立,开发独立、部署独立,比较适合大的团队来进行重量级项目开发。从MicroFrontends官网可以了解到,微前端概念是从微服务概念扩展而来的,摒弃大型单体方式,将前端整体分解为小而简单的块,这些块可以独立开发、测试和部署,同时仍
【第8章】亿级电商平台订单系统-技术选型
cherry5230
架构 系统架构 架构 java
1-1本章导学课程导学学习重点:订单系统技术选型实践200亿年交易规模BToB电商平台案例解析知识体系演进路径1.架构体系演变单体架构→大型云上架构体系互联网应用架构设计基本原则2.主流架构设计模式分层架构模式微服务架构模式基于事件的架构模式整洁架构模式六边形架构模式微内核模式基于空间的架构模式管道过滤器模式代理模式3.技术选型方法论3.1基本原则系统性能指标优先原则技术生态适配性原则团队技术栈延
Spring中@Value注解,需要注意的地方
无量
spring bean @Value xml
Spring 3以后,支持@Value注解的方式获取properties文件中的配置值,简化了读取配置文件的复杂操作
1、在applicationContext.xml文件(或引用文件中)中配置properties文件
<bean id="appProperty"
class="org.springframework.beans.fac
mongoDB 分片
开窍的石头
mongodb
mongoDB的分片。要mongos查询数据时候 先查询configsvr看数据在那台shard上,configsvr上边放的是metar信息,指的是那条数据在那个片上。由此可以看出mongo在做分片的时候咱们至少要有一个configsvr,和两个以上的shard(片)信息。
第一步启动两台以上的mongo服务
&nb
OVER(PARTITION BY)函数用法
0624chenhong
oracle
这篇写得很好,引自
http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html
OVER(PARTITION BY)函数用法
2010年10月26日
OVER(PARTITION BY)函数介绍
开窗函数 &nb
Android开发中,ADB server didn't ACK 解决方法
一炮送你回车库
Android开发
首先通知:凡是安装360、豌豆荚、腾讯管家的全部卸载,然后再尝试。
一直没搞明白这个问题咋出现的,但今天看到一个方法,搞定了!原来是豌豆荚占用了 5037 端口导致。
参见原文章:一个豌豆荚引发的血案——关于ADB server didn't ACK的问题
简单来讲,首先将Windows任务进程中的豌豆荚干掉,如果还是不行,再继续按下列步骤排查。
&nb
canvas中的像素绘制问题
换个号韩国红果果
JavaScript canvas
pixl的绘制,1.如果绘制点正处于相邻像素交叉线,绘制x像素的线宽,则从交叉线分别向前向后绘制x/2个像素,如果x/2是整数,则刚好填满x个像素,如果是小数,则先把整数格填满,再去绘制剩下的小数部分,绘制时,是将小数部分的颜色用来除以一个像素的宽度,颜色会变淡。所以要用整数坐标来画的话(即绘制点正处于相邻像素交叉线时),线宽必须是2的整数倍。否则会出现不饱满的像素。
2.如果绘制点为一个像素的
编码乱码问题
灵静志远
java jvm jsp 编码
1、JVM中单个字符占用的字节长度跟编码方式有关,而默认编码方式又跟平台是一一对应的或说平台决定了默认字符编码方式;2、对于单个字符:ISO-8859-1单字节编码,GBK双字节编码,UTF-8三字节编码;因此中文平台(中文平台默认字符集编码GBK)下一个中文字符占2个字节,而英文平台(英文平台默认字符集编码Cp1252(类似于ISO-8859-1))。
3、getBytes()、getByte
java 求几个月后的日期
darkranger
calendar getinstance
Date plandate = planDate.toDate();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(plandate);
// 取得三个月后时间
cal.add(Calendar.M
数据库设计的三大范式(通俗易懂)
aijuans
数据库复习
关系数据库中的关系必须满足一定的要求。满足不同程度要求的为不同范式。数据库的设计范式是数据库设计所需要满足的规范。只有理解数据库的设计范式,才能设计出高效率、优雅的数据库,否则可能会设计出错误的数据库.
目前,主要有六种范式:第一范式、第二范式、第三范式、BC范式、第四范式和第五范式。满足最低要求的叫第一范式,简称1NF。在第一范式基础上进一步满足一些要求的为第二范式,简称2NF。其余依此类推。
想学工作流怎么入手
atongyeye
jbpm
工作流在工作中变得越来越重要,很多朋友想学工作流却不知如何入手。 很多朋友习惯性的这看一点,那了解一点,既不系统,也容易半途而废。好比学武功,最好的办法是有一本武功秘籍。研究明白,则犹如打通任督二脉。
系统学习工作流,很重要的一本书《JBPM工作流开发指南》。
本人苦苦学习两个月,基本上可以解决大部分流程问题。整理一下学习思路,有兴趣的朋友可以参考下。
1 首先要
Context和SQLiteOpenHelper创建数据库
百合不是茶
android Context创建数据库
一直以为安卓数据库的创建就是使用SQLiteOpenHelper创建,但是最近在android的一本书上看到了Context也可以创建数据库,下面我们一起分析这两种方式创建数据库的方式和区别,重点在SQLiteOpenHelper
一:SQLiteOpenHelper创建数据库:
1,SQLi
浅谈group by和distinct
bijian1013
oracle 数据库 group by distinct
group by和distinct只了去重意义一样,但是group by应用范围更广泛些,如分组汇总或者从聚合函数里筛选数据等。
譬如:统计每id数并且只显示数大于3
select id ,count(id) from ta
vi opertion
征客丶
mac opration vi
进入 command mode (命令行模式)
按 esc 键
再按 shift + 冒号
注:以下命令中 带 $ 【在命令行模式下进行】,不带 $ 【在非命令行模式下进行】
一、文件操作
1.1、强制退出不保存
$ q!
1.2、保存
$ w
1.3、保存并退出
$ wq
1.4、刷新或重新加载已打开的文件
$ e
二、光标移动
2.1、跳到指定行
数字
【Spark十四】深入Spark RDD第三部分RDD基本API
bit1129
spark
对于K/V类型的RDD,如下操作是什么含义?
val rdd = sc.parallelize(List(("A",3),("C",6),("A",1),("B",5))
rdd.reduceByKey(_+_).collect
reduceByKey在这里的操作,是把
java类加载机制
BlueSkator
java 虚拟机
java类加载机制
1.java类加载器的树状结构
引导类加载器
^
|
扩展类加载器
^
|
系统类加载器
java使用代理模式来完成类加载,java的类加载器也有类似于继承的关系,引导类是最顶层的加载器,它是所有类的根加载器,它负责加载java核心库。当一个类加载器接到装载类到虚拟机的请求时,通常会代理给父类加载器,若已经是根加载器了,就自己完成加载。
虚拟机区分一个Cla
动态添加文本框
BreakingBad
文本框
<script> var num=1; function AddInput() { var str=""; str+="<input 
读《研磨设计模式》-代码笔记-单例模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
public class Singleton {
}
/*
* 懒汉模式。注意,getInstance如果在多线程环境中调用,需要加上synchronized,否则存在线程不安全问题
*/
class LazySingleton
iOS应用打包发布常见问题
chenhbc
ios iOS发布 iOS上传 iOS打包
这个月公司安排我一个人做iOS客户端开发,由于急着用,我先发布一个版本,由于第一次发布iOS应用,期间出了不少问题,记录于此。
1、使用Application Loader 发布时报错:Communication error.please use diagnostic mode to check connectivity.you need to have outbound acc
工作流复杂拓扑结构处理新思路
comsci
设计模式 工作 算法 企业应用 OO
我们走的设计路线和国外的产品不太一样,不一样在哪里呢? 国外的流程的设计思路是通过事先定义一整套规则(类似XPDL)来约束和控制流程图的复杂度(我对国外的产品了解不够多,仅仅是在有限的了解程度上面提出这样的看法),从而避免在流程引擎中处理这些复杂的图的问题,而我们却没有通过事先定义这样的复杂的规则来约束和降低用户自定义流程图的灵活性,这样一来,在引擎和流程流转控制这一个层面就会遇到很
oracle 11g新特性Flashback data archive
daizj
oracle
1. 什么是flashback data archive
Flashback data archive是oracle 11g中引入的一个新特性。Flashback archive是一个新的数据库对象,用于存储一个或多表的历史数据。Flashback archive是一个逻辑对象,概念上类似于表空间。实际上flashback archive可以看作是存储一个或多个表的所有事务变化的逻辑空间。
多叉树:2-3-4树
dieslrae
树
平衡树多叉树,每个节点最多有4个子节点和3个数据项,2,3,4的含义是指一个节点可能含有的子节点的个数,效率比红黑树稍差.一般不允许出现重复关键字值.2-3-4树有以下特征:
1、有一个数据项的节点总是有2个子节点(称为2-节点)
2、有两个数据项的节点总是有3个子节点(称为3-节
C语言学习七动态分配 malloc的使用
dcj3sjt126com
c language malloc
/*
2013年3月15日15:16:24
malloc 就memory(内存) allocate(分配)的缩写
本程序没有实际含义,只是理解使用
*/
# include <stdio.h>
# include <malloc.h>
int main(void)
{
int i = 5; //分配了4个字节 静态分配
int * p
Objective-C编码规范[译]
dcj3sjt126com
代码规范
原文链接 : The official raywenderlich.com Objective-C style guide
原文作者 : raywenderlich.com Team
译文出自 : raywenderlich.com Objective-C编码规范
译者 : Sam Lau
0.性能优化-目录
frank1234
性能优化
从今天开始笔者陆续发表一些性能测试相关的文章,主要是对自己前段时间学习的总结,由于水平有限,性能测试领域很深,本人理解的也比较浅,欢迎各位大咖批评指正。
主要内容包括:
一、性能测试指标
吞吐量、TPS、响应时间、负载、可扩展性、PV、思考时间
http://frank1234.iteye.com/blog/2180305
二、性能测试策略
生产环境相同 基准测试 预热等
htt
Java父类取得子类传递的泛型参数Class类型
happyqing
java 泛型 父类 子类 Class
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import org.junit.Test;
abstract class BaseDao<T> {
public void getType() {
//Class<E> clazz =
跟我学SpringMVC目录汇总贴、PDF下载、源码下载
jinnianshilongnian
springMVC
----广告--------------------------------------------------------------
网站核心商详页开发
掌握Java技术,掌握并发/异步工具使用,熟悉spring、ibatis框架;
掌握数据库技术,表设计和索引优化,分库分表/读写分离;
了解缓存技术,熟练使用如Redis/Memcached等主流技术;
了解Ngin
the HTTP rewrite module requires the PCRE library
流浪鱼
rewrite
./configure: error: the HTTP rewrite module requires the PCRE library.
模块依赖性Nginx需要依赖下面3个包
1. gzip 模块需要 zlib 库 ( 下载: http://www.zlib.net/ )
2. rewrite 模块需要 pcre 库 ( 下载: http://www.pcre.org/ )
3. s
第12章 Ajax(中)
onestopweb
Ajax
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Optimize query with Query Stripping in Web Intelligence
blueoxygen
BO
http://wiki.sdn.sap.com/wiki/display/BOBJ/Optimize+query+with+Query+Stripping+in+Web+Intelligence
and a very straightfoward video
http://www.sdn.sap.com/irj/scn/events?rid=/library/uuid/40ec3a0c-936
Java开发者写SQL时常犯的10个错误
tomcat_oracle
java sql
1、不用PreparedStatements 有意思的是,在JDBC出现了许多年后的今天,这个错误依然出现在博客、论坛和邮件列表中,即便要记住和理解它是一件很简单的事。开发者不使用PreparedStatements的原因可能有如下几个: 他们对PreparedStatements不了解 他们认为使用PreparedStatements太慢了 他们认为写Prepar
世纪互联与结盟有感
阿尔萨斯
10月10日,世纪互联与(Foxcon)签约成立合资公司,有感。
全球电子制造业巨头(全球500强企业)与世纪互联共同看好IDC、云计算等业务在中国的增长空间,双方迅速果断出手,在资本层面上达成合作,此举体现了全球电子制造业巨头对世纪互联IDC业务的欣赏与信任,另一方面反映出世纪互联目前良好的运营状况与广阔的发展前景。
众所周知,精于电子产品制造(世界第一),对于世纪互联而言,能够与结盟