文档章节

0228 我的潘多拉

李福春carter
 李福春carter
发布于 02/29 01:16
字数 1735
阅读 50
收藏 0

 image.png

我的潘多拉

从一个故事说起。<br />从前,有个Java程序员非常喜欢写程序,喜欢研究源码,读英文文档。但是它在一家小公司里工作,公司的技术栈很陈旧。<br /> <br />单个系统代码中含有很多的xml配置,配置各种中间件的入口适配器,而不同的业务系统中都是类似的配置。<br />启动单个系统很慢。<br />启动依赖web组件,无法快速部署。<br />公共组件的依赖复杂,容易依赖冲突,版本陈旧。<br />在springcloud流行的时代,无法快速集成新的优秀组件。<br /> <br />而且,团队统一使用类似的项目模板,maven多模块,更换的阻力大。<br />使用统一项目模板可以更好的规范团队的代码结构,遵守公共的公共组件规约,减少了不同的工程师维护代码的成本。

现实很残酷,我爱springboot。<br /> <br />springboot不是新的东西,官网写的目标很强大:build everything ;<br /> <br />可以很好的对症下药,用了之后应该会神清气爽。<br /> <br />springboot提倡零xml,使用java config的模式取代配置代码,通过代码的方式,就有可能消除重复的配置。<br />springboot的启动速度很快,看了部分源码,有部分异步启动装配组件。<br />springboot为快速部署而生,内置了web容器无需配置tomcat.<br />springboot可以使用starter的方式使用公共组件,而且很好的解决了依赖冲突。

springboot积累了大量的最佳实践,为springcloud和各种大的云厂商提供很好的很好的支持。<br />而springcloud提供了成熟配套的微服务组件,技术更先进,在行业的通用性更强。<br /> <br />那么如何在热爱新技术跟现实的成就的工作中找到一条两全其美的高速公路呢?

如何打开上图中的潘多拉魔盒,连接现实与梦想。

简单直接:<br />直接把项目骨架改成基于springboot结构的就可以了;<br />团队习惯多模块,那就改造成多模块的,发布模块改为springboot就好了;<br />团队封装了很多公共组件,接着用,加个适配器改造成springbootstarter核心代码不变,使用xml接着配置也行,咱兼容并包。<br /> <br />剩下的事情就交给springboot,各种最佳实践,各种好用的组件,拿来就用,955不是梦,多点时间健身,多点时间陪家人。<br /> <br />扩大自己的技术影响力,让更多的小伙伴使用,出任CTO, 改善生活也不是梦。<br />

改造springboot

阿里巴巴的java编程规范大行其道,三层模型流行已久。<br /> <br />image.png<br /> <br /> <br />分层对应maven的模块,简单画了一下层跟模块的对应关系图。<br /> <br />image.png<br /> <br /> <br />原来的骨架结构如下图。<br />image.png<br />

rest模块的包约定如下:<br />按照springboot的最佳实践,所有需要spring自动扫描的类放在xxxApplication类的同级或者下级目录中;

image.png

dal的包约定:

image.png

配置好mybatis的generator,可以方便生成持久层代码;

代码我也贴出来!

Archetype封装

achetype的流程:

image.png

开始流程前,先查阅一下maven的archetype的使用文档。上图是我阅读官网的文档之后画的流程图。下面来一步一步实现。<br /> <br />必须资源见红框:<br /> <br />image.png<br />

1 新建项目

没什么好说的,直接使用maven提供的quickstart走起,删掉java代码。 清理好pom.xml,只保留mgav 

2 配置pom的插件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.springbootpractice.demo</groupId>
  <artifactId>archetypes-springboot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.archetype</groupId>
        <artifactId>archetype-packaging</artifactId>
        <version>3.1.1</version>
      </extension>
    </extensions>
 
  </build>

</project>

要点强调一下:<br />1   配置扩展archetype-packaging;

3 配置archetype-metadata

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0
        http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd"
        xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        name="springboot-multi-module">

    <requiredProperties>
        <requiredProperty key="groupId">
            <defaultValue>com.leshiguang.industry.study</defaultValue>
        </requiredProperty>
        <requiredProperty key="artifactId">
            <defaultValue>demo-services</defaultValue>
        </requiredProperty>
        <requiredProperty key="package">
            <defaultValue>com.leshiguang.industry.study.demo</defaultValue>
        </requiredProperty>
        <requiredProperty key="version">
            <defaultValue>1.0-SNAPSHOT</defaultValue>
        </requiredProperty>
        <requiredProperty key="projectAuthor">
            <defaultValue>fuchun.li</defaultValue>
        </requiredProperty>
    </requiredProperties>

    <fileSets>
        <fileSet filtered="true" encoding="UTF-8">
            <directory/>
            <includes>
                <include>pom.xml</include>
                <include>.gitignore</include>
                <include>README.MD</include>
            </includes>
        </fileSet>
    </fileSets>

    <modules>
        <module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">
            <fileSets>
                <fileSet filtered="true" encoding="UTF-8" packaged="true">
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8">
                    <directory/>
                    <includes>
                        <include>pom.xml</include>
                        <include>.gitignore</include>
                        <include>README.MD</include>
                    </includes>
                </fileSet>
            </fileSets>
        </module>
        <module id="${rootArtifactId}-dal" dir="__rootArtifactId__-dal" name="${rootArtifactId}-dal">
            <fileSets>
                <fileSet filtered="true" encoding="UTF-8" packaged="true">
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>jdbc.properties</include>
                        <include>generateConfig.xml</include>
                        <include>mapper/*.*</include>
                    </includes>
                    <excludes>
                        <exclude>comment.ftl</exclude>
                    </excludes>

                </fileSet>
                <fileSet filtered="true" encoding="UTF-8">
                    <directory></directory>
                    <includes>
                        <include>pom.xml</include>
                        <include>.gitignore</include>
                        <include>README.MD</include>
                    </includes>
                </fileSet>
            </fileSets>
        </module>
        <module id="${rootArtifactId}-biz" dir="__rootArtifactId__-biz" name="${rootArtifactId}-biz">
            <fileSets>
                <fileSet filtered="true" encoding="UTF-8" packaged="true">
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8">
                    <directory></directory>
                    <includes>
                        <include>pom.xml</include>
                        <include>.gitignore</include>
                        <include>README.MD</include>
                    </includes>
                </fileSet>
            </fileSets>
        </module>
        <module id="${rootArtifactId}-rest" dir="__rootArtifactId__-rest" name="${rootArtifactId}-rest">
            <fileSets>
                <fileSet filtered="true" encoding="UTF-8" packaged="true">
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/test/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8">
                    <directory></directory>
                    <includes>
                        <include>pom.xml</include>
                        <include>.gitignore</include>
                        <include>README.MD</include>
                    </includes>
                </fileSet>
            </fileSets>
        </module>
        <module id="${rootArtifactId}-soa" dir="__rootArtifactId__-soa" name="${rootArtifactId}-soa">
            <fileSets>
                <fileSet filtered="true" encoding="UTF-8" packaged="true">
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/test/java</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8" packaged="false">
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.*</include>
                    </includes>
                </fileSet>
                <fileSet filtered="true" encoding="UTF-8">
                    <directory></directory>
                    <includes>
                        <include>pom.xml</include>
                        <include>.gitignore</include>
                        <include>README.MD</include>
                    </includes>
                </fileSet>
            </fileSets>
        </module>
    </modules>
</archetype-descriptor>

xml的规约如下:

基本结构如下图,英文还比较好理解。

image.png

节点里面的元素,看链接,不难。

4 配置模板资源

这里说明一下变量。

_ rootArtifactId 路径占位符_<br /> ${rootArtifactId}  文件占位符<br />${package}  包名占位符

image.png

5 安装到本地

mvn clean install

<br />

6 本地使用

<br />image.png<br />

file

整理到团队,推广一下这个骨架,然后不断整理已有的中间件到这个骨架中迭代。<br />早日打开我的潘多拉。<br /> <br /> <br />骨架代码点我获取!

原创不易,转载请注明出处。

© 著作权归作者所有

李福春carter
粉丝 0
博文 96
码字总数 101871
作品 0
深圳
私信 提问
加载中

评论(0)

2.26济南同城s微软技术交流研讨会报道(图)

活动召集帖在[\[这儿\]\[1\]!][1] 2月26日下午,由中国海天集团主办的“时尚办公 摩登双响 ”微软专场活动在济南市中小企业服务中心隆重举行。此次会议得到了市政府经信委等相关部门和众多中...

IT界谁家那小谁
2014/02/28
234
7
如何使用潘多拉连接千寻开发板开发高精度应用

所需设备: 潘多拉开发板 (淘宝链接) 注意:购买时请注意屏幕背面上方的版本号,我购买的是V2.61版本,其他版本的串口布局不一样,在代码编写时需要注意,我会在代码一节详细标书。 千寻魔...

北斗智造者
03/30
0
0
iOS - Mac Apache WebServer 服务器配置

前言 Apache 是目前使用最广的 Web 服务器,可以支持各种脚本的执行。 Mac 系统自带,无需单独安装,只需要修改几个配置就可以,简单,快捷。 有些特殊的服务器功能,Apache 都能很好的支持。...

仟0123
2016/08/31
0
0
阿里潘多拉实验室成功越狱 iOS 12 系统

雷锋网(公众号:雷锋网)消息,9月18日凌晨,Apple(苹果)正式对外发布最新的 iOS 12系统,几小时后,其安全防护系统很快就被阿里安全潘多拉实验室安全专家攻破,成为全球首个完成 iOS 12 完...

郭佳
2018/09/19
0
0
protobuf2.5在iOS上编译及cocos2dx混合使用的问题

项目代码里使用了protobuf作为协议层的的编码解码库, 所以需要编译成arm系列架构的静态库供游戏使用.在编译过程中十分坎坷,首先,protobuf的源码在编译时如果直接使用configure生成的makef...

pigsoldier
2014/02/28
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch:shard 分配感知

osc_lnhxmt4i
8分钟前
8
0
Elasticsearch:分布式计分

osc_rnx2cje5
10分钟前
11
0
vue-element-admin中public中json中的代码没有打包到线上

解决的办法 将public中的文件放到static中,修改对应的路径,就可以解决这个bug了

osc_8hhlaimy
13分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部