`

推荐几个自己写的Java后端相关的范例项目

阅读更多

推荐几个自己写的范例项目

这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易懂,在架构一个新的项目的时候可以直接当成脚手架来用,方便快速开发,另外项目中涉及到以及未来可能涉及到的知识点都会不断完善。

三个项目是互相发展而来的,依次为(不断完善中):

一、优雅的SSM架构(Spring+SpringMVC+Mybatis)

Github地址:https://github.com/wosyingjun/beauty_ssm

架构图:

二、对"优雅的SSM框架"进行完善(页面分离+nginx负载均衡+tomcat集群)

Github地址:https://github.com/wosyingjun/beauty_ssm_cluster

架构图:

三、将"优雅的SSM框架"拆分为分布式架构(基于dubbo+zookeeper)

Github地址:https://github.com/wosyingjun/beauty_ssm_dubbo

Dubbo的简单介绍和部署:http://wosyingjun.iteye.com/blog/2320127

架构图:

29
2
分享到:
评论
53 楼 aguai0 2018-04-03  
厉害了
52 楼 liwenjie 2017-08-30  
找不到数据库初始化脚本
51 楼 fhxmn14991 2017-03-19  
楼主什么时候更shiro权限啊
50 楼 淡淡的伤你 2017-02-03  
  
49 楼 zhncug 2017-01-16  
请问博主有数据库创建脚本么
48 楼 追梦少年蒋富贵 2016-11-13  
楼主赶快完善啊
47 楼 kcidh10 2016-11-07  
这分享的精神必须要为楼主点10086个赞。。希望楼主把这精神继续传播下去
46 楼 w156445045 2016-10-03  
博主很强大,期待更新,期待更完美的东西
45 楼 wulinzhizun0624 2016-09-11  
测试  testDistributedTransaction 这个方法,走到int count = goodsDao.reduceNumber(goodsid);一直报错,造成死锁了,为什么呢?

2016-09-11 17:50:32,083 ERROR[com.alibaba.dubbo.rpc.filter.ExceptionFilter:87]-  [DUBBO] Got unchecked and undeclared exception which called by 192.168.222.1. service: com.yingjun.ssm.api.goods.service.GoodsService, method: testDistributedTransaction, exception: org.springframework.dao.CannotAcquireLockException:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: UPDATE _goods    SET    number = number -1   WHERE   goods_id = ?   AND state = 1   AND number >0;
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction, dubbo version: 2.8.4, current host: 192.168.222.1
org.springframework.dao.CannotAcquireLockException:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: UPDATE _goods    SET    number = number -1   WHERE   goods_id = ?   AND state = 1   AND number >0;
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:259)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
at com.sun.proxy.$Proxy18.update(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:295)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:59)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
at com.sun.proxy.$Proxy19.reduceNumber(Unknown Source)
at com.yingjun.ssm.api.goods.service.impl.GoodsServiceImpl.testDistributedTransaction(GoodsServiceImpl.java:143)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy24.testDistributedTransaction(Unknown Source)
at com.alibaba.dubbo.common.bytecode.Wrapper1.invokeMethod(Wrapper1.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:70)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:132)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:113)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
44 楼 titohuang 2016-08-08  
wosyingjun 写道
titohuang 写道
请问下,第2个结构当中,若html需要获取session中数据怎么处理好点,ajax请求感觉不太好

纯html无法直接获取Session,还是得通过后台请求获取,建议一般的session用cookie实现。

好的,谢谢。主要场影一般是判断用户是否已经登录,若已经登录就获取当前用户信息
43 楼 huailongs 2016-08-05  
huailongs 写道
wosyingjun 写道
huailongs 写道
有几个问题想请教:
0:服务容器启动、加载、运行服务提供者

q:您指的服务提供者是图上左边的server_user这些provider吗?
   服务容器指的是tomcat这些java服务器容器吗?
   我看了您提供的代码,比如beautyssm_service_user这个项目,打包成为jar文件了,那通过哪个服务容器运行这个jar文件提供服务?

5:服务消费者和提供者,在内存中累计消费次数和消费时间,定时每分钟发送一次统计数据到统计中心

q:在内存中累计消费次数和消费时间这个,这个动作是dubbo来统计实现?还是service_user 或者web_user来实现?如果是后者,怎么发送数据到统计中心?
   您提供的代码,好像没有实现页面,也没有实现接口的相关数据统计?

谢谢!

1、服务提供者不需要Tomcat等Web容器,避免资源的浪费,服务的启动直接通过Main方法,并加载一个简单的Spring容器,用于暴露服务。你看beautyssm_service_user这个项目中的pom文件中的built部分就知道他是怎么启动的了。
2、dubbo服务有Monitor功能,每次调用服务时都能统计到数据,具体见:https://github.com/alibaba/dubbo/tree/master/dubbo-monitor


了说的是这里吗?beautyssm_service_user这个服务由com.alibaba.dubbo.container.Main
来启动?更迷糊了

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>


解释是在这里吗?
http://blog.csdn.net/xiaomin1991222/article/details/50981354
42 楼 huailongs 2016-08-05  
wosyingjun 写道
huailongs 写道
有几个问题想请教:
0:服务容器启动、加载、运行服务提供者

q:您指的服务提供者是图上左边的server_user这些provider吗?
   服务容器指的是tomcat这些java服务器容器吗?
   我看了您提供的代码,比如beautyssm_service_user这个项目,打包成为jar文件了,那通过哪个服务容器运行这个jar文件提供服务?

5:服务消费者和提供者,在内存中累计消费次数和消费时间,定时每分钟发送一次统计数据到统计中心

q:在内存中累计消费次数和消费时间这个,这个动作是dubbo来统计实现?还是service_user 或者web_user来实现?如果是后者,怎么发送数据到统计中心?
   您提供的代码,好像没有实现页面,也没有实现接口的相关数据统计?

谢谢!

1、服务提供者不需要Tomcat等Web容器,避免资源的浪费,服务的启动直接通过Main方法,并加载一个简单的Spring容器,用于暴露服务。你看beautyssm_service_user这个项目中的pom文件中的built部分就知道他是怎么启动的了。
2、dubbo服务有Monitor功能,每次调用服务时都能统计到数据,具体见:https://github.com/alibaba/dubbo/tree/master/dubbo-monitor


了说的是这里吗?beautyssm_service_user这个服务由com.alibaba.dubbo.container.Main
来启动?更迷糊了

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<classesDirectory>target/classes/</classesDirectory>
<archive>
<manifest>
<mainClass>com.alibaba.dubbo.container.Main</mainClass>
<!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->
<useUniqueVersions>false</useUniqueVersions>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
41 楼 wosyingjun 2016-08-05  
titohuang 写道
请问下,第2个结构当中,若html需要获取session中数据怎么处理好点,ajax请求感觉不太好

纯html无法直接获取Session,还是得通过后台请求获取,建议一般的session用cookie实现。
40 楼 titohuang 2016-08-05  
请问下,第2个结构当中,若html需要获取session中数据怎么处理好点,ajax请求感觉不太好
39 楼 HYc789110 2016-08-04  
lz 你pom文件好像是少了依赖啊,ProtoStuffSerializerUtil的import com.dyuproject.protostuff.LinkedBuffer;和import com.dyuproject.protostuff.Schema;都没有进来,找不到jar包,我自己加了个api的依赖就不报错,tomcat跑是能跑起来,但是访问user/list却报错了com.protostuff classnotfound的错,不知道怎么回事
38 楼 wosyingjun 2016-08-04  
huailongs 写道
有几个问题想请教:
0:服务容器启动、加载、运行服务提供者

q:您指的服务提供者是图上左边的server_user这些provider吗?
   服务容器指的是tomcat这些java服务器容器吗?
   我看了您提供的代码,比如beautyssm_service_user这个项目,打包成为jar文件了,那通过哪个服务容器运行这个jar文件提供服务?

5:服务消费者和提供者,在内存中累计消费次数和消费时间,定时每分钟发送一次统计数据到统计中心

q:在内存中累计消费次数和消费时间这个,这个动作是dubbo来统计实现?还是service_user 或者web_user来实现?如果是后者,怎么发送数据到统计中心?
   您提供的代码,好像没有实现页面,也没有实现接口的相关数据统计?

谢谢!

1、服务提供者不需要Tomcat等Web容器,避免资源的浪费,服务的启动直接通过Main方法,并加载一个简单的Spring容器,用于暴露服务。你看beautyssm_service_user这个项目中的pom文件中的built部分就知道他是怎么启动的了。
2、dubbo服务有Monitor功能,每次调用服务时都能统计到数据,具体见:https://github.com/alibaba/dubbo/tree/master/dubbo-monitor
37 楼 huailongs 2016-08-03  
有几个问题想请教:
0:服务容器启动、加载、运行服务提供者

q:您指的服务提供者是图上左边的server_user这些provider吗?
   服务容器指的是tomcat这些java服务器容器吗?
   我看了您提供的代码,比如beautyssm_service_user这个项目,打包成为jar文件了,那通过哪个服务容器运行这个jar文件提供服务?

5:服务消费者和提供者,在内存中累计消费次数和消费时间,定时每分钟发送一次统计数据到统计中心

q:在内存中累计消费次数和消费时间这个,这个动作是dubbo来统计实现?还是service_user 或者web_user来实现?如果是后者,怎么发送数据到统计中心?
   您提供的代码,好像没有实现页面,也没有实现接口的相关数据统计?

谢谢!
36 楼 Nick_Wing 2016-07-28  
HYc789110 写道
HYc789110 写道
lz我在导入tomcat7的时候出现了问题,add不到tomcat里面去“Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules”,我百度了下,说是setting里面改个xml文件,但是我在setting里面没有那个文件,我看了下别的项目,也缺了几个文件,从别的项目里复制过来,但还是加不到tomcat里面去,这是什么问题啊?

我自己解决了,那个xml里配置版本高了,改成3.0就能加入tomcat


哥们 你用tomcat 发布成功了么?有没有遇到我上面提到的问题的?
35 楼 Nick_Wing 2016-07-28  
你好,第一个项目用外置的tomcat发布,会一直有一个如下所示的错误:
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

但是我的maven以来里面是存在的,而且切入到对应的项目properties中修改Deployment Assembly,把maven依赖全部import了进去,还是一样的错误,请问你还有遇到过这样的问题
34 楼 HYc789110 2016-07-28  
HYc789110 写道
lz我在导入tomcat7的时候出现了问题,add不到tomcat里面去“Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules”,我百度了下,说是setting里面改个xml文件,但是我在setting里面没有那个文件,我看了下别的项目,也缺了几个文件,从别的项目里复制过来,但还是加不到tomcat里面去,这是什么问题啊?

我自己解决了,那个xml里配置版本高了,改成3.0就能加入tomcat

相关推荐

Global site tag (gtag.js) - Google Analytics