首页 > 代码库 > 原创SpringMvc+Mybatis+Redis框架
原创SpringMvc+Mybatis+Redis框架
声明:
本人提供这个 SpringMvc + Mybatis + Redis 的Demo 本着学习的态度,如果有欠缺和不足的地方,给予指正,并且多多包涵
框架运行环境:
Maven版本:3.3.9
Eclipse版本:MARS.2
JDK版本:1.8
Tocat版本:8.0.36
框架结构:框架全采用maven管理 所以源码只有180KB左右要是不会Maven就请自行补习
infrastructure:项目名
main:一些顶层的封装 包括了
annotation:自定义注解 实现的类似于shiro的权限 但是比较简单不喜勿喷 没shiro强大但是比他简单 然后自己结合RBAC+Redis+ Intercept技术实现的 为什么没用shiro并不是shiro不强大只是不太喜欢那么复杂的用法 虽然已经很简单了 我是懒得出奇的人 不过还是建议大家多去学习shiro这个权限框架毕竟连Spring都推荐使用Shiro RBAC是一个数据库的设计模型简单理解为:用户-角色-权限-资源 这里不再多说有个网友帖子写得不错 点击打开链接 拦截器什么滴也不多说spring的核心之一
entity:实体类的父类很简单自己看源码就行
log4j:这里重写了log4j的SMTPAppender这个类 首先说说这个类是干嘛的 他是用来发送邮件的当报错时邮件通知管理员,具体的请参考我的另一篇博客,上面有详细介绍点击打开链接
mapper:所有mapper的父类 默认提供了几个常用的方法
message:提示语相关的东西 都不知道咋描述 就是为了代码中不允许有一个中文和硬编码的存在 当然自己也可以改改实现国际化
result:针对结果的格式的统一封装 题外话:这个框架完全是为了提供接口而生 所以很多什么页面跳转什么滴都没做只做了返回json这块 连异常都封装成JSon了
tools:看名字就知道一些常用的工具类 有什么身份证、经纬度、日期计算、DES和RSA加密、MD5之类的东西 具体请看代码类注解 我觉得我注解已经很多了
redis:这里重写了spring-data-redis里面的RedisCache、RedisCachemanager两个类和封装了一些其他的包目的就是为了实现redis的自动续期和单用户登录功能(一个用户同时只能在一个地方登录)如果需要实现不同平台的单用户登录需要自己小改一下 在缓存中多加个平台标识就行了
butler:这是web项目 名字不必纠结 介绍下包的作用
service:系统的一些服务类 这里只有定时任务和Spring mail邮件推送服务
system:这个看里面的包就知道干嘛用的了 就说说exception和interception这两个 一个是全局异常一个是什么实体类校验权限等拦截器
框架的大致结构就介绍到这里 下面说一声配置的xml
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>butler</display-name> <!-- 声明Spring配置文件所在目录 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:applicationContext.xml, classpath*:spring-*.xml </param-value> </context-param> <!-- 声明IntrospectorCleanupListener监听器防止反复加载对象造成内存泄漏 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- 声明ContextLoaderListener监听器自动装配Spring配置文件信息 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 全局UTF-8编码过滤器 --> <filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置Spring控制器 --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- HttpPutFormContentFilter 使put方法是也可以获取表单内的参数 --> <filter> <filter-name>HttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>HttpMethodFilter</filter-name> <servlet-name>spring</servlet-name> </filter-mapping> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
接下来是Spring的主配置文件applicationContext.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:c="http://www.springframework.org/schema/c" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd"> <!-- 配置需要交给spring扫描管理的包,一般是包括整个项目的java文件的父包(由context提供) --> <context:component-scan base-package="org.system,org.service.task" /> <!-- 属性文件读入,用于加密数据库配置文件 --> <bean id="propertyConfigurer" class="org.system.encrypt.DBConfigurer"> <property name="locations"> <list> <value>classpath:conf.properties</value> </list> </property> </bean> <!-- 配置需要交给spring扫描管理的文件,一般是项目的配置文件(由context提供) --> <context:property-placeholder location="classpath:conf.properties" /> <!-- 配置数据源 --> <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- 基本配置 --> <property name="driverClassName" value=http://www.mamicode.com/"${db.driverClassName}" />>这里说一说有个数据库加密的东西在这里<!-- 属性文件读入,用于加密数据库配置文件 --> <bean id="propertyConfigurer" class="org.system.encrypt.DBConfigurer"> <property name="locations"> <list> <value>classpath:conf.properties</value> </list> </property> </bean>意思就是用DBConfigurer这个类来解密conf.properties这个文件内的几个配置 就是采用了des加密解密主要为了防止配置文件泄露数据库的信息暴露 如果不用直接注释掉就可以使用明文了 稍后会把properties相关文件贴出来接下来是spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd "> <!-- 扫描要自动管理的包 --> <context:component-scan base-package="org.system.controller.impl" /> <!-- 静态资源文件路径设置 --> <mvc:resources location="/api/" mapping="/api/**" /> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 系统内没有涉及到页面跳转所以基本无用--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value=http://www.mamicode.com/"/" />>
接下来是spring-mail.xml:这是用来配置Spring Mail发件人信息的 jdk8发布出去原因和解决方案请看点击打开链接<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 邮件发送器 --> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <!-- 服务器地址 --> <property name="host" value=http://www.mamicode.com/"${mail.smtp.host}" />>接下来是spring-redis.xml:这是配置redis的东西
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd"> <!-- 支持缓存注解 --> <cache:annotation-driven cache-manager="cacheManager" /> <!-- redis pool相关配置 --> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <!-- 最小空闲数 --> <property name="minIdle" value=http://www.mamicode.com/"${redis.minIdle}" />>
接下来日志的xml也可以使用properties为毛我这里用xml具体原因请参考上文说的关于日志的文章<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- 控制台日志配置 --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value=http://www.mamicode.com/"%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c{3}] %m%n"/>>最后一个butler.xml:权限部分注释了 想要测试放开取消注释即可<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- 指定自己定义的validator --> <mvc:annotation-driven validator="validator"> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes" value=http://www.mamicode.com/"application/json;charset=UTF-8" />>最后是conf.properties这里加密的几个对应得明文分别是
url:jdbc:mysql://localhsot:3306/butler?useUnicode=true&characterEncoding=utf8&mysqlEncoding=utf8
user:root
password:123456
如果对应的没变化就不需要改 后面提供的框架源码这块都会是错的请谅解
#数据库连接配置 db.driverClassName=com.mysql.jdbc.Driver db.url=VjG9ty54tspjXih4i7GttGhMgOjH9n9fK+PmEKzqTNldvpAhYfSUuRBTf3b++nhyUZERvK3jb0VqFpnhJF0Whf1k7QSvjxxY1FaNlCT+Vz5cwk3kNBUfUHZ5EcLPNLOl db.user=0q87vZtbVbk= db.password=XfSWPx0Kqvg= db.initialSize=2 db.minIdle=2 db.maxActive=10 db.maxWait=6000 #邮件服务器设置 mail.smtp.host=smtp.qiye.163.com mail.smtp.port=465 mail.smtp.auth=true mail.smtp.timeout=25000 mail.username=******@****.com mail.password=******* #Redis缓存配置 redis.minIdle=5 redis.maxIdle=100 redis.maxTotal=300 redis.maxWaitMillis=3000 redis.testOnBorrow=true redis.host=127.0.0.1 redis.port=6379 redis.password=yxt123 redis.database=1配置文件到这里都差不多了 文件内注解都有应该都能看懂至于框架的详细功能和实现方式就下次有时间在写!
源码地址:觉得还行回复哈给更多人看到!
原创SpringMvc+Mybatis+Redis框架