精华内容
下载资源
问答
  • Java企业级项目开发思想。偶遇,读有所得,遂分享给大家,本文不涉及案例,只谈思想和理念,需要的朋友可以参考。
  • 我的全栈之路-Java基础之Java企业级项目开发环境搭建我的全栈之路 2.1 Java企业级开发环概述 绝大多数Java开发工程师在公司入职做项目开发时,公司都会统一发放Windows笔记本(例如小米,戴尔等),当然有些公司也...

    我的全栈之路-Java基础之Java企业级项目开发环境搭建

    2.1 Java企业级开发环概述

    绝大多数Java开发工程师在公司入职做项目开发时,公司都会统一发放Windows笔记本(例如小米,戴尔等),当然有些公司也会发苹果的MacBookPro。

    本人目前打算做全平台开发,因此准备了两台电脑,配置仅供参考。

    Alicenware 17R5
    Intel 8代i9+32G内存+1TSSD+1T机械+GTX1080显卡+4K分辨率+眼动仪
    Alienware 17R5

    macBookPro 19款
    Intel 9代i9+32G内存+512SSD+Radeon Pro Vega 20显卡
    macBookPro2019

    良好的硬件配置可以提高开发、测试、部署效率,如果条件允许尽量选择高配置的电脑。

    然后会使用Windows10/macOS+Java8+IntelliJ IDEA+Git/GitLab+Maven/Gradle+Chrome作为开发环境
    同时也会使用到Navicat、SecureCRT、Jenkins、Postman,JMeter等工具来完成日常的相关开发、测试、部署等任务。

    2.2 Windows10安装Java8

    2.2.1 Windows10和Java介绍

    Windows作为目前最广泛使用的PC操作系统,在全球市场占据90%的市场份额,目前最新版本Windows为Window10 1903,可以使用winver查看你的Windows版本号
    winver
    如果想要下载纯净的Windows系统镜像,可以搜索https://msdn.itellyou.cn/

    Java8作为目前最主流的版本,一些开源框架(例如SpringBoot2.0)和 大型互联网公司的分布式应用都已经采用Java8构建和部署。

    2.2.2 Java8下载

    Windows10安装Java8非常简单,首先我们去Oracle官网下载Java8,目前最新的Java8版本是1.8.0_221
    JDK下载
    JDK下载
    在点击jdk-8u221-windows-x64.exe的下载链接后,登录Oracle账户就可以开始下载了
    下载JDK
    如果Oracle官网下载比较慢,还可以复制链接到迅雷下载。

    2.2.3 Windows10安装JDK8

    Java8下载完成以后,双击安装文件jdk-8u221-windows-x64.exe,然后系统会弹出一个用户账户控制的窗口,提示"你要允许此应用对你的设备进行更改吗",这里选择用鼠标点击是,就可以开始进行安装了。

    1. 开始安装向导
      Windows10安装JDK8

    2. 选择安装路径
      Windows10安装JDK8

    3. 安装JRE
      Windows10安装JDK8
      安装进度条

    4. 安装成功
      Windows10安装JDK8

    2.2.4 Windows10配置Java8

    在Java8安装完成以后,还需要配置环境变量,其目的是可以在终端上运行Java提供的相关命令(命令本质上也是类似于exe的程序)。
    还有其他Java编写的程序(例如Maven,Tomcat)都会依赖这里配置的环境变量。

    首先按Windows键,然后搜索环境变量,双击后会打开一个系统属性的窗口
    系统属性
    然后点击环境变量
    环境变量
    新建JAVA_HOME环境变量,其路径指向之前安装的JDK目录
    新建JAVA_HOME环境变量
    然后修改系统的PATH环境变量,添加%JAVA_HOME%\bin目录到PATH环境变量中
    修改系统的PATH环境变量

    最后使用javac -version和java -version查看编译和运行Java程序的版本

    Microsoft Windows [版本 10.0.18362.295]
    (c) 2019 Microsoft Corporation。保留所有权利。
    
    C:\Users\ittim>javac -version
    javac 1.8.0_221
    
    C:\Users\ittim>java -version
    java version "1.8.0_221"
    Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
    
    C:\Users\ittim>
    
    
    

    验证JDK安装
    验证JDK安装

    2.3 Windows10安装Maven

    2.3.1 Windows10安装Maven

    Maven是Apache开源的Java项目构建工具,用于管项目的依赖、并提供了编译、打测试、包、部署等功能。

    首先去Apache官网下载Maven,目前Maven的最新版本为3.6.1。
    然后将下载的apache-maven-3.6.1-bin.zip解压至任意路径(例如D:\DevTools\Java\apache-maven-3.6.1),这样就意味着Maven的安装完成了。

    2.3.2 Maven配置

    但是如果想要在终端上使用maven命令,还需要在系统环境变量中配置maven,其配置方式和Java类似。首先增加一个系统环境变量MAVEN_HOME,指向Maven的路径
    配置Maven

    然后在PATH中引用MAVEN_HOME,因为maven命令都在bin目录下,所以这里配置%MAVEN_HOME%\bin
    配置Maven
    配置完成以后在Windows10下新开一个命令提示符窗口,然后输入mvn -version查看maven安装信息
    maven版本信息

    Maven在使用前除了环境变量的配置意外,还需要修改%MAVEN_HOME%\config目录下的settings.xml文件,主要修改两处地方

    1. 修改本地仓库的默认路径
      Maven默认的本地仓库路径是在用户C:\Users{user.name}.m2\repository路径下
      如果你的C盘空间较小,可以修改默认路径。
      修改本地仓库的默认路径
      <localRepository>D:\DevTools\Java\maven_repository</localRepository>
    1. 增加阿里云私服镜像配置
      由于maven默认下载依赖的镜像地址在国外,这里可以配置一个阿里云的地址,在项目开发时可以加速下载项目以来的第三方组件(例如SpringBoot,Mybatis等等)
    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>          
    </mirror>
     

    阿里云私服配置
    阿里云私服配置

    在公司开发时,可以搭建公司专用的Maven Nexus,然后添加对应的配置即可。

    2.4 Windows10安装Git

    Git作为分布式版本管理系统,是企业开发中必不可少的团队协作开发工具。
    目前最新版的Git为2.23.0,可以直接从官网下载。

    在Git下载完成之后双击Git-2.23.0-64-bit.exe,开始准备安装Git。
    在打开文件时会弹出安全警告,这里点击运行
    打开文件-安全警告
    然后系统会弹出一个用户账户控制的窗口,提示"你要允许此应用对你的设备进行更改吗",这里选择用鼠标点击是,就可以开始进行安装了。

    Git安装时如果没有特殊的需要,只需要跟着提示一路默认安装即可。
    Windows10安装Git

    安装路径
    安装路径

    选择组件
    选择组件

    选择开始菜单文件夹
    选择开始菜单文件夹

    选择默认的编辑器
    选择默认的编辑器

    Path配置
    Path配置

    选择HTTPS
    选择HTTPS

    Windows10安装Git
    Windows10安装Git

    Windows10安装Git
    Windows10安装Git

    Windows10安装Git
    Windows10安装Git

    Windows10安装Git
    Windows10安装Git

    安装中
    安装中

    安装完成
    安装完成

    在使用之前还需要使用git命令配置用户名和邮箱

    git config --global user.name "liuguanglei"
    git config --global user.email "18601767221@163.com"

    配置用户名和邮箱
    配置用户名和邮箱

    2.5 Windows10安装IntellIJ IDEA

    2.5.1 IntelliJ IDEA下载

    IntelliJ IDEA是Jetbrains公司开发的集成开发环境,可以用于Java,Web,Android,大数据开发。
    Jetbrains首页
    Windows上IntelliJ IDEA下载只需要点击首页的Download下载即可跳转至下载页面,然后点击Downlaod下载即可。
    下载IntelliJ IDEA
    目前最新的版本为IntelliJ IDEA 2019.2.1
    下载IntelliJ IDEA

    2.5.2 IntelliJ IDEA 安装

    当IntelliJ IDEA下载完成以后,在Chrome中双击安装文件ideaIU-2019.2.1.exe,便可开始进行安装
    打开文件-安全警告
    运行安装程序时Windows会弹出一个用户账户控制的窗口,提示"你要允许此应用对你的设备进行更改吗",这里选择用鼠标点击是,就可以开始进行安装了。

    欢迎页
    欢迎页

    选择安装路径
    选择安装路径
    配置IntelliJ IDEA
    配置IDEA

    创建菜单文件夹
    创建菜单文件夹
    安装中,根据电脑硬件不同,需要等待5-15分钟左右
    安装中

    安装完成
    安装完成

    2.5.3 首次运行设置

    点击桌面的IntelliJ IDEA 2019.2.1.exe图标启动IntelliJ IDEA。

    如果是你是第一次安装IntelliJ IDEA,首次启动IntelliJ IDEA时不导入设置,如果你之前安装过IntelliJ IDEA其他的版本,可以选择Config or installation floder导入之前的配置。
    不导入设置
    同意用户协议
    同意用户协议
    设置主题
    设置主题

    启用或者禁用IntelliJ IDEA插件
    启用或者禁用插件
    如果你对scala感兴趣,可以在这里点击Scala下方的Install按钮安装Scala插件,后面可以直接在IntelliJ IDEA中开发Scala应用。
    启用或者禁用插件

    由于我们安装的旗舰版IntelliJ IDEA,它是收费的,如果经济条件允许推荐到官方渠道付费购买正版软件。
    IntelliJ IDEA激活
    当然你也可以选择30天试用
    选择30天试用
    激活后或者选择免费使用就可以开始开发Java程序了。
    IntelliJ IDEA欢迎页

    2.6 IntelliJ IDEA 开发 Java程序

    启动IntelliJ IDEA后,选择创建新项目
    Create New Project
    选择基于Maven的项目
    New Project
    此时需要指定JDK,IntelliJ IDEA会读取之前安装的JDK,如果没有读取到,可以点击右边的New按钮,选择JDK的安装目录即可。虽然目前企业开发是选用JDK8为主,但是本项目还要演示JDK8以后的新特性,因此这里选择JDK11作为主要的JDK版本。后期若Oracle公司发布更新的JDK版本,例如JDK12,JDK13,也会及时更新以便介绍JDK新特性。
    New Project

    设置maven项目的坐标
    设置maven项目的坐标

    设置项目名称和路径
    设置项目名称和路径
    如果设置的目录不存在,IntelliJ IDEA会帮你创建
    创建目录

    项目概览
    项目概览

    项目创建完成之后还需要在目录java-core-programming下的pom.xml文件中添加如下配置,

    <build>
            <plugins>
    
    
                <!-- 由于Windows默认是GBK编码,这里将源代码编码设置为UTF-8,防止出现乱码         -->
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
                <!--  由于maven项目默认的编译级别是JDK1.5,这里采用JDK11编译          -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.11</source>
                        <target>1.11</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    2.7 IntelliJ IDEA集成Maven

    由于在使用IntelliJ IDEA首次创建时Maven还需要从默认的Maven中央仓库下载Maven所需的相关插件
    下载依赖
    下载依赖
    此时需要集成之前安装过的Maven

    首先找的View->Apperance-Toolbar启动Toolbar
    enter description here
    启用之后
    Toolbar

    然后点击Settings菜单,并在搜索栏中搜索Maven,配置Maven以及settings.xml和本地仓库的路径
    配置Maven

    这样当项目中添加了相关的依赖,例如spring-boot-starter-web
    spring-boot-starter-web
    maven就会自动从阿里云下载相关的组件
    aliyun

    2.8 Maven多模块项目创建

    之前创建的java-core-programming会作为开发Java应用程序的模板项目,后期所有的应用代码都会存在该项目中。

    该项目是一个基于Maven的多模块项目,其定位是包含基于Java的所有语言特性、流行的第三方类库实现以及数据结构、算法、设计模式、并发,JVM等内容。

    最终内容的项目结构
    Java模板项目

    这里先介绍这个多模块的项目是如何创建的。
    首先将java-core-programming下的src目录删除,因此java-core-programming只是作为父目录存在,具体的代码存放在子模块下面。

    然后添加.gitignore文件,用于Git提交文件时忽略指定的目录和文件,例如.idea目录和java-core-programming.iml文件。

    # project logs
    logs/
    out/
    
    # jrebel
    rebel.xml
    
    # maven ignore
    target/
    *.jar
    *.war
    *.ear
    *.zip
    *.tar
    *.tar.gz
    
    # eclipse ignore
    .settings/
    .project
    .classpath
    
    # idea ignore
    .idea/
    .vertx/*
    *target*
    .idea/*
    *.ipr
    *.iml
    *.iws
    
    # temp ignore
    *.log
    *.cache
    *.diff
    *.patch
    *.tmp
    
    # system ignore
    .DS_Store
    Thumbs.db
    
    
    # node_modules
    node_modules
    
    
    *.versionsBackup
    
    *.class
    
    # Mobile Tools for Java (J2ME)
    .mtj.tmp/
    
    bin/
    gen/
    
    # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
    hs_err_pid*

    如果想要在IntelliJ IDEA中更方便的使用.gitignore,还可以安装插件
    安装.gitignore
    安装成功之后需要重启IntelliJ IDEA后.gitignore插件会生效
    Restart IDE

    然后在项目java-core-programming的基础上新建模块 java-core-foundational
    New Module
    New Module
    New Module
    New Module
    将java-core-foundational目录下的src目录删除,然后在java-core-foundational的基础上再建一个子模块java-core-foundational-object
    New Module
    New Module
    New Module
    New Module
    ,然后在该模块的src/main/java下新建一个名为net.ittimeline.java.core.foundational.object的包
    new package
    new package

    然后在net.ittimline.java.core.object下创建一个类HelloWorld
    new Class
    HelloWorld

    package net.ittimeline.java.core.object;
    
    public class HelloWorld {
    
        public static void main(String[] args) {
            System.out.println("Windows10 1903 & IntelliJ IDEA 2019.2.1 Hello World");
        }
    }
    

    运行程序
    IntelliJ IDEA中首次运行程序时可以通过选中类中的main方法或者鼠标右键运行程序
    运行程序
    后续可以通过点击界面上的运行菜单直接运行。
    运行程序

    2.9 IntelliJ IDEA集成GitHub

    IntelliJ IDEA内置了支持GitHub的插件,我们只需要在Settings->Version Control->Github菜单中添加GitHub账号即可集成GitHub。

    IntelliJ IDEA中添加GitHub账号
    添加账号
    登录GitHub
    登录GitHub
    登录成功
    登录成功

    将项目提交至GitHub
    Share Project on Github
    编写项目描述
    Share Project on Github
    提交文件列表
    Share Project on Github
    提交成功
    Share Project on Github

    然后可以使用浏览器访问GitHub上的项目
    GitHub

    2.10 IntelliJ IDEA个性化配置

    2.10.1 IntelliJ IDEA 运行内存调整

    如果在使用过程中觉得IntelliJ IDEA比较慢,我们可以调整IntelliJ IDEA的运行参数,位于安装目录C:\Program Files\JetBrains\IntelliJ IDEA 2019.2.1\bin的idea64.exe.vmoptions文件,其默认配置为

    -Xms128m
    -Xmx750m
    -XX:ReservedCodeCacheSize=240m
    -XX:+UseConcMarkSweepGC
    -XX:SoftRefLRUPolicyMSPerMB=50
    -ea
    -XX:CICompilerCount=2
    -Dsun.io.useCanonPrefixCache=false
    -Djava.net.preferIPv4Stack=true
    -Djdk.http.auth.tunneling.disabledSchemes=""
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:-OmitStackTraceInFastThrow
    -Djdk.attach.allowAttachSelf
    -Dkotlinx.coroutines.debug=off
    

    如果你的电脑配置为Intel i7+16G+256G SSD,可以参考以下配置

    -Xms512m
    -Xmx1500m
    -XX:ReservedCodeCacheSize=480m
    -XX:+UseConcMarkSweepGC
    -XX:SoftRefLRUPolicyMSPerMB=100
    -ea
    -XX:CICompilerCount=2
    -Dsun.io.useCanonPrefixCache=false
    -Djava.net.preferIPv4Stack=true
    -Djdk.http.auth.tunneling.disabledSchemes=""
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:-OmitStackTraceInFastThrow
    -Djdk.attach.allowAttachSelf
    -Dkotlinx.coroutines.debug=off
    

    如果你的电脑配置是Intel i9+32G内存+512G SSD,可以参考以下配置

    -Xms1024m
    -Xmx3000m
    -XX:ReservedCodeCacheSize=960m
    -XX:+UseConcMarkSweepGC
    -XX:SoftRefLRUPolicyMSPerMB=200
    -ea
    -XX:CICompilerCount=2
    -Dsun.io.useCanonPrefixCache=false
    -Djava.net.preferIPv4Stack=true
    -Djdk.http.auth.tunneling.disabledSchemes=""
    -XX:+HeapDumpOnOutOfMemoryError
    -XX:-OmitStackTraceInFastThrow
    -Djdk.attach.allowAttachSelf
    -Dkotlinx.coroutines.debug=off

    修改完成之后重启IntelliJ IDEA,重启后会发现IntelliJ IDEA使用起来更加流畅。

    2.10.2 IntelliJ IDEA 代码模板配置

    在使用IntelliJ IDEA创建类、接口、枚举时,可以配置统一的注释模板。
    其实现方式也很简单,只需要进入IntelliJ IDEA 的设置菜单,然后找到File and Code Templates ,将配置复制到Class,Interface,Enum即可。

    /**
     * ${description}
     * @author liuguanglei ittimelinedotnet@gmail.com
     * @website ittimeline.net
     * @version ${DATE} ${TIME}
     *@since JDK11
    */

    统一注释模板
    统一注释模板

    这样在每次新建类、接口、枚举时都会有统一格式的注释模板

    package net.ittimeline.java.core.foundational.object;
    
    /**
     * 注释模板
     *
     * @author liuguanglei ittimelinedotnet@gmail.com
     * @version 2019/9/2 15:31
     * @website ittimeline.net
     * @since JDK11
     */
    public class CodeTemplateTest {
    }
    

    2.11 IntelliJ IDEA 日常开发常用插件

    • Alibaba Java Coding Guideline 阿里巴巴代码规约插件
    • Gitee 码云插件
    • Lombok
    • Translation 谷歌插件
    • VisualVM Launcher
    • .gitignore
    • SonarLint
    • Vue.js
    • Go
    • CodeGlance
    • Statistic 统计代码
    • Free Mybatis plugin
    • GitToolBox

    转载于:https://www.cnblogs.com/ittimeline/p/11449564.html

    展开全文
  • 2018年下半年黑马程序员课改之后最新Java企业级项目—学成在线学习平台。包含所有的资料和代码
  • 企业最重要的资产应该是数据信息,但现在的企业应用除了需要存储数据...使用SubVersion可以满足这些貌似普通但实际上很复杂的要求 Java 企业级项目中应用Subversion的配置与管理--JavaSVN + Subversion跟踪数据变化历史
    企业最重要的资产应该是数据信息,但现在的企业应用除了需要存储数据外,还经常要求跟踪数据变化整个过程,并会扩展到一系列相关的要求,如数据变化的原因、变化的时间等,而且在许多情况下是对以文档形式存储的数据进行跟踪。使用SubVersion可以满足这些貌似普通但实际上很复杂的要求

    Java 企业级项目中应用Subversion的配置与管理
    --JavaSVN + Subversion跟踪数据变化历史


     

    joson 发表于 2007-02-05 08:35:07
    作者:
    michaelzyy     来源:Onjava
    译者:陈海青(http://www.chq.name)

    企业最重要的资产应该是数据信息,但现在的企业应用除了需要存储数据外,还经常要求跟踪数据变化整个过程,并会扩展到一系列相关的要求,如数据变化的原因、变化的时间等,而且在许多情况下是对以文档形式存储的数据进行跟踪。使用SubVersion可以满足这些貌似普通但实际上很复杂的要求

    版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
    作者:陈海青(http://www.chq.name);michaelzyy
    原文:http://www.matrix.org.cn/resource/article/2007-02-05/Subversion_ba84f1b9-b4b0-11db-b1a9-1f2330fc56f8.html
    关键字:Java;Subversion

    来自数据的挑战

    企业应用存储了关键数据,而且应用程序并不仅限于对数据进行插入、读取、更新和删除操作(即CRUD),应用程序还期望能够存储数据更改的历史记录。此外,企业按照一系列的业务或者规定的要求,不但要求存储数据资产更改结果的历史,而且要求存储是谁,在什么时候,因为什么原因,如何改变了数据等等诸如此类的跟踪信息。

    应用数据的形式和尺寸也有很多变数,既有简单数据,如字符串和数字型,也有复杂的类型,如使用Blob或Cblob类型来存储文档。典型的应用程序要处理大量的上传给程序处理的以文档形式存储的数据,如果用传统的历史表等方式来跟踪诸如复杂类型的文档的变化,简直就是做一场恶梦。

    使用历史表进行跟踪

    关系数据库是存储数据的首选,可以高效地组织、存储、检索数据信息,由于应用程序将数据存放在关系数据库中,当然就顺理成章的尝试用它来存放历史跟踪数据,一般是使用带有时间戳的数据表来存放所有的重要数据表。在更新主表的时候会把旧数据推入历史表中,这个过程一般是通过触发器或由应用程序自己来完成。

    使用历史表存储历史信息,会存在以下问题:
    +关系型数据库和关系模型会提高数据存储和检索的效率,但是历史表显然不适合使用关系型数据库。
    +数据库不支持版本控制。应用程序不得不使用触发器或其它定制的技术来仔细的存放数据(,以便实现版本控制功能)。
    +必须由应用程序亲自检测版本之间的变化,从历史表中检索历史数据进行互相比较。

    关系数据库依旧是存储和检索业务数据的仓库,它们擅长于管理数据。以上列举的缺点仅限于用关系数据模型存储多个不同的版本的数据并进行历史数据跟踪的情况下。

    Subversion 和 JavaSVN

    Subversion 是一个可以代替CVS(一个传统的版本控制系统)的版本控制系统。Subversion使用称作仓库的树状结构来存储文件和目录。Subversion会跟踪对仓库中信息的所有改变,它具有一个中央仓库,允许进行并发更新,允许通过http或https使用WebDAV协议来访问仓库,可以避免使用过程中的防火墙的干扰。Subversion的理念就是“拷贝-编辑-合并”,这就意味着在修改时不需要锁定被修改的对象。

    (译者注:关于 WebDAV,是Web-based Distributed Authoring and Versioning的缩写,是一个标准HTTP协议的扩展,通过web技术把目录和文件作为可读些的对象进行共享读写,把web变成一个可读写的媒体。 RFCs2518和3253描述了WebDAV/DeltaV 对于HTTP的扩展,网址http://www.webdav.org/。)

    JavaSVN 是一个纯Java的Subversion客户端类库,提供与Subversion交互的基于Java程序的应用程序接口(API), JavaSVN既提供了进行直接读取Subversion仓库的底层接口,也提供了从Subversion仓库检出工作拷贝的高层接口。

    现在,应用程序可以使用结合了关系型数据库和Subversion的方式来满足数据存储和变化跟踪的需求了,对数据库的更新同时会将变化情况提交到 Subversion中,Subversion将是记录变化的主要数据源,关系数据库则用于除此以外所有的其他存储。这样做还有一个优势,由于 Subversion使用“拷贝-编辑-合并”模式,这样每次从关系数据库中检索数据时不再要求锁定目标表了。

    实例学习

    现在让我们来确定一下要解决的问题和解决方案,并使用实例来说明如何使用Subversion 和JavaSVN。我们使用JavaSVN将一个简单的领域对象存储到Subversion 中,检索以前的版本,并显示两个版本的差异。我们示例的领域对象是以下所示的贷款数据。在本文结尾的“资源”部分有完整的源代码链接。
    public class LoanData extends BaseTrackingObject {
            private String loanId;
            private double loanAmount;
            private float  loanRate;
            private int    loanTerm;
            ......
            ......
    }


    在这里,使用抽象的BaseTrackingObject类来定义通用的跟踪数据,如修改用户、修改日期、修改原因等。其中定义了设置和取得 objectId抽象方法,把它用作主键来访问领域对象;定义了一个命名为getXmlRepresentation的工具方法,用于把对象转换成XML 格式,进而用于在Subversion中存储和检索数据。

    初始化JavaSVN

    SVNManager类是通向Subversion的路由,用于在不使用工作拷贝的情况下,通过底层JavaSVN接口直接访问Subversion仓库,通过初始化 JavaSVN类库来可以使用HTTP(S)或SVN(S)与Subversion仓库进行交互。在这里,我们选择使用HTTP (WebDAV),因为可以减少在处理防火墙方面的工作。

    库的初始化工作要首先调用的是方法 DAVRepositoryFactory.setup()。SVNRepository类包含了所有直接访问Subversion仓库的方法,将 Subversion仓库树状结构的根路径提供给SVNRepositoryFactory类后,就完成了这个类的初始化,而 ISVNAuthenticationManager类的作用是向SVNRepository提供访问Subversion仓库的授权信息。
    public void initRepository() {
            //initialize the system to work over http
            DAVRepositoryFactory.setup();
            ............
            //point to the root folder of repository
            SVNURL svnUrl = SVNURL.parseURIEncoded
                            ("http://localhost/repos/");
            //initialize the SVNRepository
            theRepository = SVNRepositoryFactory.
                            create(svnUrl);
            //Creates the Auth manager with our user
            //and password credentials
            ISVNAuthenticationManager authManager =
                    new BasicAuthenticationManager
                    (name, password);
            //provides the credentials to the
            //SVNRepository
            theManager.setAuthenticationManager
                    (authManager);
            ........
    }


    在Subversion中存储数据

    Subversion 需要使用层次结构存储数据,这样我们先要设定一下领域实体的层次结构,这里使用一个命名为“DomainObjects”的文件夹来存放领域数据。领域对象类将会检测这个目录下存放领域对象的所有子目录,而每个独立的域对象被以XML格式进行存储,并以其主键进行命名。

    为存储 LoanData域对象,我们先要执行SVNManager对象的checkInObject方法,通过SVNRepository 执行的ISVNEditor对象来在Subversion仓库中的建立和更新域对象的版本,但只有在closeEdit被调用后,才会提交所有的操作。 SVNDeltaGenerator类用于获取当前版本与被更新版本之间的差异,Subversion通过存储版本间差异部分的形式存放新的版本,这样会使提高网络效率。
    public SVNResult checkInObject(
                    BaseTrackingObject obj){
            .....
            //Obtain the editor handle from the
            //repository
            ISVNEditor editor = theRepository.
                    getCommitEditor(obj.
                    getModificationReason(), null);
            ....
            //create the file at the specified path
                    editor.addFile(path, null, -1);
            }
            else {
                    //file is already present, so open
                    //the file in the repository
                    editor.openFile(path, -1);
            }
            ....
            String checksum = deltaGenerator.
                            sendDelta(path,
                            new ByteArrayInputStream(
                            obj.getXmlRepresentation().
                            getBytes()),
                            editor, true);
            .....
            editor.closeEdit();
            ...
    }


    检索变化历史

    为检索指定领域对象的历史版本,需要调用SVNManager类的getRevisionLog方法; SVNRepository类的getLatestRevision方法可以得到当前版本号;SVNManager.log方法可以检索每个版本的日志,日志可以包含版本修订的日期、修改人、修改的内容等信息;SVNManager.getFile方法可以从Subversion仓库中取得领域对象指定版本的所有内容。
    public List getRevisionLog(BaseTrackingObject
            obj, long startRevision,
            long endRevision) {
            .....
            if(endRevision==-1) {
                    //obtain the latest revision from
                    //the repository
                    endRevision =
                            theRepository.getLatestRevision();
            }
            //retrieve the various log entries for
            //the particular object path
            Collection revisionLogs = theRepository.
                    log(new String[] {path}, null,
                            startRevision, endRevision,
                            false, true);
            ....
            //Obtain the contents of the object at
            //the specified revision
            theRepository.getFile(path, revisionInfo.
                    getRevisionNumber(),
                    new Properties(),
                    xmlFileContentsStream);
            ....
    }


    检索版本间的差异

    SVNManager.showDifferences 方法用来检测两个版本之间的差异,是通过调用JavaSVN 的SVNDiffManager类来去的差异,也可以通过SVNClientManager来引用并执行这个类,SVNDiffManager的 doDiff方法有一个默认的实现,可以通过参数指定输出流参数的形式取得固定格式的差异结果,我们也可以使用ISVNEditor来实现一个自己的差异比较方法。在这个例子里,我们使用默认的实现。
    public String showDifferences(
                    BaseTrackingObject obj,long revision1,
                    long revision2) {
            ....
            //Create an instance of SVNClientManager
            //providing authentication
            SVNClientManager ourClientManager =
                            SVNClientManager.newInstance(
                            options, "name", "password");
            //Obtain the handle to DiffClient
            //from the client manager
            SVNDiffClient theDiff = ourClientManager
                            .getDiffClient();
            ....
            theDiff.doDiff(svnUrl, SVNRevision.
                    create(revision1), svnUrl,
                    SVNRevision.create(revision2),
                    false, false, diffStream);
            ....
    }


    结论

    在企业级应用里,不但要完成数据的存储和检索,还要实现对数据变化历史的跟踪。传统方法是使用关系数据库来完成这个工作,但是这不是一个“优雅”的方案。在我们的贷款数据处理的例子里,Subversion提供了跟踪数据变化的支持。JavaSVN的API用来完成数据存储、检索、获取版本间差异和日志等任务。
    我们的例子只是一个简单的性能演示,Subversion提供了丰富的功能支持,完全可以应用于企业级应用。祝你探索地更开心!

    资源
    +本文的范例代码和相关的安装介绍
    +Matrix Java社区:http://www.matrix.org.cn
    +在www.chq.name也可以得到部分相关资源和信息

    关于作者
    Swaminathan Radhakrishnan works as a senior technical architect for Infosys Technologies, Ltd.
    Swaminathan Radhakrishnan 本文作者,Infosys技术有限公司的资深技术架构师

    陈海青(joson),本文译者,生活在中国的山东省烟台市,先后从事软件开发、数据库管理、系统管理等工作,2001年获得高级程序员资格。
    展开全文
  • 阶段大纲 struts2 火推 01 02笔记 https://blog.csdn.net/qq1350048638/article/details/79369291

    阶段大纲 struts2 火推 01 02笔记
    https://my.oschina.net/u/3680357/blog/1604104

    展开全文
  • 企业应用不仅限于对数据进行插入、读取、更新和删除操作,还希望存储数据更改的历史记录,要求存储关于是谁,在什么时候,因为什么原因,如何改变了数据等等... Java 企业级项目中应用Subversion的配置与管理 --JavaSVN
        企业应用不仅限于对数据进行插入、读取、更新和删除操作,还希望存储数据更改的历史记录,要求存储关于是谁,在什么时候,因为什么原因,如何改变了数据等等诸如此类的信息,但这些内容仅仅使用传统的数据库已经不能满足要求了,还有其他的好办法吗?使用JavaSVN + Subversion跟踪数据变化历史,就是一个好的思路.

     

    Java 企业级项目中应用Subversion的配置与管理

    --JavaSVN + Subversion跟踪数据变化历史

    05/03/2006

    作者:Swaminathan Radhakrishnan

    译者:陈海青(http://www.chq.name)

    The most critical asset of any enterprise application is the data that it stores. Today's enterprise applications are often required to not just store data, but also keep track of all the changes that are made. This expectation also permeates into an associated set of requirements, such as tracking the reason for each change, the time of the change etc. In many cases, the data tracking requirements apply to data that applications store in the form of documents. Using Subversion can help satisfy these complicated, albeit common, requirements.

    企业最重要的资产应该是数据信息,但现在的企业应用除了需要存储数据外,还经常要求跟踪数据变化整个过程,并会扩展到一系列相关的要求,如数据变化的原因、变化的时间等,而且在许多情况下是对以文档形式存储的数据进行跟踪。使用SubVersion可以满足这些貌似普通但实际上很复杂的要求

     

    来自数据的挑战

    Enterprise applications store critical pieces of data, and the requirements of such applications do not stop at just the create, read, update and delete (CRUD) operations on the data. Applications are expected to store the history of all the changes to such data. Furthermore, organizations have a variety of legal and regulatory compliance mandates that ultimately result in requirements to not just track every change to critical data assets, but also associated requirements such as who made the changes to the data, what time a change was made, what changes were made, why the change made, etc.

    企业应用存储了关键数据,而且应用程序并不仅限于对数据进行插入、读取、更新和删除操作(即CRUD),应用程序还期望能够存储数据更改的历史记录。此外,企业按照一系列的业务或者规定的要求,不但要求存储数据资产更改结果的历史,而且要求存储是谁,在什么时候,因为什么原因,如何改变了数据等等诸如此类的跟踪信息。

    Application data also varies widely in form and size. Applications are required to store data varying from simple forms, such as strings and numbers, to complex types, such as documents that are stored as blobs and clobs. A certain class of applications deals very heavily with data in the form of documents uploaded into the application. Tracking data in complex forms such as documents can become a nightmare if traditional approaches, such as history tables, are chosen.

    应用数据的形式和尺寸也有很多变数,既有简单数据,如字符串和数字型,也有复杂的类型,如使用Blob或Cblob类型来存储文档。典型的应用程序要处理大量的上传给程序处理的以文档形式存储的数据,如果用传统的历史表等方式来跟踪诸如复杂类型的文档的变化,简直就是做一场恶梦。

     

    使用历史表进行跟踪

    Relational databases are generally the preferred choice for storing application data. They help organize, store, and retrieve the data in a very efficient manner. Since application data is stored in these relational databases, applications try to use these databases for tracking historical data as well. The most pervasive approach to storing historical data is to have a time-stamped history table for every table that stores important application entities. Updates made to the main table result in actions that push out the previous values of data to the history tables. This is either done through triggers or by the applications themselves.

    关系数据库是存储数据的首选,可以高效地组织、存储、检索数据信息,由于应用程序将数据存放在关系数据库中,当然就顺理成章的尝试用它来存放历史跟踪数据,一般是使用带有时间戳的数据表来存放所有的重要数据表。在更新主表的时候会把旧数据推入历史表中,这个过程一般是通过触发器或由应用程序自己来完成。

    There are several issues with storing the historical information in history tables.

    Relational databases and the relational data modeling concentrate on efficient data storage and retrieval. The history tables do not model naturally with relational databases.

    There is no support for versioning from the database. The application has to carefully store the entries into the history tables either through triggers or some other custom techniques.

    It's up to the application to determine what changed between versions. The retrieval of historical information from the history tables is also specific to the history table storing the data.

     

    The relational databases should still be the repository for storing and retrieving transactional data. They excel in managing these critical data assets. The shortcomings listed above are confined to storing multiple versions of data entities within the relational data store and tracking such entities over time.

    使用历史表存储历史信息,会存在以下问题:

    关系型数据库和关系模型会提高数据存储和检索的效率,但是历史表显然不适合使用关系型数据库。

    数据库不支持版本控制。应用程序不得不使用触发器或其它定制的技术来仔细的存放数据(,以便实现版本控制功能)。

    必须由应用程序亲自检测版本之间的变化,从历史表中检索历史数据进行互相比较。

     

    关系数据库依旧是存储和检索业务数据的仓库,它们擅长于管理数据。以上列举的缺点仅限于用关系数据模型存储多个不同的版本的数据并进行历史数据跟踪的情况下。

     

    Subversion 和 JavaSVN

    Subversion is a version control system that's a replacement for CVS, an older version control system. Subversion organizes data as files and directories in the form of a tree called a repository. Subversion tracks all the changes that are made to any asset stored in this repository. Subversion can have a centrally located repository and allows multiple concurrent updates to the repository. It can access its repository over HTTP and HTTPS using the WebDAV protocol, which helps avoid firewall issues that often crop up during deployment. Subversion works on the concept of copy-modify-merge, which effectively means that there is no requirement to lock an object before making changes to it.

    Subversion是一个可以代替CVS(一个传统的版本控制系统)的版本控制系统。Subversion使用称作仓库的树状结构来存储文件和目录。Subversion会跟踪对仓库中信息的所有改变,它具有一个中央仓库,允许进行并发更新,允许通过http或https使用WebDAV协议来访问仓库,可以避免使用过程中的防火墙的干扰。Subversion的理念就是“拷贝-编辑-合并”,这就意味着在修改时不需要锁定被修改的对象。

    (译者注:关于WebDAV,是Web-based Distributed Authoring and Versioning的缩写,是一个标准HTTP协议的扩展,通过web技术把目录和文件作为可读些的对象进行共享读写,把web变成一个可读写的媒体。RFCs2518和3253描述了WebDAV/DeltaV 对于HTTP的扩展,网址http://www.webdav.org/。)

    JavaSVN is a pure-Java Subversion client library. It offers APIs for Java applications to interact with Subversion. JavaSVN offers low-level APIs that can directly interact with a repository or high-level APIs to manage working copies checked out from a repository.

    JavaSVN是一个纯Java的Subversion客户端类库,提供与Subversion交互的基于Java程序的应用程序接口(API), JavaSVN既提供了进行直接读取Subversion仓库的底层接口,也提供了从Subversion仓库检出工作拷贝的高层接口。

    Applications can use a combination of relational databases and Subversion to satisfy data management and data tracking requirements. Any updates that are made to the critical data assets present in the relational database would be accompanied with a commit into Subversion. Subversion would be the primary data source for use-cases for tracking, while the relational database would be used for all other purposes. An additional advantage is that due to Subversion's copy-modify-merge concept, there is no requirement to lock an object every time its retrieved from the relational database.

    现在,应用程序可以使用结合了关系型数据库和Subversion的方式来满足数据存储和变化跟踪的需求了,对数据库的更新同时会将变化情况提交到Subversion中,Subversion将是记录变化的主要数据源,关系数据库则用于除此以外所有的其他存储。这样做还有一个优势,由于Subversion使用“拷贝-编辑-合并”模式,这样每次从关系数据库中检索数据时不再要求锁定目标表了。

     

    实例学习

    Now that we've stated the problem and proposed a potential solution, let's use an example to illustrate the usage of Subversion and JavaSVN to solve the problem. We will store a sample domain object into Subversion using the JavaSVN API. We will also retrieve previous versions and display differences between two versions. Our sample domain object is the LoanData object as shown below. The complete code used in this article can be found in the Resources section at the end of this article.

    现在让我们来确定一下要解决的问题和解决方案,并使用实例来说明如何使用Subversion 和JavaSVN。我们使用JavaSVN将一个简单的领域对象存储到Subversion 中,检索以前的版本,并显示两个版本的差异。我们示例的领域对象是以下所示的贷款数据。在本文结尾的“资源”部分有完整的源代码链接。

    public class LoanData extends BaseTrackingObject {

    private String loanId;

    private double loanAmount;

    private float loanRate;

    private int loanTerm;

    ......

    ......

    }

    An abstract BaseTrackingObject class defines the commonly required tracking information, such as modifiedUser, modificationDate, and modificationReason. It defines the abstract methods to set and retrieve the objectId that can acts as the primary key for the domain object. It also defines a utility method called getXmlRepresentation that we will use to convert the object representation to an XML format. This format will be used to store and retrieve data from Subversion.

    在这里,使用抽象的BaseTrackingObject类来定义通用的跟踪数据,如修改用户、修改日期、修改原因等。其中定义了设置和取得objectId抽象方法,把它用作主键来访问领域对象;定义了一个命名为getXmlRepresentation的工具方法,用于把对象转换成XML格式,进而用于在Subversion中存储和检索数据。

     

    初始化JavaSVN

    The class SVNManager is our gateway to Subversion. It uses the low-level JavaSVN APIs to directly interact with the repository since we do not deal with working copies. We initialize the JavaSVN library to either interact with the repository over HTTP(S) or SVN(S). We have chosen to interact with the repository using HTTP (WebDAV), since this will lead to fewer deployment/firewall issues.

    SVNManager类是通向Subversion的路由,用于在不使用工作拷贝的情况下,通过底层JavaSVN接口直接访问Subversion仓库,通过初始化JavaSVN类库来可以使用HTTP(S)或SVN(S)与Subversion仓库进行交互。在这里,我们选择使用HTTP (WebDAV),因为可以减少在处理防火墙方面的工作。

    The library is initialized using the call DAVRepositoryFactory.setup(). The class SVNRepository has all the required methods to directly interact with the Subversion repository. This class is initialized using the SVNRepositoryFactory class by providing the root of the tree hierarchy in the repository. The class ISVNAuthenticationManager is used to provide the authentication information required for SVNRepository to interact with the repository.

    库的初始化工作要首先调用的是方法DAVRepositoryFactory.setup()。SVNRepository类包含了所有直接访问Subversion仓库的方法,将Subversion仓库树状结构的根路径提供给SVNRepositoryFactory类后,就完成了这个类的初始化,而ISVNAuthenticationManager类的作用是向SVNRepository提供访问Subversion仓库的授权信息。

    public void initRepository() {

    //initialize the system to work over http

    DAVRepositoryFactory.setup();

    ............

    //point to the root folder of repository

    SVNURL svnUrl = SVNURL.parseURIEncoded

    ("http://localhost/repos/");

    //initialize the SVNRepository

    theRepository = SVNRepositoryFactory.

    create(svnUrl);

    //Creates the Auth manager with our user

    //and password credentials

    ISVNAuthenticationManager authManager =

    new BasicAuthenticationManager

    (name, password);

    //provides the credentials to the

    //SVNRepository

    theManager.setAuthenticationManager

    (authManager);

    ........

    }

     

    在Subversion中存储数据

    Subversion stores data in a hierarchical format, meaning we have to come up with a standard for storing our domain entities. For the sake of this example, we will store all the domain objects under the folder DomainObjects. The class of the domain object will determine the sub-directory under which all the domain objects of that type will be stored. The individual domain objects are stored as XML files with the name of their primary keys.

    Subversion需要使用层次结构存储数据,这样我们先要设定一下领域实体的层次结构,这里使用一个命名为“DomainObjects”的文件夹来存放领域数据。领域对象类将会检测这个目录下存放领域对象的所有子目录,而每个独立的域对象被以XML格式进行存储,并以其主键进行命名。

    To store the LoanData domain object, we will invoke the checkInObject method of our SVNManager object. An implementation of the ISVNEditor obtained through the SVNRepository object is used to create or update revisions of our domain object in the repository. All the operations performed on the editor will be committed only when the closeEdit method is called. The SVNDeltaGenerator class is used to obtain differences between the version currently in the repository with one that is being updated. Subversion receives updates for new versions in the form of such deltas rather than the entire object to improve network performance.

    为存储LoanData域对象,我们先要执行SVNManager对象的checkInObject方法,通过SVNRepository 执行的ISVNEditor对象来在Subversion仓库中的建立和更新域对象的版本,但只有在closeEdit被调用后,才会提交所有的操作。SVNDeltaGenerator类用于获取当前版本与被更新版本之间的差异,Subversion通过存储版本间差异部分的形式存放新的版本,这样会使提高网络效率。

    public SVNResult checkInObject(

    BaseTrackingObject obj){

    .....

    //Obtain the editor handle from the

    //repository

    ISVNEditor editor = theRepository.

    getCommitEditor(obj.

    getModificationReason(), null);

    ....

    //create the file at the specified path

    editor.addFile(path, null, -1);

    }

    else {

    //file is already present, so open

    //the file in the repository

    editor.openFile(path, -1);

    }

    ....

    String checksum = deltaGenerator.

    sendDelta(path,

    new ByteArrayInputStream(

    obj.getXmlRepresentation().

    getBytes()),

    editor, true);

    .....

    editor.closeEdit();

    ...

    }

     

    检索变化历史

    To retrieve the history of versions for a particular domain object, we will call SVNManager's getRevisionLog method. The latest revision number of the repository can be obtained using SVNRepository's getLatestRevision() method. The SVNManager.log method helps obtain the log entries associated with each revision. The log entries contain information such as when was the revision created, who created the revision, what was the revision number, etc. A call to the SVNManager.getFile method helps retrieve a particular revision from the repository.

    为检索指定领域对象的历史版本,需要调用SVNManager类的getRevisionLog方法; SVNRepository类的getLatestRevision方法可以得到当前版本号;SVNManager.log方法可以检索每个版本的日志,日志可以包含版本修订的日期、修改人、修改的内容等信息;SVNManager.getFile方法可以从Subversion仓库中取得领域对象指定版本的所有内容。

    public List getRevisionLog(BaseTrackingObject

    obj, long startRevision,

    long endRevision) {

    .....

    if(endRevision==-1) {

    //obtain the latest revision from

    //the repository

    endRevision =

    theRepository.getLatestRevision();

    }

    //retrieve the various log entries for

    //the particular object path

    Collection revisionLogs = theRepository.

    log(new String[] {path}, null,

    startRevision, endRevision,

    false, true);

    ....

    //Obtain the contents of the object at

    //the specified revision

    theRepository.getFile(path, revisionInfo.

    getRevisionNumber(),

    new Properties(),

    xmlFileContentsStream);

    ....

    }

     

    检索版本间的差异

    To determine the differences that exist between two revisions, the SVNManager.showDifferences method is used. The JavaSVN class SVNDiffManager has the required implementation for getting the differences between two versions. A handle to this class can be obtained using the SVNClientManager class. The SVNDiffManager's doDiff method has a default implementation for returning the differences in a fixed format into the OutputStream passed in as a parameter. We can have custom implementations for getting the differences between two versions through the ISVNEditor class, but we will go with the default implementation for this example.

    SVNManager.showDifferences方法用来检测两个版本之间的差异,是通过调用JavaSVN 的SVNDiffManager类来去的差异,也可以通过SVNClientManager来引用并执行这个类,SVNDiffManager的doDiff方法有一个默认的实现,可以通过参数指定输出流参数的形式取得固定格式的差异结果,我们也可以使用ISVNEditor来实现一个自己的差异比较方法。在这个例子里,我们使用默认的实现。

    public String showDifferences(

    BaseTrackingObject obj,long revision1,

    long revision2) {

    ....

    //Create an instance of SVNClientManager

    //providing authentication

    SVNClientManager ourClientManager =

    SVNClientManager.newInstance(

    options, "name", "password");

    //Obtain the handle to DiffClient

    //from the client manager

    SVNDiffClient theDiff = ourClientManager

    .getDiffClient();

    ....

    theDiff.doDiff(svnUrl, SVNRevision.

    create(revision1), svnUrl,

    SVNRevision.create(revision2),

    false, false, diffStream);

    ....

    }

     

    结论

    Enterprise applications deal with requirements to not just store and retrieve critical data assets, but also track the historical changes to such data. The traditional approaches to solve these requirements using relational databases do not present an elegant solution. Subversion, a version tracking system offers the required amount of support for tracking our sample LoanData object over time. The JavaSVN APIs were used for tasks such as storing the loan object, retrieving the object, retrieving the log of changes that are made to the object, and also showing the differences between two versions of the object.

    We have examined only a basic set of features but there is plenty of support from Subversion for far more sophisticated requirements that are not uncommon for an enterprise-level application. Happy exploring!

    在企业级应用里,不但要完成数据的存储和检索,还要实现对数据变化历史的跟踪。传统方法是使用关系数据库来完成这个工作,但是这不是一个“优雅”的方案。在我们的贷款数据处理的例子里,Subversion提供了跟踪数据变化的支持。JavaSVN的API用来完成数据存储、检索、获取版本间差异和日志等任务。

    我们的例子只是一个简单的性能演示,Subversion提供了丰富的功能支持,完全可以应用于企业级应用。祝你探索地更开心!

    Resources

    资源

    本文的范例代码和相关的安装介绍

    Subversion 站点可以提供相关信息

    Version Control with Subversion 一书也可以从网上获得online

    JavaSVN 的示例代码

    www.chq.name也可以得到部分相关资源和信息

     

    关于作者

    Swaminathan Radhakrishnan 本文作者,Infosys技术有限公司的资深技术架构师

    陈海青(joson),本文译者,生活在中国的山东省烟台市,先后从事软件开发、数据库管理、系统管理等工作,2001年获得高级程序员资格。

     

     

    展开全文
  • 1.使用RSA生成一对公钥和私钥的工具类(以下代码可以直接贴到项目中使用): package com.jidogncloud.common; /** * ClassName:RSAkeysUtil * PackageName:com.jidogncloud.common * Description: * * @date:...
  • Java企业级开发项目实践
  • java企业级 互联网实战项目20套,适合没有经验的 正在学习的练手用 由于资源较大,请用云盘自行存储
  • 高清电商实战项目视频,里面整合了spring springMvc mybatis等框架,适合中级学者项目学习
  • 资源名称:《Java企业级开发项目实践》PDF 下载内容简介:本书通过5个完整的项目开发实施,系统地介绍了在JBuiler开发环境中使用Struts技术进行企业级Web应用程序开发的过程和方法。全书共分6章,第1章介绍了Java...
  • 企业级java项目代码 有一个自然的本能,那就是假定其他人的代码都是乱七八糟的。 但是,如果我们客观地看的话,有些人确实能够编写出精巧的代码。 最近,我遇到了一种不同的方法来清理代码,这与我一生大部分时间...
  • Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式,下载绝对值得,里边干活多多
  • 企业级java开发新闻系统项目完整代码 ssh+mysql
  • 都知道JAVA凭借其强大的功能及其面向对象、跨平台、分布式、多...JAVA适合大项目,企业级项目开发,适合企业级应用,JAVA框架解决在商业组织、大型企业涉及的外部资源众多、事务密集、数据量大、用户数多、安全性...
  • 作为一名半路出家的Java从业者,面对这样的褒奖时内心是十分沉重的,它意味着曾经自己一个人在背后默默地付出与坚持。 当年,那个正在大学做兼职的少年感叹道:“干销售实在太不容易了,我根本...
  • 40套java企业项目模板

    2013-04-11 10:23:46
    40套java企业级项目网站模板 java管理系统模板 漂亮的前台界面
  • Java大型企业级项目实战:VOD展示系统 系统分析师,项目经理,特级讲师;...
  • 这是一套大型企业项目的代码讲解,是系统集成项目的经典范例。 该项目中涉及十几个子系统,各子系统之间需要多种模式的交互;这个项目的代码模式,与常见的增删改查的项目完全是不同的概念;项目中要求的算法较多,...
  • 全书共分6 章,第1章介绍了Java企业级开发所需掌握的基本知识。第2章至第6章针对不同的应用背景编排实例,将Sturts技术的知识点和技巧分散在具体的项目开发中,使读者在实践中加深理解,从而掌握Struts技术及Tiles等...
  • 文末有彩蛋哦,不要忘记领取~之前很多小伙伴反映说学完Java基础和Spring框架之后,一时间不知道如何深入挖掘和进一步练手,因此本文就整理出几个适合初学者学习和练手的Java EE开源项目,供大家参考,...
  • 今天给大家带来的资源是:Java从零到企业级电商项目实战 资料简介 课程目录: Java从零到企业级电商项目实战【完整版】 |____java电商源代码.zip |____java电商讲师源代码.zip |____目录信息 |____第一章.png |____...
  • 编辑推荐 通过本课程学习,能够全面了解基于Java企业...课程描述: 通过“一站式”的开发介绍,达到了解及深入基于Java开源框架整合的企业应用开发,课程以一个电子商城为例,讲述在企业架构下的开发/测试/部署,...
  • SSM企业级项目实战 擅长java,scala,spark,hive,had...
  • 一、开发环境准备 mysql 、idea、git、jdk、tomcat   二、git配置 环境:win10,下载安装git之后打开Git Bash 1)git config --global user.name ''your name"...2) git config --global user.email "...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,385
精华内容 1,354
关键字:

java企业级项目

java 订阅