Gradle教程

1.简介

在本课程中,我们将学习Gradle ,它是一个构建工具和一个依赖管理系统,与Maven和Ant非常相似,并且是专门为构建基于Java的项目而设计的。

与Maven和Ant构建系统不同,Gradle不使用XML。 它实际上是基于Groovy构建在DSL中的。 与基于XML的其他构建系统相比,基于Groovy的Gradle脚本的最大优势是可以使构建脚本更小,更简洁。 就像Maven构建文件称为pom.xml ,Gradle的配置文件build.gradle惯例也称为build.gradle 。 在本课程中,我们将研究Gradle的核心概念,并建立一个基于Spring Boot的简单项目。 即使您不是Spring Developer,您仍然可以按照定义课程的方式进行操作,这样框架就不会在学习Gradle概念时引入任何障碍。 让我们开始行动吧!

目录

1.简介 2. Gradle核心概念 3.安装Gradle 4.设置示例项目 5.运行摇篮
5.1运行任务 5.2运行多个任务 5.3任务名称缩写 5.4排除任务 5.5安静模式 5.6列出构建脚本中的任务 5.7明确指定构建脚本 5.8指定项目 5.9列出子项目 5.10 Gradle帮助
6.定义和使用Gradle任务
6.1定义Gradle任务 6.2任务执行阶段 6.3任务定义的较短语法
7.始终在安静模式下运行Gradle 8.扩展Java Spring Boot项目
8.1定义控制器 8.2使用Gradle运行项目 8.3试用API
9.摇篮包装 10.蚂蚁vs Maven vs Gradle 11.结论 12.下载源代码

2. Gradle核心概念

Gradle构建系统背后的核心概念可以归纳为三个主要功能。 他们是:

  1. 项目:您要构建的软件
  2. 任务:这些是实际构建项目的动作
  3. 构建脚本:这是包含构建项目的任务的脚本

要了解它们之间的关系,让我们一起研究它们。 因此,一个项目就是您要构建的东西。 任务是构建项目的动作。 具体来说,可能存在编译源代码的任务,从而生成可执行文件,如WAR或JAR文件。 基于Gradle的项目可以包含许多任务以执行以构建项目。

这些任务在构建脚本文件中定义 ,可以由Gradle执行以按指定顺序运行每个任务。 甚至可以使用gradle命令选择特定任务以仅运行指定任务。 这些任务在项目根目录中的build.script文件中定义。 通常,一个项目只有一个构建文件

3.安装Gradle

在开始使用Gradle命令并开始定义Gradle任务之前,我们必须在系统上安装Gradle。 请注意,Gradle需要运行JDK 6或更高版本。 Gradle将使用在系统的PATH环境中找到的Java JDK作为JAVA_HOME 。 如果您想要的Java版本与实际使用的版本不同,只需将JAVA_HOME环境变量指向该Java版本,Gradle将开始使用它。 您可以使用以下简单命令确保在系统上安装了Java:

检查Java版本

java -version

您应该会看到以下内容:

检查java版本

检查java版本

确认Java版本后, 下载要安装的Gradle版本,然后将其解压缩到要安装Gradle的目录中。将Gradle解压缩到安装目录中后,将DIRECTCRY_PATH/bin添加到PATH环境变量中。 添加路径的DIRECTCRY_PATH部分必须是Gradle安装目录的完整路径(而不是“ DIRECTCRY_PATH”作为文本)。 完成此操作后,我们可以使用以下命令以与Java相同的方式检查Gradle版本:

检查Gradle版本

gradle -version

您应该会看到以下内容:

摇篮版本

摇篮版本

即使我们已经安装了Gradle,即使您没有安装Gradle并按照下一节中的描述制作示例项目,也可以按照本课程进行操作。 gradle构建脚本将独立包含在该项目中,并且不需要在系统本身上显式安装Gradle。 那不是很好吗?

4.设置样本项目

在本课中,我们将使用最流行的Web工具之一来制作示例项目,并且不会从命令行执行它,而是使用Spring Initializr 。 只需在浏览器中打开链接并进行浏览即可。 要设置我们的项目,我们使用以下配置:

Spring Initializr配置

Spring Initializr配置

如图所示,我们添加了一个依赖关系,但这并不重要。 解压缩该项目,并在您喜欢的任何文本编辑器中打开存在于项目根目录中的build.gradle文件。 对于此项目,文件将如下所示:

build.gradle

buildscript {ext {springBootVersion = '2.0.1.RELEASE'}repositories {mavenCentral()}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")}
}apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'group = 'com.javacodegeeks.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8repositories {mavenCentral()
}dependencies {compile('org.springframework.boot:spring-boot-starter-web')testCompile('org.springframework.boot:spring-boot-starter-test')
}

在上面的脚本文件中,我们看到在文件中指定了一些插件。 我们使用的第一个插件是Java插件。 该插件提供了一些预定义的配置和任务,使我们能够非常轻松地构建Java项目。 它利用类似Maven的源集在指定项目中查找源代码。

Source-Set定义为一种配置,它通知插件在哪里寻找用于编译和测试任务的源代码。 默认情况下,Java源代码位于src / main / java下 ,而测试包位于src / test / java下 。 除非另有说明,否则将在相同目录中搜索源代码。

除了插件之外,我们还向项目添加了一些依赖项 。 Gradle知道从我们定义的存储库部分中寻找这些依赖项的位置。 我们指定对于任何依赖关系解决方案,Gradle应该引用Maven中央存储库来下载运行项目所需的任何所需JAR。

5.运行摇篮

打开命令行终端,然后切换到项目的根目录。 由于该项目基于Gradle,并且我们也在系统上安装了Gradle,因此我们现在可以运行Gradle。 让我们看看如何做到这一点:

跑步摇篮

gradle

这将在项目根目录中存在的build.gradle文件上运行Gradle。

5.1运行任务

Gradle构建脚本包含一个或多个我们可以执行的任务。 我们可以通过简单地将任务名称放在gradle命令之后来在项目上执行任务:

运行单个任务

gradle compileCode

上面的命令将触发上述任务,以编译项目代码。 如前所述,由于构建文件中存在适当的Java插件,因此Gradle将能够找到项目的源代码。

5.2运行多个任务

就像我们在上一节中将任务名称放在gradle命令之后执行单个任务一样,我们甚至可以一次执行多个任务以指定顺序执行它们。 让我们看看如何做到这一点:

运行多个任务

gradle clean build

该命令将首先执行clean任务。 该任务完成后,将自动触发install任务。 一旦运行此命令,我们将看到类似以下内容:

执行多项任务

执行多项任务

为了说明这一点,即使您多次提及同一任务,该任务也只会执行一次。 就像下面的命令:

运行多个任务

gradle clean clean

即使多次提到clean任务,它也只会执行一次,不会执行两次。

5.3任务名称缩写

不必键入完整的任务名称即可执行它。 就像,对于clean任务,我们可以这样写:

任务缩写

gradle c

如果名称与其他任务没有冲突,则gradle将查找干净任务并执行。 当我们运行它时,它失败了,因为有多个任务以字符c开始:

任务缩写

任务缩写

该错误清楚地表明可能的候选对象是:“检查”,“类”,“干净”,“组件”。 因此,在这种情况下,我们需要更加具体。 但是,以下命令将正常运行:

任务缩写

gradle cle

这将执行clean任务。 这样,Gradle提供了一种对开发人员友好的方式,即使提供了便利的约定和命令行实用程序,我们也不必手动缩短命令。

5.4排除任务

有些Gradle任务也依赖于其他任务。 因此,当您执行主要任务时,它将触发执行它所依赖的所有任务。 尽管这不会造成任何问题,但是会减慢构建过程。 考虑一种情况,当您想要执行构建任务时。 它也会触发testtestClasses任务,但是您知道test任务将在您测试所有测试用例时成功完成,因此您可能想忽略它以加快过程。 可以使用-x开关来完成,如下所示:

忽略任务

gradle build -x test

5.5安静模式

执行任务时,Gradle将大量消息输出到控制台。 如果您希望执行一些安静的任务,可以使用如图所示的-q开关来安静地执行任务,而不会产生控制台消息:

静音模式

gradle -q compileCode

当您编写脚本以使用自动生成和部署文件或代码管道来部署项目时,安静模式非常有用。 这样,在gradle任务执行过程中不会在日志文件中填充不必要的日志消息。

5.6列出构建脚本中的任务

当我们要列出构建脚本中显示的所有任务时,我们可以简单地运行以下命令:

列出所有任务

gradle tasks

对于我们的项目,我们将看到已经定义了许多任务:

列出所有可用的Gradle任务

列出所有可用的Gradle任务

我们看到与每个任务有关的信息。 这提供了一种便捷的方式,使我们可以获取有关脚本中定义的插件中预定义的每个任务的信息。

5.7明确指定构建脚本

即使Gradle自动在项目的根目录中选择默认的build.gradle文件,但如果您想以其他方式命名该文件,则可以在gradle名称中提供一个名称,以供您选择要用作配置文件的文件借助-b开关:

pom.xml

gradle -b build.gradle build

5.8指定项目

如果要构建的项目包含要以独立模式构建的子项目,则甚至可以使用-p选项指定要执行的项目:

执行子项目

gradle -p subproject-directory build

5.9列出子项目

我们可以用一个简单的命令列出主项目中包含的所有子项目(在该项目的Gradle构建脚本中指定):

列出子项目

gradle projects

当您查看公共项目并想确定项目中包括所有子项目时,此命令非常有用。

5.10 Gradle帮助

如果您需要与任何gradle命令和任务有关的帮助,我们可以运行一个简单的命令来获取有关可以执行的各种任务和命令的信息:

pom.xml

gradle -h

我们将提供Gradle命令的选项的详细列表:

摇篮帮助

摇篮帮助

6.定义和使用Gradle任务

Gradle任务定义了构建项目所需的操作。 没有任务,我们的构建脚本将不会在Gradle执行时构建任何内容。 现在,我们将看到如何在上面已经定义的项目中完成自己的任务。

6.1定义Gradle任务

让我们在build.gradle文件中定义一个新的Gradle Task,如下所示:

build.gradle

task hello { println "Hello, JavaCodeGeeks." 
}

我们可以执行定义为的任务:

运行我们的任务

gradle hello

我们将看到输出为:

在Gradle中运行我们自己的任务

在Gradle中运行我们自己的任务

6.2任务执行阶段

执行Gradle任务时,它将经过两个执行阶段,然后评估结果。 这些阶段是:

  • 第一
  • 持续

在内部,Gradle任务表示为一个对象。 要开始执行第一阶段,我们必须调用已定义的方法之一,将闭包作为参数传递(闭包是匿名函数)。 各自的构建阶段方法是:

  • doFirst()
  • doLast()

让我们看一个有关如何在任务中调用这两个方法的示例:

调用阶段方法

task hellohello.doFirst({println "First method"
});hello.doLast({println "Last method"
});

当我们使用命令执行这些方法时:

运行我们的任务

gradle hello

我们将看到输出为:

在Gradle中运行我们自己的任务

运行分阶段任务

如前所述,我们首先定义了一个名为hello的任务。 接下来,我们定义并调用doFirst()方法,并传递一个闭包作为包含打印语句的参数。 类似地定义了下一个方法doLast() ,该方法本质上执行相同的操作。 运行任务时,我们可以看到这两个方法以相同的顺序被调用。

6.3任务定义的较短语法

使用Groovy,优化代码的可能性比其他语言要高得多。 我们在上一节中编写的分阶段任务定义中也可以做到这一点。 这是我们可以对定义的代码执行的改进:

  • 如果带有方法调用的代码行以新行结尾,则无需在每个方法定义的末尾使用分号。
  • 由于闭包是匿名函数,因此我们不需要闭包中存在的语句周围的括号。

通过这些优化,我们的代码将如下所示:

调用阶段方法

task hellohello.doFirst{println "First method"
}hello.doLast{println "Last method"
}

当然,此执行阶段的输出将与之前相同。 您通常会在Gradle官方文档和其他Gradle教程中经常看到较短的语法,因为它更加直接和简洁。

7.始终在安静模式下运行Gradle

开始构建后,当前无法在安静模式下运行Gradle。 我们可以找到当前值,但是在执行任何代码时它是只读的。

的LogLevel可以通过由它的脚本gradle这个对象来访问startParamater

获取Gradle日志级别

LogLevel level = gradle.startParameter.logLevel
println "Current logging level: $level"

如果我们想让日志记录不总是发送到控制台,则可以使用Gradle的内置记录器:

仅在INFO上打印

project.logger.info("This gets printed only if caller uses --info flag on command line.")

然后,对于我们的事件,我们希望控制台记录器使用lifecycle级别:

消息总是打印

project.logger.lifecycle('my message that will always print')

8.扩展Java Spring Boot项目

在本节中,我们将在所建立的项目中添加少量Java代码,并了解如何使用项目本身随附的构建脚本和Gradle包装器来运行它。 如果在您喜欢的IDE中打开项目,您将看到它仅包含一个带有以下代码的类:

JcgGradleTutorialApplication.java

package com.javacodegeeks.example.JCGGradleTutorial;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class JcgGradleTutorialApplication {public static void main(String[] args) {SpringApplication.run(JcgGradleTutorialApplication.class, args);}
}

我们将在下一部分中修改此类,以使其成为成熟的Spring Boot项目。

8.1定义控制器

我们将在上面定义的类中进行小的修改,以将其转变为成熟的Spring Boot控制器类,以便我们也向其中定义API。 这是我们将使用的代码:

JcgGradleTutorialApplication.java

package com.javacodegeeks.example.JCGGradleTutorial;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class JcgGradleTutorialApplication {public static void main(String[] args) {SpringApplication.run(JcgGradleTutorialApplication.class, args);}@RequestMapping(value = "")public String helloWorld() {return "Hello Java Geek!";}
}

现在,控制器已准备就绪,我们可以继续运行项目。 另外,为了更深入地了解Sprint Boot项目和Controllers的工作方式,请阅读Spring Boot Tutorial 。

8.2使用Gradle运行项目

我们下载的项目带有Gradle包装器。 该包装器包含Gradle脚本,即使没有在我们运行项目的系统中安装Gradle,也可以使用这些脚本来运行项目。 我们可以使用以下命令运行项目:

运行项目

./gradlew spring-boot:run

请注意,在运行项目之前,请删除我们定义的任务,因为它可能会更改其他任务,并且您可能无法运行该项目。 完成此操作后,我们可以尝试下一节中刚刚制作的API。

8.3试用API

项目启动并运行后,请访问以下URL:

项目网址

localhost:8080

我们将看到以下消息:

运行项目

运行项目

优秀的! 使用一个命令,我们就能用几行代码运行定义的完整Spring引导项目。

9.摇篮包装

为了轻松执行项目,Gradle还提供了包装器,这样我们就不必在安装和运行基于Gradle构建系统构建的项目的每台机器上都安装Gradle。 就像我们上面定义的项目一样,它包含一些文件,这些文件是适用于各种操作系统的Gradle包装器,例如:

  • gradlew是执行Gradle任务的Shell脚本文件
  • gradlew.bat 文件是执行Gradle任务的Windows批处理脚本
  • ./gradle是一个目录,其中包含Gradle包装器JAR和一个属性文件,指示我们正在使用的版本和其他配置。 这个明确的版本定义确保对Gradle的任何更新都不会破坏该项目

要使用Gradle包装文件运行项目,如果使用Linux / OSX,则运行gradlew文件;如果使用Windows OS,则运行gradlew.bat文件。 Gradle包装器提供的另一个advantageGradle是,如果要切换到较新版本的Gradle,只需更改gradle-wrapper.properties的条目。

10.蚂蚁vs Maven vs Gradle

整个行业使用的三种最受欢迎​​的构建系统是Ant,Maven和Gradle。 在比较这些系统时,每个系统各有优缺点。 让我们对这些系统中的每一个进行快速检查,以查看电源所在。

蚂蚁于2000年发布,易于学习和实施。 它遵循XML脚本格式,但明显的缺点是XML本质上是分层的,因此不适合过程编程方法。 此外,即使项目相对较小,带有Ant的XML文件也往往会变大。

Maven于2004年问世,它对ANT进行了重大改进,但它继续为其脚本使用XML格式。 增加的最大优点是能够通过网络下载所需的依赖项 。 社区感到,目标目标的自定义仍然很困难,并且当同一库以不同版本多次下载时,依赖项管理不能很好地处理冲突

Gradle于2012年发布,当Google将其用作Android OS的默认构建工具时,它获得了很大的吸引力。 Gradle不使用XML。 相反,它具有基于Groovy(JVM语言之一)的自己的DSL。 结果,Gradle构建脚本往往比为Ant或Maven编写的脚本更短,更清晰。 由于其自身的依赖关系解析引擎的存在以及多年来的巨大改进,其构建变得比Maven和Ant 更快

11.结论

在本课程中,我们研究了Gradle如何成为用于Java项目的最受欢迎和易于使用的构建系统和依赖性管理系统之一。 Gradle提供的Easy想法仅是为与领域相关的项目专门定义的,这就是为什么它为我们提供了定义构建脚本的强大功能的原因,这些构建脚本尺寸很小,并且可以用很少的Groovy代码行执行很多操作在里面。

我们还将Gradle与其他应对Gradle挑战的构建系统(Maven和Ant)进行了比较。 每个提到的构建系统都有各自的优缺点,但是Gradle脚本的简洁性使其可以在生产级系统上走很长一段路。

12.下载源代码

这是Gradle和Task定义的示例。

下载
您可以在此处下载此示例的完整源代码: JCG-Gradle-Tutorial

翻译自: https://www.javacodegeeks.com/2018/05/gradle-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【定时同步系列6】Gardener误差检测算法原理

关注公号【逆向通信猿】更精彩!!! 引言 离散时间符号定时同步方法 如下图所示为比较常用的一种符号定时同步的离散时间方法,通常由三个基本单元组成离散时间锁相环,分别为:定时误差检测器(TED)、环路滤波器和插值控制。其中,插值器和TED作用相当于鉴相器,插值控制相…

【数字信号处理】卷积和乘法系列3之测不准原理

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! Heisenberg测不准原理 信息在时域中的扩展(尖峰之间的距离)与其在频域中的对应扩展之间的这种关系是Heisenberg不确定性原理的一个例子。时域中的扩展(方差)乘以频域中的扩展具有不能被突破的…

【数字信号处理】卷积和乘法系列3之傅里叶变换对II

关注公号【逆向通信猿】更精彩!!! 声明:底部的小广告标签并不是博主所加!! 采样 傅里叶变换对(FT)很重要的原因是,如果有一个连续时间 (CT) 信号,则可以通过将信号乘以梳状函数来对其进行采样,产生的样本将只是尖峰处的值。采样过程产生离散时间 (DT) 信号,因为采…

【定时同步系列8】QPSK基带调制+Gardener定时误差检测+解调误码率曲线之MATLAB并行仿真姊妹篇一

结果预览 误码率曲线 关于反馈型定时同步技术的原理已经陆陆续续讨论了好久了,涉及的各个细节内容较多,且不容易理解,整个流程框图如下所示: 符号定时同步的离散时间方法(异步) 其中, interpolator模块在博客: 【定时同步系列5】Farrow内插器结构原理和MATLAB实现 TED模…

eclipse 隐藏项目_前5个有用的隐藏Eclipse功能

eclipse 隐藏项目Eclipse是野兽。 仅凭其力量才能超越其神秘感的设备。 有人将其称为连续体跨功能器 。 其他人则称它为透湿器 。 是的,它是如此之大,需要花费数年才能掌握。 然后,您的经理出现并告诉您:我们正在使用NetBeans。 …

使用Spring Security和OAuth 2.0保护Spring微服务架构

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 每个开发人员都希望能够更快,更有效地进行构建以支持规模。 使用Spring构…

一种使用setdll+HOOK钩子技术+dll为MFC程序ProtocalTool等老旧程序打补丁的思路(含源码)

一、引言 由于工作原因,需要使用一个很老旧的软件,没有源代码,该软件在XP系统下运行正常,但是需要登录,且在win10系统下使用时IP控件运行不正常,只能输入每个数字只能输入2位数,还有一些其他问题,比如给软件添加一些编辑框,或者对软件进行 下面简单梳理一下解决这些…

访存优化_Hibernate事实:多级访存

访存优化在多个级别上检索根实体及其子关联是很常见的。 在我们的示例中,我们需要使用其树,分支和叶子加载森林,并且我们将尝试查看Hibernate在三种集合类型上的表现:集合,索引列表和包。 这是我们的类层次结构的样子…

基于ARM的字符串拷贝实验(嵌入式系统)

基于ARM的字符串拷贝实验 一,实验目的 1.掌握ARM汇编指令LDR、STR和B等的使用方法,完成较为复杂的存储区访问和程序分支,学会使用条件码。 2.掌握完整的ARM汇编程序结构,具备初步的程序编写能力。 3.掌握ADS1.2集成开发环境的工程建立、编译参数设置、程序编译和调试等…

利用根升余弦滤波器和整数倍内插的多相结构生成含采样频偏的过采样信号

多相表示在多抽样率信号处理中是一种基本方法,使用它可以在实现整数倍和分数倍抽取和内插时提高计算效率。 目前我能想到的应用是信号的成型滤波,需要内插,然后与低通滤波器(成型时为过采样的(根)升余弦波形)进行卷积,这个过程如果直接去计算的话,会有很多多余的乘法操作…

java与java ee_CapeDwarf – Java EE上的Google App Engine

java与java ee我有很多爱好。 从早期的Java EE规范一路走来,并用Java EE 7进行了“云”之旅,我很好奇看到新宣布的CapeDwarf项目有什么库存,可以在内部引入Google的平台即服务,提供“ Google App Engine ” 。 到目前为止的故事 …

基于MATLAB的高阶(两个二阶级联构成的四阶以及更高阶)数字图形音频均衡器系数计算(可直接用于DSP实现)

引言 前不久,在数字信号处理中需要对音频信号进行滤波,涉及图形均衡器、参数均衡器的设计,下面这个链接给出了一个图形音频均衡器的例子: https://arm-software.github.io/CMSIS_5/DSP/html/group__GEQ5Band.html 这个示例演示如何使用 Biquad 级联函数构建 5 波段图形均衡…

基于MATLAB的曼彻斯特调制与解调实现

引言 曼彻斯特编码也称为相位编码,是一种同步时钟编码技术。通过电平的高低转换来表示“0”或“1”,每一位的中间有一个跳变的动作,这个动作既作时钟信号,又作数据信号,但因为每一个码元都被调成两个电平,所以数据传输速率只有调制速率的1/2,其编码效率为50%。常用于局…

【OFDM系列4】OFDM信号多径信道模型基础知识

多径信道模型(Multipath Channel Scenario) 信道脉冲响应(Channel Impulse Response, CIR) 信道的复基带脉冲响应如下所示 h ( τ ; t ) = ∑ l = 1 L a l ( t

kie-api_KIE-WB / JBPM控制台Ng –配置

kie-api大家好,这是我上一篇文章中有关如何使用jBPM Console的后续文章 。 这篇文章的主要思想是描述为了在您自己的公司中使用jBPM Console NG而需要进行的一些最常见的配置。 但是在讨论技术细节之前,我们将介绍KIE Workbench(KIE-WB&#…

【OFDM系列5】单输入单输出OFDM(SISO-OFDM)多径信道迫零(ZF)和最小均方误差(MMSE)均衡器原理和公式推导

OFDM单输入单输出(SISO)迫零(ZF)均衡器 在去除CP之后,第k个子载波上的信号的FFT给出如下 Y k = H k D k + W k ⋯ ( 1 ) Y_k=H_k D_k+W_k\cdots(1)

如何在Tomcat中设置JNDI数据库连接池-Spring教程示例

在Spring和Tomcat中设置JNDI数据库连接池非常容易。 Tomcat服务器文档提供了有关如何在Tomcat 5、6或7中设置连接池的足够信息。在这里,我们将结合使用Tomcat 7和Spring框架在Tomcat服务器中创建连接池并在Spring中使用JNDI代码访问它们。 在上一篇文章中&#xff0…

java vm_Java VM –提防YoungGen空间

java vm正如您从我们以前的面向性能的文章中可能已经看到的那样,运行良好的JVM是实现最佳应用程序性能和稳定性的最重要目标之一。 这样的健康评估通常仅关注主要收集的频率(避免)或检测内存泄漏的存在。 年轻一代空间或短寿命物体的大小和足…

Java生产监控的阴暗面

自动化的工作流程是在敏捷环境中交付高质量产品的新金标准。 不幸的是,不断变化会带来不断的风险。 输入“可观察性”,这是一种度量,可以从系统的外部输出中推断出系统的内部状态。 知道应用程序如何在生产中运行的能力。 在本节中&#xff…

adf4350配置_配置MySQL以进行ADF开发

adf4350配置大家好。 今天,我将向您展示如何为Oracle ADF开发配置MySQL数据库。 恕我直言,当您将ADF与其他数据库而不是Oracle DB一起使用时,您将无法使用Oracle ADF的全部功能,有时您会发现自己在寻找解决方法,以实现…