快速掌握和使用Flyway的详细教程_相关技巧

来源:脚本之家  责任编辑:小易  

在使用鼠标进行操作时,由于手移动的范围比较大,很容易影响工作的效率。如果希望快速完成需要频繁执行的任务,使用快捷键不失为一种非常好的方式,只需按下键盘上的一个或多个按键,就可以完成一项任务。然而,现代社会是一个信息化的时代,需要我们记住的东西实在太多,如果再去记忆众多的快捷键,将是一件令人十分头疼的事情。幸运的是,在Word、Excel或PowerPoint 2007应用程序中(在此以Microsoft Word 2007为例),只要按下【Alt】键,菜单栏之上的按钮或菜单项就会显示各自的快捷键,再也不需要去记忆快捷键了,如图1所示。图1 显示快捷键对于具有级联命令的按钮或菜单项,如“文件”、“开始”、“插入”、“页面布局”、“引用”、“邮件”、“审阅”、“视图”等,还可以根据图示按下对应的字母或字母+数字键显示相应的快捷键。例如,要显示“开始”菜单下各个命令的快捷键,只需先按下【Alt】键,再按下【H】键即可,之后再根据需要执行的命令,单击相应的快捷键www.zgxue.com防采集请勿采集本网。

什么是Flyway?

1、将书的目录选熟悉,脑海有一个基本的知识体系结构,即知识结构图(树形图)。2、政治知识基本上都是:是什么、为什么、怎么样的问题。3、每个知识点都找到关键字词,每个问题基本就记几个词,

转载:https://blog.waterstrong.me/flyway-in-practice/

你可以申请一个百度知道账号,有个百度Hi 的登陆器,你可以下载,你就可以掌控百度的那些问题咯。

Flyway is an open-source database migration tool. It strongly favors simplicity and convention over configuration.

看数呗 结合实际 看一点实践一点 到键盘上去找找音 比划比划 还是挺好懂的 后面有宫商角征羽那些调式调性的可能会难点 要花点时间 总之一句话 多看多问

Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

全套识图教程去我的网盘下载,地址可以发送到你的邮箱,还有许多其它精品建筑资料可以下载!

Flyway主要基于6种基本命令:Migrate,Clean,Info,Validate,BaselineandRepair,稍候会逐一分析讲解。目前支持的数据库主要有:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix.

是汽车的方向盘吗?师傅教我们左手10点钟,右手3点钟,两臂微弯,两肩放松,头正目视前方。

关于Flyway的优势,支持的数据库以及与其他数据库版本工具的对比,可以阅读Flyway官网介绍

为什么使用Flyway?

通常在项目开始时会针对数据库进行全局设计,但在开发产品新特性过程中,难免会遇到需要更新数据库Schema的情况,比如:添加新表,添加新字段和约束等,这种情况在实际项目中也经常发生。那么,当开发人员完成了对数据库更的SQL脚本后,如何快速地在其他开发者机器上同步?并且如何在测试服务器上快速同步?以及如何保证集成测试能够顺利执行并通过呢?

假设以Spring Boot技术栈项目为例,可能有人会说,本地使用Hibernate自动更新数据库Schema模式,然后让QA或DEV到测试服务器上手动执行SQL脚本,同时可以写一个Gradle任务自动执行更新。

个人觉得,对于Hibernate自动更新数据库,感觉不靠谱,不透明,控制自由度不高,而且有时很容易就会犯错,比如:用SQL创建的某个字段为VARCHAR类型,而在Entity中配置的为CHAR类型,那么在运行集成测试时,自动创建的数据库表中的字段为CHAR类型,而实际SQL脚本期望的是VARCHAR类型,虽然测试通过了,但不是期望的行为,并且在本地bootRun或服务器上运行Service时都会失败。另外,到各测试服务器上手动执行SQL脚本费时费神费力的,干嘛不自动化呢,当然,对于高级别和PROD环境,还是需要DBA手动执行的。最后,写一段自动化程序来自动执行更新,想法是很好的,那如果已经有了一些插件或库可以帮助你更好地实现这样的功能,为何不好好利用一下呢,当然,如果是为了学习目的,重复造轮子是无可厚非的。

其实,以上问题可以通过Flyway工具来解决,Flyway可以实现自动化的数据库版本管理,并且能够记录数据库版本更新记录,Flyway官网对Why database migrations结合示例进行了详细的阐述,有兴趣可以参阅一下。

Flyway如何工作的?

Flyway对数据库进行版本管理主要由Metadata表和6种命令完成,Metadata主要用于记录元数据,每种命令功能和解决的问题范围不一样,以下分别对metadata表和这些命令进行阐述,其中的示意图都来自Flyway的官方文档。

Metadata Table

Flyway中最核心的就是用于记录所有版本演化和状态的Metadata表,在Flyway首次启动时会创建默认名为SCHEMA_VERSION的元数据表,其表结构为(以MySQL为例):

Field Type Null Key Default
version_rank int(11) NO MUL NULL
installed_rank int(11) NO MUL NULL
version varchar(50) NO PRI NULL
description varchar(200) NO   NULL
type varchar(20) NO   NULL
script varchar(1000) NO   NULL
checksum int(11) YES   NULL
installed_by varchar(100) NO   NULL
installed_on timestamp NO   CURRENT_TIMESTAMP
execution_time int(11) NO   NULL
success tinyint(1) NO MUL NULL

Flyway官网上提供了一个很清晰的示例How Flyway works,可以参阅一下。

Migrate

Migrate是指把数据库Schema迁移到最新版本,是Flyway工作流的核心功能,Flyway在Migrate时会检查Metadata(元数据)表,如果不存在会创建Metadata表,Metadata表主要用于记录版本变更历史以及Checksum之类的。

Migrate时会扫描指定文件系统或Classpath下的Migrations(可以理解为数据库的版本脚本),并且会逐一比对Metadata表中的已存在的版本记录,如果有未应用的Migrations,Flyway会获取这些Migrations并按次序Apply到数据库中,否则不需要做任何事情。另外,通常在应用程序启动时应默认执行Migrate操作,从而避免程序和数据库的不一致性。

Clean

Clean相对比较容易理解,即清除掉对应数据库Schema中的所有对象,包括表结构,视图,存储过程,函数以及所有的数据等都会被清除。

Clean操作在开发和测试阶段是非常有用的,它能够帮助快速有效地更新和重新生成数据库表结构,但特别注意的是:不应在Production的数据库上使用!

Info

Info用于打印所有Migrations的详细和状态信息,其实也是通过Metadata表和Migrations完成的,下图很好地示意了Info打印出来的信息。

Info能够帮助快速定位当前的数据库版本,以及查看执行成功和失败的Migrations。

Validate

Validate是指验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。

Validate原理是对比Metadata表与本地Migrations的Checksum值,如果值相同则验证通过,否则验证失败,从而可以防止对已经Apply到数据库的本地Migrations的无意修改。

Baseline

Baseline针对已经存在Schema结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。

Baseline可以应用到特定的版本,这样在已有表结构的数据库中也可以实现添加Metadata表,从而利用Flyway进行新Migrations的管理了。

Repair

Repair操作能够修复Metadata表,该操作在Metadata表出现错误时是非常有用的。

Repair会修复Metadata表的错误,通常有两种用途: 移除失败的Migration记录,该问题只是针对不支持DDL事务的数据库。 重新调整已经应用的Migratons的Checksums值,比如:某个Migratinon已经被应用,但本地进行了修改,又期望重新应用并调整Checksum值,不过尽量不要这样操作,否则可能造成其它环境失败。

如何使用Flyway?

这里将主要关注在Gradle和Spring Boot中集成并使用Flyway,数据库通常会采用MySQL、PostgreSQL、H2或Hsql等。

正确创建Migrations

Migrations是指Flyway在更新数据库时是使用的版本脚本,比如:一个基于Sql的Migration命名为V1__init_tables.sql,内容即是创建所有表的sql语句,另外,Flyway也支持基于Java的Migration。Flyway加载Migrations的默认Locations为classpath:db/migration,也可以指定filesystem:/project/folder,其加载是在Runtime自动递归地执行的。

除了需要指定Location外,Flyway对Migrations的扫描还必须遵从一定的命名模式,Migration主要分为两类:Versioned和Repeatable。

Versioned migrations

一般常用的是Versioned类型,用于版本升级,每一个版本都有一个唯一的标识并且只能被应用一次,并且不能再修改已经加载过的Migrations,因为Metadata表会记录其Checksum值。其中的version标识版本号,由一个或多个数字构成,数字之间的分隔符可以采用点或下划线,在运行时下划线其实也是被替换成点了,每一部分的前导零会被自动忽略。

Repeatable migrations

Repeatable是指可重复加载的Migrations,其每一次的更新会影响Checksum值,然后都会被重新加载,并不用于版本升级。对于管理不稳定的数据库对象的更新时非常有用。Repeatable的Migrations总是在Versioned之后按顺序执行,但开发者必须自己维护脚本并且确保可以重复执行,通常会在sql语句中使用CREATE OR REPLACE来保证可重复执行。

默认情况下基于Sql的Migration文件的命令规则如下图所示:

其中的文件名由以下部分组成,除了使用默认配置外,某些部分还可自定义规则。 prefix: 可配置,前缀标识,默认值V表示Versioned,R表示Repeatable version: 标识版本号,由一个或多个数字构成,数字之间的分隔符可用点.或下划线_ separator: 可配置,用于分隔版本标识与描述信息,默认为两个下划线__ description: 描述信息,文字之间可以用下划线或空格分隔 suffix: 可配置,后续标识,默认为.sql

另外,关于如何使用基于Java的Migrations,有兴趣可以参考Java-based migrations。

支持的数据库

目前Flyway支持的数据库还是挺多的,包括:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。

目前来说,个人用得比较多的数据库是PostgreSQL、MySQL、H2和Hsql,针对每种数据库的flyway.url示例配置为:

另外,关于如何使用基于Java的Migrations,有兴趣可以参考Java-based migrations

支持的数据库

目前Flyway支持的数据库还是挺多的,包括:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。

目前来说,个人用得比较多的数据库是PostgreSQLMySQLH2Hsql,针对每种数据库的flyway.url示例配置为:

# PostgreSQLflyway.url = jdbc:postgresql://localhost:5432/postgres?currentSchema=myschema# MySQLflyway.url = jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC&useSSL=true# H2flyway.url = jdbc:h2:./.tmp/testdb# Hsqlflyway.url = jdbc:hsqldb:hsql//localhost:1476/testdb

Flyway命令行

Flyway的命令行工具支持直接在命令行中运行Migrate,Clean,Info,Validate,BaselineRepair6种命令,不需要借助其他Build工具,不需要应用程序运行在JVM中,只需要单纯的命令行即可,但需要根据不同的操作系统下载并安装该命令行工具。Flyway会依次搜索以下配置文件,越靠后的配置会覆盖靠前的配置: /conf/flyway.conf /flyway.conf /flyway.conf

一个典型Flyway项目示例目录结构如下:

更多关于Flyway命令行使用可以参考Flyway Command-line

在Gradle中的应用

首先需要在Gradle中引入Flyway插件,通常有两种方式:

方式一:采用buildscript依赖方式。

buildscript {repositories {mavenCentral()}dependencies {classpath("org.flywaydb:flyway-gradle-plugin:4.0.3")}}apply plugin: 'org.flywaydb.flyway'

方式二(推荐):采用DSL方式引用Plugins。

plugins {id "org.flywaydb.flyway" version "4.0.3"}

而在Gradle中配置Flyway Properties有两种方式:

方式一:在build.gradle中配置Flyway Properties。

flyway {url = jdbc:h2:./.tmp/testdbuser = sapassword =}# 或者写成:project.ext['flyway.url'] = 'jdbc:h2:./.tmp/testdb'project.ext['flyway.user'] = 'sa'project.ext['flyway.password'] = ''

方式二:在gradle.properties中配置Flyway Properties。

flyway.url = jdbc:h2:./.tmp/testdbflyway.user = saflyway.password =

如果期望在运行Gradle Clean/Build Tasks时自动执行Flyway的某些任务,可以设置dependsOn,若不期望隐式执行Flyway任务,可以不配置。

clean.dependsOn flywayRepair # To repair the Flyway metadata tablebuild.dependsOn flywayMigrate # To migrate the schema to the latest version

另外,其它Tasks:flywayInfo,flywayValidate,flywayBaseline分别对应到Flyway的命令。在使用Spring Boot时,运行./gradlew bootRun会自动检查并加载最新的db.migration脚本。

特别注意:在Production环境中不应执行./gradlew flywayClean,除非你知道自己的行为和目的,因为该命令会清除所有的数据库对象,相当危险。

更多关于Flyway在Gradle中的使用请参阅Flyway Gradle Plugin

与Spring Boot集成

在Spring Boot中,如果加入Flyway的依赖,则会自动引用Flyway并使用默认值,但可以修改并配置FlywayProperties

flyway.baseline-description= # The description to tag an existing schema with when executing baseline.flyway.baseline-version=1 # Version to start migration.flyway.baseline-on-migrate=false # Whether to execute migration against a non-empty schema with no metadata tableflyway.check-location=false # Check that migration scripts location exists.flyway.clean-on-validation-error=false # will clean all objects. Warning! Do NOT enable in production!flyway.enabled=true # Enable flyway.flyway.encoding=UTF-8 # The encoding of migrations.flyway.ignore-failed-future-migration=true # Ignore future migrations when reading the metadata table.flyway.init-sqls= # SQL statements to execute to initialize a connection immediately after obtaining it.flyway.locations=classpath:db/migration # locations of migrations scripts.flyway.out-of-order=false # Allows migrations to be run "out of order".flyway.placeholder-prefix= # The prefix of every placeholder.flyway.placeholder-replacement=true # Whether placeholders should be replaced.flyway.placeholder-suffix=} # The suffix of every placeholder.flyway.placeholders.*= # Placeholders to replace in Sql migrations.flyway.schemas= # Default schema of the connection and updatingflyway.sql-migration-prefix=V # The file name prefix for Sql migrationsflyway.sql-migration-separator=__ # The file name separator for Sql migrationsflyway.sql-migration-suffix=.sql # The file name suffix for Sql migrationsflyway.table=schema_version # The name of Flyway's metadata table.flyway.url= # JDBC url of the database to migrate. If not set, the primary configured data source is used.flyway.user= # Login user of the database to migrate. If not set, use spring.datasource.username value.flyway.password= # JDBC password if you want Flyway to create its own DataSource.flyway.validate-on-migrate=true # Validate sql migration CRC32 checksum in classpath.

若使用Gradle,通常在build.gradle引入org.flywaydb:flyway-core:4.0.3依赖后即可使用。可能会有以下几种需求: 在本地Run和Tests都会使用内存数据库,其中的spring.jpa.hibernate.ddl-auto都设置为validate,Schema不需要Hibernate自动生成,并期望使用Flyway,而在线上环境会使用真实数据库,并不期望使用Flyway,如何实现呢? 解决方案:可以在common.properties中配置flyway.enabled=false,然后在local或dev的配置中启用Flyway即可。通常推荐使用此模式,毕竟可以对不同的环境进行控制,另外本地Run不会依赖真实数据库,又能保证数据库Schema是按脚本创建的。 在运行Tests会使用内存数据库,有单独的配置文件,不使用Flyway,而在本地bootRun时会使用真实数据库,使用Flyway,毕竟不想每次Schema改后都在本地手动去执行脚本,如何实现?

解决方案:设置bootRun.dependsOn动态添加Flyway的依赖即可:

addFlywayDenpendency {doLast {dependencies {compile('org.flywaydb:flyway-core:4.0.3')}}}bootRun.dependsOn=addFlywayDenpendency

若项目有多个团队同时开发不同的功能,需要新建多个分支,并且都会涉及到数据库Schema更改,当后期Merge时,Migration的版本如何控制并且不会产生数据库更改的冲突呢?

解决方案:如果两个分支的数据库更改有冲突,要么最初数据库设计不合理,要么目前数据库更改不合理,所以需要团队进行全局考虑和协调。而针对数据库在同一段时间有修改,但不会造成冲突的情况,通常实际项目中主要存在这样的情况,那可以设置flyway.out-of-order=true,这样允许当v1和v3已经被应用后,v2出现时同样也可以被应用。其实在本地使用内存数据库不会存在该问题,因为数据库所有对象会自动清除掉,而在local或dev中使用真实数据库时可遇到这样的问题,因此需要注意一下了。

另外,值得一提的是Flyway的参数ignore-failed-future-migration默认为true,使用情形为:当Rollback数据库更改到旧版本,而metadata表中已存在了新版本时,Flyway会忽略此错误,只会显示警告信息。

结束语

总得来说,Flyway可以有效改善数据库版本管理方式,如果项目中还未使用,不防尝试一下。如果有兴趣,也可以关注MyBatis Migration,功能支持没有Flyway多,属于更轻量级的数据库版本管理工具。如果在使用过程中遇到了问题或坑,欢迎留言一起交流讨论。

References

Flyway Documentation

Gradle Plugin: Flyway

Spring Common application properties

Execute Flyway database migrations on startup

到此这篇关于快速掌握和使用Flyway的详细教程的文章就介绍到这了,更多相关使用Flyway的技巧内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

如何快速掌握LabelShop软件中的功能,解答如下1、如何快速更改标签显示比例:在LabelShop底部状态栏的右侧有一个显示比例滑动杆,单击两侧的按钮或直接移动滑杆,就可快速更改显示比例。2、如何使标签完全显示在窗口中:使用撑满窗口工具。3、如何预览多个标签:执行打印命令,在打印对话框中输入需要预览的标签数目,再执行预览命令。4、如何从一页由左下角开始输出标签:改变标签设置对话框中其它选项卡中的起始位置为“左下角”即可。5、标签纸上面已打印了一部分标签,如何继续使用:您可在打印对话框中选择第一个标签的输出位置。6、如何使已排好的对象不被移动:选取该对象,通过设置锁定属性锁定该对象的位置。7、如何为标签设置一个不输出的参考背景:可将背景对象设置为具有“不打印输出”属性的对象。8、如何使一个对象不被打印输出:通过设置该对象的“不打印输出”选项实现。9、如何在编辑标签格式时不选中非打印对象:通过设置程序选项中的“不选中非打印对象实现”。10、如何打印号码顺序变化的标签:可以使用“序列号”类型的变量。11、如何将多个对象的数据设定为同一个数据:使用共享变量。12、如何提高专用条码打印机的输出速度:选择并口的打印机,尽量使用打印机字体,使用LabelShop安装盘上的打印机驱动程序。13、如何为每个标签输出不同的图片:使用数据库和具有“数据源图片”属性的图片。14、如何输入EAN128条码的FNC1字符:选中“EAN128”条码,在数据中输入“^1”即为FNC1字符。15、如何实现一些复杂的数据格式化处理功能:可以在通过脚本数据类型中编写VBScript实现。16、如何实现LabelShop中未包括的校验算法:使用VBScript功能。17、如何让VBScript运行起来:LabelShop默认不执行VB脚本,需要在系统选项中进行设置允许执行脚本。18、如何中止并修改错误的脚本:当脚本进入死循环时,需要强制中止LabelShop,并在系统设置中禁止脚本执行,然后再打开出错的标签格式,修改出错的脚本。19、如何在输出时快速更改数据:可以使用“数据”工具。20、如何实现证卡的双面位置对齐:可以将证卡的反面的标签起始位置设定为右上角,同时使用对齐标记。21、如何快速画出一些间距相等的线:首先画出全部线条,然后确定第一条和最后一条线的位置,再使用水平或垂直间距相同命令。22、如何建立一个新的标签设置:在新建标签时随意选择一个标签设置,然后在此基础上进行修改。23、如何使邮政编码精确打印在信封的邮编框中:需要设置字间距。24、如何将版面功分成多个区域:可以使用标签分块功能。25、如何输出长字或扁字:设置字体属性中的“字体宽度方向缩放倍数”。26、如何实现字体的反相输出:设置字体属性中的“黑底白字”。27、如何更改条码的大小:改条码的X方向尺寸。28、如何在数据输出时在数据中插入字符(如空格):使用字符模板。29、如何使标签内容与模切的标签纸对齐:设置标签格式的位置微调或标签格式的左边空和上边空。30、标签中图像为什么显示不出来?标签中的图像曾经能够显示,但现在却显示不出来了。出现这种情况的多数原因是:(1)图像对象属性中图象文件名指定的路径不正确,或原来没有指定路径名,但当前系统所在的目录与原图像默认的路径名不一致。(2)所指定路径下没有该图像文件或图像文件已被删除。解决方法:(1)可以重新设置图像文件的路径名。(2)将图像复制到指定路径下。对于新引入的图片,可能是该图片的格式不被LabelShop支持(例如CMYK的图片)。解决办法:在PhotoShop等图像处理软件中重新将图片另存为LabelShop支持的格式(如BMP或RGB的TIF格式)。31、为什么有些对象无法移动?在运行LabelShop时,移动选定的对象会出现有些对象发生了移动,而有些对象却无法移动,出现这种情况的原因时由于每个对象都有一个特征,即位置锁定。如果要更改这一特征,用鼠标左键双激对象,弹出属性对话框,在“常规”项目中,修改位置锁定属性内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 深入浅析java中flyway使用简介
  • spring boot项目使用flyway的详细教程
  • java 中flyway的使用详解
  • 浅谈springboot之开启数据库迁移的flyway使用
  • 详解spring boot中使用flyway来管理数据库版本
  • 三大uml建模工具visio、rational rose、powerdesign的区别比较
  • 有效的提高编程技能的12个方法
  • git stash暂存的操作方法
  • 日历控件和天气使用分享
  • 真伪静态区别方法分析
  • 关于页面刷新,事件重复提交的方法分享
  • 网站分站的实现方法
  • xmlhttp ie6下不跨域还提示没有权限,ie8下不会有这错误
  • 高性能web开发 为什么要减少请求数,如何减少请求数!
  • windows下gitbash安装教程(小白教程)
  • 如何快速掌握LabelShop软件中的功能
  • 如何快速掌握和使用OFFICE快捷键怎么办
  • 如何快速掌握使用auocad
  • 怎样快速掌握MindMapper的用法
  • 怎样快速掌握一本书的知识框架
  • 如何快速掌握和操作百度知道?
  • 怎么快速掌握乐理知识
  • 如何快速掌握建筑识图
  • 怎么快速掌握方向盘的使用
  • EXCEL表格中的函数怎么使用,快速掌握的计巧
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页相关技巧深入浅析java中flyway使用简介spring boot项目使用flyway的详细教程java 中flyway的使用详解浅谈springboot之开启数据库迁移的flyway使用详解spring boot中使用flyway来管理数据库版本三大uml建模工具visio、rational rose、powerdesign的区别比较有效的提高编程技能的12个方法git stash暂存的操作方法日历控件和天气使用分享真伪静态区别方法分析关于页面刷新,事件重复提交的方法分享网站分站的实现方法xmlhttp ie6下不跨域还提示没有权限,ie8下不会有这错误高性能web开发 为什么要减少请求数,如何减少请求数!windows下gitbash安装教程(小白教程)2019最新的pycharm激活码(推荐)进制转换算法原理(二进制 八进制eclipse 格式化代码时不换行与自微信小程序设置http请求的步骤详几款开源的中文分词系统十进制负数转换为二进制、八进制从console.log说起(console.log详url 长度有限制吗?git 撤销操作、删除文件和恢复文详解版本控制利器git,svn的异同以及适用git标签管理详解如何将本地项目上传到github的方法步phpmyadmin“无法载入 mysql 扩展, 请检git 教程之标签详解git初次使用时的安装配置图文教程微信 小程序开发环境搭建详细介绍微信小程序 iphonex底部安全区域(底部小从console.log说起(console.log详细介绍)
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved