700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Spring + Maven + Dubbo + MyBatis + Linner + Handlebars-Web开发环境搭建

Spring + Maven + Dubbo + MyBatis + Linner + Handlebars-Web开发环境搭建

时间:2022-07-21 19:38:12

相关推荐

Spring + Maven + Dubbo + MyBatis + Linner + Handlebars-Web开发环境搭建

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

[HTML]查看普通拷贝打印?包com.ouc.mkhl.supplier.util; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import mx4j.tools.adaptor.http.HttpAdaptor; import mons.logging.Log; import mons.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 StringCONFIG_FILE_PATH=“/env.properties”; private static final LogLOG=LogFactory.getLog(SystemBootstrap.class); 私人HttpAdaptor httpAdaptor; public static void init(){ InputStreaminputStream=null; 属性属性=newProperties(); 尝试{ 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:

[HTML]查看普通拷贝打印?包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

[HTML]查看普通拷贝打印?包com.ouc.mkhl.supplier.security.model; import java.io.Serializable; public class SupplyUser实现Serializable { private static final longserialVersionUID= -12312141L; 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

[html]查看纯文本 打印? 包com.ouc.mkhl.supplier.dto; import java.io.Serializable; import com.ouc.openapi.dubbo.governance.annotation.DubboField; public class SupplyUserDTO实现Serializable { private static final longserialVersionUID= -22312141L; @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[html]查看纯文本 打印? 包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[html]查看纯文本 打印? package com.ouc.mkhl.supplier.service.impl; import java.util.ArrayList; import java.util.List; import javax.annotation.Resource; import javax.ws.rs.BeanParam; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.springframework.stereotype.Service; import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType; import com.ouc.openapi.dubbo.governance.annotation.DubboParam; import com.ouc.mkhl.supplier.dto.SupplyUserDTO; import com.ouc.mkhl.supplier.service.SupplyUserServiceClient; import com.ouc.mkhl.supplier.security.service.SupplyUserService; import com.ouc.mkhl.supplier.security.model.SupplyUser; import com.ouc.mkhl.supplier.helper.EncryptHelper; @Path(“supplyUser”) @Consumes({ContentType.APPLICATION_JSON_UTF_8,ContentType.TEXT_XML_UTF_8}) //参数类型 @Produces({ContentType.APPLICATION_JSON_UTF_8,ContentType.TEXT_XML_UTF_8}) //返回值类型 @Service(“supplyUserServiceClient”) public class SupplyUserServiceClientImpl implements SupplyUserServiceClient { @资源 SupplyUserService supplyUserService; public SupplyUserService getSupplyUserService(){ return supplyUserService; } public void setSupplyUserService(SupplyUserService supplyUserService){ this.supplyUserService=supplyUserService; } @得到 @Path(“getAllSupplyUser”) @Override public List<SupplyUserDTO>getAllSupplyUsers(){ 列表<SupplyUserDTO>supplyUserDTOList=newArrayList<SupplyUserDTO>(); 列表<SupplyUser>supplyUserList=supplyUserService.getAllSupplyUser(); for(inti=0; i<supplyUserList.size(); i ++){ SupplyUserDTOtempSupplyUserDTO=newSupplyUserDTO(); tempSupplyUserDTO.setSupplycode(supplyUserList.get(i) .getSupplycode()); tempSupplyUserDTO.setSupplypass(s​​upplyUserList.get(i) .getSupplypass()); tempSupplyUserDTO.setSupplyname(supplyUserList.get(i) .getSupplyname()); supplyUserDTOList.add(tempSupplyUserDTO); } return supplyUserDTOList; } @SuppressWarnings({“unused”}) @得到 @Path(“getUserByIdAndName”) @Override public String userLogin( @DefaultValue(“V187”)@QueryParam(“username”)String username, @DefaultValue(“123456”)@QueryParam(“password”)String password){ System.out.println(“当前登录用户:”+用户名); Stringmd5Pass=“”;// MD5处理过的密码 //设置登录反馈信息变量:1-成功; 2-用户名不存在; 3-密码无效登录失败。 Stringmsg=null; EncryptHelpermd5Helper=newEncryptHelper(); //应用本地库 SupplyUsersuppUser=newSupplyUser(); 尝试{ suppUser=supplyUserService.getSupplyUserByVCode(username); } catch(Exception e){ suppUser=null; e.printStackTrace(); } if(suppUser== null){ suppUser=newSupplyUser(); if(username.equals(“suptest”)){ suppUser.setSupplycode(“V187”); suppUser.setSupplyname(“供应商端测试”); suppUser.setSupplypass(“123456”); } else if(username.equals(“ouctest”)){ suppUser.setSupplycode(“ouctest”); suppUser.setSupplyname(“ouc端测试”); suppUser.setSupplypass(“123456”); } } else { 尝试{ md5Pass=md5Helper.md5Encode(password).toUpperCase(); } catch(Exception e){ // TODO自动生成的catch块 e.printStackTrace(); } System.out.println(“MD5后的密码:”+ md5Pass); password=md5Pass; } //反馈信息设置 if(suppUser== null){ msg=“2”;//用户名不存在 } else { if(suppUser.getSupplypass()。equals(password)){ if(suppUser.getSupplycode()。equals(“haiertest”)){ //msg=“1”;// ouc端用户登录 msg=“ouc”;// ouc端 } else { //msg=“0”;//供应商端用户登录 msg=suppUser.getSupplycode();//供应商端V码 } } else { msg=“3”; //密码无效 } } 返回msg; } }

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。

4)后端服务back_config.yaml配置:

5)前端页面引用服务front_config.yaml配置:

6)页面hbs示例:

组件类型调用服务示例

ajax类型服务调用方式

友情链接:

手把官网:/

Node.js官网:https:///en/

CoffeeScript中文网:http://coffee-/#top

Redis中文官网:/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。