spring + Maven + Dubbo + MyBatis + Linner + Handlebars
- 开发环境搭建
本文主要分三部分,分别是:后台核心业务逻辑,桥梁辅助控制和前台显示页面。
本Web开发环境综合了多种工具,包括Maven包管理与编译工具,Dubbo分布式服务框架,MyBatis数据持久化工工具,Linner页面管理工具和Handlebars Js模板引擎等前卫的开发工具。
首先介绍一下:后台核心业务逻辑搭建。
后台核心业务逻辑搭建
后台核心业务逻辑大致分为三个层次:底层最的核心数据逻辑层(BIZ层),中间层达博服务实现层(服务IMPL层)和多宝服务接口层(服务的客户端层)。此外还有公共的jar包管理父工程(parent工程),公共业务逻辑工程(common工程),任务调度工程(task工程)和总的maven管理工程。 示例如下图:

接下来我会按照搭建顺序简单介绍一下相关工程的配置:
基本的顺序是父工程→biz工程→通用工程→任务工程→服务客户端工程→服务工程。
1.1基本jar包管理和服务环境配置父工程
父工结构如下图所示:

父工程主要包括pom工程配置文件,过滤器文件下的三个开发环境配置文件和maven打包蝙蝠批处理命令文件。
首先介绍一下父工程的pom文件:
(1)不同的打包环境配置,使用不同的打包配置便利了项目整个开发,测试到生产流程的统一化管理。默认将开发环境激活,配置如下图所示:

(2)编译时设置不对指定的资源文件进行替换。包括Freemarker模板文件ftl,静态-dynamic.xml文件,mybatis动态SQL Mapper文件。如下图:

(3)工程编码和打包插件配置:包括工程编码插件Java版本1.7 ,生成javadoc 插件,打包Java 源码插件,导入eclipse 工程插件等的配置如下图所示:

(4)单元测试覆盖率统计插件配置:
忽略对以下路径文件的单元测试覆盖率统计:action,webapp,interceptor,taglib,domain,model,dto和util / DataFormat.class下图相应配置信息:

1.2 biz核心业务逻辑工程
biz工程结构如下图所示:
按模块划分的动态SQLMapper文件:示例:SamStateInfoMapper.xml,如图1-21
序号①指定mybatis基本配置文件sqlMapConfig.xml的路径。
序号②指定动态SQL Mapper文件的路径。
序号③为基础的baseDAO Bean的声明。
一个包类文件,主资源文件;测试Java包类文件,测试资源文件四大部分组成。 主Java包类文件的文件路径为com.ouc.mkhl.supplier,下按模块划分,示例中为jmx,security和util 3个模块.security模块又细分为advice包,dao 数据访问对象包,域包,模型数据实体类包和服务服务接口包,服务接口包下包含impl服务接口实现包。
主资源文件包含邮件邮箱模板文件,日志配置文件,mybatis配置文件,spring相关配置文件。之后将对各配置文件做逐一介绍。
测试Java包类文件包含与主Java包相关的各单元测试文件。
测试资源文件包含springcache文件和mybatis数据持久层发电机配置文件。
1)biz工程的pom配置文件:如下图所示:

序号①为工程的父maven工程配置。
序号②为工程的继承和引用工程关系配置。
2)biz工程主资源配置文件说明:
(1)mybatis配置文件:首先介绍基本的SQLMap配置文:sqlMapConfig.xml

按模块划分动态SQLMapper文件:示例:SamStateInfoMapper.xml,如下图

(2)弹簧相关配置文件:
①缓存缓存配置文件:ehcache.xml,spring-cache-security.xml,spring-cache.xml。
②jmx运行期系统管理配置文件:spring-jmx-mbean.xml。
③按模块划分的自定义Bean声明配置文件:示例:spring-upload.xml

序号①为类似DAO的数据库接口操作类Bean。
序号②为服务接口Bean方法。
b为声明的切面,a为前置通知和后置通知要执行的方法。
④公用操作的配置文件spring-common.xml。

序号①指定mybatis基本配置文件sqlMapConfig.xml的路径。
序号②指定动态SQL Mapper文件的路径。
序号③为基础的baseDAO Bean的声明。
⑤spring配置工具配置:spring-config-toolkit.xml

⑥数据源配置:spring-datasource.xml

⑦Dubbo服务接口发布配置:spring-dubbo.xml

⑧服务扩展接口配置:spring-external.xml

⑨业务日志配置:spring-log.xml

⑩Quartz监控配置:spring-monitor.xml
传输事物管理配置:spring-transaction.xml

biz工程代码示例:
a.Jmx运行期管理扩展服务: 用户暴露系统相关管理接口,以实现运行期调用:ExposeMethodInterface

运行期管理系统接口实现:配置

b。系统初始化:SystemBootstrap
- 包com.ouc.mkhl.supplier.util;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Properties;
- import mx4j.tools.adaptor.http.HttpAdaptor;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.springframework.beans.factory.InitializingBean;
- import org.springframework.core.env.AbstractEnvironment;
- import com.ouc.openplatform.SysException;
- 进口com.ouc.openplatform.console.audit.AuditInfoCollector;
- 进口com.ouc.openplatform.session.listener.MaxSessionUtil;
- import com.ouc.openplatform.util.Env;
- import com.ouc.openplatform.util.HOPConstant;
-
- / **
- * @author WuPing
- * /
- public class SystemBootstrap实现InitializingBean {
- / *
- * CONFIG_FILE_PATH系统变量配置文件路径
- * /
- private static final String CONFIG_FILE_PATH = “/env.properties” ;
- private static final Log LOG = LogFactory .getLog(SystemBootstrap.class);
- 私人HttpAdaptor httpAdaptor;
- public static void init(){
- InputStream inputStream = null ;
- 属性 属性 = new Properties();
- 尝试{
- inputStream SystemBootstrap.class.getResourceAsStream(CONFIG_FILE_PATH);
- properties.load(inputStream);
- LOG.info(“系统配置项:”+属性);
- } catch(Exception e){
- “”读取系统配置文件时发生错误:“,e);
- 抛出新的SysException(e);
- }最后{
- if(inputStream!= null){
- 尝试{
- inputStream.close();
- } catch(IOException e){
- LOG.error(“关闭文件输入流失败:”,e);
- }
- }
- }
- Env.init(属性);
- AuditInfoCollector.setAppNM(Env.getProperty(Env.KEY_SERVER_NAME));
- HOPConstant.setAppName(Env.getProperty(Env.KEY_SERVER_NAME));
- //设置一些全局参数
- MaxSessionUtil.setMaxSessionKey(Env.getProperty(Env.KEY_SERVER_NAME)+“_ MAX_SESSION_KEYS”);
- //使用spring的配置文件
- System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME,Env.getProperty(Env.ENV_TYPE));
- }
-
- @Override
- public void afterPropertiesSet()抛出异常{
- httpAdaptor.start();
- }
-
- public void setHttpAdaptor(HttpAdaptor httpAdaptor){
- this.httpAdaptor = httpAdaptor ;
- }
- }
c.DAO:SupplyUserDAO:
- 包com.ouc.mkhl.supplier.security.dao;
- import java.util.List;
- import com.ouc.mkhl.supplier.security.model.SupplyUser;
- 公共接口SupplyUserDAO {
- public int deleteByPrimaryKey(String supplycode);
- public int insert(SupplyUser record);
- public SupplyUser selectByPrimaryKey(String supplycode);
- public int updateByPrimaryKey(SupplyUser record);
- public List < SupplyUser > selectAllSupplyUser();
- public SupplyUser selectByVCode(String supplycode);
- }
d。型号:SupplyUser
- 包com.ouc.mkhl.supplier.security.model;
-
- import java.io.Serializable;
-
- public class SupplyUser实现Serializable {
-
- private static final long serialVersionUID = -123120032141L;
-
- private String supplycode;
-
- private String supplypass;
-
- private String supplyname;
-
- public String getSupplycode(){
- 返回供应代码;
- }
-
- public void setSupplycode(String supplycode){
- this.supplycode = supplycode == null?null:supplycode.trim();
- }
-
- public String getSupplypass(){
- 返回供应通
- }
-
- public void setSupplypass(String supplypass){
- this.supplypass = supplypass == null?null:supplypass.trim();
- }
-
- public String getSupplyname(){
- 返回供应名称
- }
-
- public void setSupplyname(String supplyname){
- this.supplyname = supplyname == null?null:supplyname.trim();
- }
- }
1.3 service-client服务接口工程
service-client工程结构如图:

分为传输DTO包,辅助功能助手包,客户端服务接口声明服务包和客户端工具类util包。
service-client示例代码:
一个。DTO:SupplyUserDTO
- 包com.ouc.mkhl.supplier.dto;
-
- import java.io.Serializable;
-
- import com.ouc.openapi.dubbo.governance.annotation.DubboField;
-
- public class SupplyUserDTO实现Serializable {
-
- private static final long serialVersionUID = -223120032141L;
-
- @DubboField(description = “供应商V码” )
- private String supplycode;
-
- @DubboField(description = “供应商登录密码 - 未加密” )
- private String supplypass;
-
- @DubboField(description = “供应商全称” )
- private String supplyname;
-
- public String getSupplycode(){
- 返回供应代码;
- }
-
- public void setSupplycode(String supplycode){
- this.supplycode = supplycode == null?null:supplycode.trim();
- }
-
- public String getSupplypass(){
- 返回供应通
- }
-
- public void setSupplypass(String supplypass){
- this.supplypass = supplypass == null?null:supplypass.trim();
- }
-
- public String getSupplyname(){
- 返回供应名称
- }
-
- public void setSupplyname(String supplyname){
- this.supplyname = supplyname == null?null:supplyname.trim();
- }
- }
b。客户端服务接口服务:SupplyUserServiceClient
- 包com.ouc.mkhl.supplier.service;
-
- import io.terminus.pampas.client.Export;
-
- import com.ouc.openapi.dubbo.governance.annotation.DubboMethod;
- import com.ouc.openapi.dubbo.governance.annotation.DubboParam;
- import com.ouc.openapi.dubbo.governance.annotation.DubboService;
- import com.ouc.mkhl.supplier.dto.SupplyUserDTO;
-
- import java.util.List;
-
- / **
- *供客户端调用的远程接口
- *
- * @author WuPing
- *
- * /
- @DubboService(description = “供应商用户服务” , displayName = “SupplyUser服务” )
- 公共接口SupplyUserServiceClient {
-
- //获取请求
- // @return List < SupplyUserDTO >
- @Export(paramNames = {})
- @DubboMethod(description = “获取所有供应商用户信息” , displayName = “getAllSupplyUsers” , returnParamDes = “供应商用户DTO列表” )
- public List < SupplyUserDTO > getAllSupplyUsers();
-
- //用户登录处理
- @Export(paramNames = {“username”,“password”})
- @DubboMethod(description = “用户登录验证” , displayName = “userLogin” , returnParamDes = “验证结果” )
- public String userLogin(
- @DubboParam(name = “username” , description = “登录用户名” , example = “V187” )String username,
- @DubboParam(name = “password” , description = “密码” , example = “123456” )String password);
-
- }
1.4 service-impl服务接口具体实现功能工程
服务工程结构如图:

该工程包括异常处理过滤包和客户端服务接口具体实现impl包。主资源文件有客户端Dubbo接口发布基本配置文件spring-dubbo.xml和用户自定义服务配置文件spring-user-provider.xml。图所示:
序号①为代理平台分配的应用S码。
序号②为后台接口代理服务。
序号③为服务方法认证相关服务接口。
序号④为服务自动注册接口。

服务代码
客户端接口实现Service-impl:SupplyUserServiceClientImpl
1.5任务调度工程
任务调度工程结构如图:
示例中的为账号过期定期扫描作业AccountExpireJob。 配置文件示例spring-lts-job.xml:如图1-35所示。
序号①为设置作业执行周期。

桥梁辅助控制
桥梁工程结构如下图所示:

包括控制控制器,辅助类域,excel处理,环境配置过滤器过滤器,操作拦截器拦截器,辅助工具utils等。
资源文件有:spring接口和代理服务配置文件root-context.xml,网页servlet拦截器配置文件servlet-context.xml,Redis配置文件redis-persistence-context.xml。项目环境配置文件过滤器,网页web.xml配置文件。
1)项目环境配置文件过滤器:dev.properties,如下图所示。
dev.properties文件中: 序号①为项目环境类别说明。
序号②为日志配置。
序号③为项目验证网址地址。
序号④为redis相关配置。
序号⑤为dubbo相关配置。
序号⑥为项目中央仓库地址配置。
序号⑦为集群平台兵马俑配置。
★序号⑧为与页面工程相关的配置:
应用简称(app.name),服务器名称(server.name),与页面工程有关的服务Key(server.key),dubbo应用名(dubbo.application.name),页面工程路径(publicPathPrefix),浏览器访问域名(domain.name)和默认跳转页面(login.after.jump.url)。
序号⑨为项目集团内网和外网环境安全配置。
2)Web.xml配置文件:
主要内容有配置系统启动监听器startupListeners,基于缓存实现的集群会话配置和编码过滤等内容。

前台页面工程
1)页面工程结构如下。
典型的被管理的项目前端工程结构如下:
├─a : app ## app 是开发者自开发代码的存储目录。
│├─ A1:部件 ## 存放项目的组件文件。
││└─dropdown ## 示例组件(此处假设为下拉)。
││└─ 模板## 组件自身的前端模板。
││├─view.coffee | view.js ## 组件js,可以使咖啡也可以是js。
││├─view.hbs ## 组件模板
││└─view.scss | view.css ## 组件样式文件,可以是scss,也可以是css。
│├─ A3:图片 ## 存放项目相关的图片文件。
││└──logo.png
│├─ A5:脚本 ## 存放项目相关的的JavaScript文件。
展示│展示│└──app.coffee
展示│├─ A6:风格 ## 存放项目相关的样式表文件。
││└──app.scss
│├─ A7:模板 ## 存放项目相关的前端模板文件。
││└──welcome.hbs
│├─ A8:意见 ## 用于存放项目相关的页面文件。
││└──index.html
│└─ A2:文件 ## 用于存放相关配置文件,例如front_config.yaml等。
├─bin ## 用户可以基于本启动本地服务器(以当前文件夹为根),当然更好的选择是适用的。
│└──服务器。
├─config.yml ## 是整个项目的配置文件。
├─b :public ## 是项目执行linner build后生成的打包文件位置,是发布项目所需的所有文件。
├──测试 ## 测试前端项目的单元测试文件所在目录。
└─c : vendor ## 存放引入的第三方代码组件,例如jQuery,Underscore等.
2)页面调用后台服务

特别注意:配置文件对空格敏感,请谨慎编写。
3)整个项目的配置文件config.yml。
