SpringMvc+Mybatis+Redis框架
至于为什么没用shiro并不是shiro不强大只是不太喜欢那么复杂的用法(虽然已经很简单了) 我是懒得出奇的人 不过还是建议大家多去学习shiro这个权限框架毕竟连Spring都推荐使用Shiro RBAC是一个数据库的设计模型简单理解为:用户-角色-权限-资源 这里不再多说有个网友帖子写得不错 点击打开链接 拦截器什么滴也不多说spring的核心之一 entity:实体类的父类很简单自己看源码就行 log4j:这里重写了log4j的SMTPAppender这个类 首先说说这个类是干嘛的 他是用来发送邮件的当报错时邮件通知管理员,具体实现请继续往下看 框架的大致结构就介绍到这里 下面说一下配置的xml 有人说多 其实还还好,在报错的时候可以异步发送邮件给管理员。
上面有详细介绍点击打开链接 mapper:所有mapper的父类 默认提供了几个常用的方法 message:提示语相关的东西 都不知道咋描述 就是为了代码中不允许有一个中文和硬编码的存在 当然自己也可以改改实现国际化 result:针对返回结果的格式的统一封装 题外话:这个框架完全是为了提供接口而生 所以很多什么页面跳转什么滴都没做只做了返回json这块 连异常都封装成JSon了所以有其他要求的只能自己修改修改了 tools :看名字就知道一些常用的工具类 有什么身份证、经纬度、日期计算、DES和RSA加密、MD5之类的东西 具体请看代码类注解 我觉得我注解已经很多了 redis :这里重写了spring-data-redis里面的RedisCache、RedisCachemanager两个类和封装了一些其他的类目的就是为了实现redis的自动续期和单用户登录功能(一个用户同时只能在一个地方登录)如果需要实现不同平台的单用户登录需要自己小改一下 在缓存中多加个平台标识就行了 butler :这是web项目 名字不必纠结 介绍下包的作用 org.service:系统的一些服务类 这里只有定时任务(Spring Task)和Spring Mail邮件推送服务 org.system:这个看里面的包就知道干嘛用的了 就说说exception和interception这两个 org.system.exception:全局异常处理 这里把所有的程序异常捕捉并用JSON返回,项目源码中有相应的数据库脚本文件 ?xml version=1.0 encoding=UTF-8?beans xmlns= xmlns:aop= xmlns:mvc= xmlns:xsi=xsi:schemaLocation= http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc/spring-mvc.xsd !-- 指定自己定义的validator --mvc:annotation-driven validator=validatormvc:message-converters register-defaults=truebean class=com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverterproperty name=supportedMediaTypes value=application/json;charset=UTF-8 /property name=featuresarrayvalueWriteMapNullValue/valuevalueWriteNullStringAsEmpty/value/array/property/bean/mvc:message-converters/mvc:annotation-driven!-- 以下 validator ConversionService 在使用 mvc:annotation-driven 会 自动注册 --bean id=validator class=org.springframework.validation.beanvalidation.LocalValidatorFactoryBeanproperty name=providerClass value=org.hibernate.validator.HibernateValidator /!-- 如果不加默认到 使用classpath下的 ValidationMessages.properties --property name=validationMessageSource ref=messageSource //bean!-- 国际化的消息资源文件(本系统中主要用于显示/错误消息定制) --bean id=messageSource class=org.springframework.context.support.ReloadableResourceBundleMessageSourceproperty name=basenameslistvalueclasspath:org/system/config/valid/value/list/propertyproperty name=useCodeAsDefaultMessage value=false /property name=defaultEncoding value=UTF-8 /property name=cacheSeconds value=60 //bean!-- mvc:interceptorsmvc:interceptormvc:mapping path=/** /bean class=org.system.intercept.SecurityInterceptor //mvc:interceptor/mvc:interceptors --/beans最后是conf.properties 这里加密的几个对应得明文分别是 url:jdbc:mysql://localhsot:3306/butler?useUnicode=truecharacterEncoding=utf8mysqlEncoding=utf8 user:root password:123456 如果对应的没变化就不需要改 后面提供的框架源码这块都会是错的请谅解 #数据库连接配置db.driverClassName=com.mysql.jdbc.Driverdb.url=VjG9ty54tspjXih4i7GttGhMgOjH9n9fK+PmEKzqTNldvpAhYfSUuRBTf3b++nhyUZERvK3jb0VqFpnhJF0Whf1k7QSvjxxY1FaNlCT+Vz5cwk3kNBUfUHZ5EcLPNLOldb.user=0q87vZtbVbk=db.password=XfSWPx0Kqvg=db.initialSize=2db.minIdle=2db.maxActive=10db.maxWait=6000#邮件服务器设置mail.smtp.host=smtpsmail.smtp.host=smtp.qiye.163.commail.smtp.port=465mail.smtp.auth=truemail.smtp.timeout=25000mail.username=******@****.commail.password=*******#Redis缓存配置redis.minIdle=5redis.maxIdle=100redis.maxTotal=300redis.maxWaitMillis=3000redis.testOnBorrow=trueredis.host=127.0.0.1redis.port=6379redis.password=yxt123redis.database=1 配置文件到这里都差不多了 文件内注解都有应该都能看懂至于框架的详细功能和实现方式就下次有时间在写! 源码地址: https://github.com/MrLiuGangQiang/infrastructure ,并且多多包涵 本人QQ:912554737 请无关问题请勿打扰 框架运行环境: Maven版本:3.3.9 Eclipse版本:MARS.2 JDK版本:1.8 Tomcat版本:8.0.36 框架结构: 框架全采用maven管理 所以源码只有180KB左右要是不会Maven就请自行补习 main :一些顶层的封装 包括了 annotation:自定义注解 实现的类似于shiro的权限 但是比较简单不喜勿喷 没shiro强大但是比他简单 然后自己结合RBAC+Redis+ Intercept技术实现的, 本人提供这个 SpringMVC + Mybatis + Redis 的Demo 本着学习的态度,两个就能解决了,Spring会自动查找其下的Mapper --bean class=org.mybatis.spring.mapper.MapperScannerConfigurerproperty name=basePackage value=org.system.mapper..* /property name=sqlSessionFactoryBeanName value=sqlSessionFactory //bean!-- 支持注解事务模式 --tx:annotation-driven transaction-manager=transactionManager proxy-target-class=true /!-- 事务管理 --bean name=transactionManager class=org.springframework.jdbc.datasource.DataSourceTransactionManagerproperty name=dataSource ref=dataSource //bean!-- 配置声明式事务 --tx:advice id=txAdvice transaction-manager=transactionManagertx:attributestx:method name=insert* propagation=REQUIRED read-only=false /tx:method name=delete* propagation=REQUIRED read-only=false /tx:method name=update* propagation=REQUIRED read-only=false /tx:method name=get* propagation=SUPPORTS //tx:attributes/tx:advice!-- 配置该声明式事务规则用于的切入点 步骤: 1.配置切入点 2.应用该声明式事务规则 --aop:config proxy-target-class=true expose-proxy=true!-- 配置切入点 --aop:pointcut id=transaction_pointcut expression=execution(* org.system.service.impl..*.*(..)) /!-- 应用该声明式事务规则 --aop:advisor advice-ref=txAdvice pointcut-ref=transaction_pointcut //aop:config!-- 异常拦截器 --bean id=exceptionHandler class=org.system.exception.ExceptionResolver /!-- Spring上下文工具类 --bean id=springContextUtil class=org.service.utils.spring.SpringContextUtil //beans这里说一说有个数据库加密的东西在这里 !-- 属性文件读入,classpath*:spring-*.xml/param-value/context-param!-- 声明IntrospectorCleanupListener监听器防止反复加载对象造成内存泄漏 --listenerlistener-classorg.springframework.web.util.IntrospectorCleanupListener/listener-class/listener!-- 声明ContextLoaderListener监听器自动装配Spring配置文件信息 --listenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listener!-- 全局UTF-8编码过滤器 --filterfilter-nameCharacterEncoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncoding/filter-nameurl-pattern/*/url-pattern/filter-mapping!-- 配置Spring控制器 --servletservlet-namespring/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath*:spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup/servlet!-- HttpPutFormContentFilter 使put方法是也可以获取表单内的参数 这里我有特殊需求标准的Rest可以去掉--filterfilter-nameHttpMethodFilter/filter-namefilter-classorg.springframework.web.filter.HttpPutFormContentFilter/filter-class/filterfilter-mappingfilter-nameHttpMethodFilter/filter-nameservlet-namespring/servlet-name/filter-mappingservlet-mappingservlet-namespring/servlet-nameurl-pattern/*/url-pattern/servlet-mapping/web-app 接下来是Spring的主配置文件applicationContext.xml?xml version=1.0 encoding=utf-8?beans xmlns=xmlns:xsi=xmlns:context=xmlns:aop= xmlns:tx=xmlns:cache= xmlns:c=xsi:schemaLocation=!-- 配置需要交给spring扫描管理的包,给予指正。
我分开是为了更明显的区分 web.xml ?xml version=1.0 encoding=UTF-8?web-app xmlns:xsi=xmlns=xsi:schemaLocation= http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsdversion=3.1display-namebutler/display-name!-- 声明Spring配置文件所在目录 --context-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath*:applicationContext.xml,至于项目的异常自己也做了配置和封装,具体的请参考我的另一篇博客,请尽快处理 /!-- 日志邮件接收者 --param name=To value=***@qq.com /!-- 抄送邮件接受者 --!-- param name=Bcc value=***@qq.com/ --!-- 日志输出布局 --layout class=org.apache.log4j.PatternLayoutparam name=ConversionPattern value=%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c] %m%n //layout/appender!-- 异步发送邮件设置 --appender name=asyncout class=org.apache.log4j.AsyncAppenderappender-ref ref=email //appender!-- 需要特殊处理的日志级别 --logger name=org.springframeworklevel value=WARN //loggerlogger name=org.systemlevel value=DEBUG //logger!-- 根路径设置 --rootlevel value=INFO /appender-ref ref=console /appender-ref ref=info /appender-ref ref=warn /appender-ref ref=error /appender-ref ref=asyncout //root/log4j:configuration 最后一个butler.xml:权限部分注释了 想要测试放开取消注释即可,不喜欢多的可以合一下,用于加密数据库配置文件 --bean id=propertyConfigurer class=org.system.encrypt.DBConfigurerproperty name=locationslistvalueclasspath:conf.properties/value/list/property/bean!-- 配置需要交给spring扫描管理的文件,spring才能识别@Scheduled注解 -- task:scheduler id=scheduler pool-size=10 / task:executor id=executor pool-size=5-10 queue-capacity=200 rejection-policy=CALLER_RUNS /task:annotation-driven executor=executor scheduler=scheduler /!-- 导入其他配置文件 --import resource=/org/system/config/*.xml //beans 接下来是spring-mail.xml:这是用来配置Spring Mail发件人信息的 JDK8发不出去邮件的原因和解决方案请看点击打开链接/prepre name=code class=html?xml version=1.0 encoding=UTF-8?beans xmlns=xmlns:xsi=xsi:schemaLocation=!-- 邮件发送器 --bean id=mailSender class=org.springframework.mail.javamail.JavaMailSenderImpl!-- 协议类型 --property name=protocol value=${mail.smtp.type} /!-- 服务器地址 --property name=host value=${mail.smtp.host} /!-- 服务器端口 --property name=port value=${mail.smtp.port} /!--用户名 --property name=username value=${mail.username} /!-- 用户密码 --property name=password value=${mail.password} /!-- 默认编码 --property name=defaultEncoding value=UTF-8/!-- 其他配置 --property name=javaMailPropertiesprops!--是否验证密码 --prop key=mail.smtp.auth${mail.smtp.auth}/prop!-- 超时时间 --prop key=mail.smtp.timeout${mail.smtp.timeout}/prop!-- SSL类配置 --prop key=mail.smtp.socketFactory.classjavax.net.ssl.SSLSocketFactory/prop/props/property/bean/beans 接下来的是log4j.xml:也可以使用properties因为我使用的是异步发送邮件 我知道的只能用XML来配置 如果大家有properties配置能实现的麻烦通知下我 我其实比较喜欢properties?xml version=1.0 encoding=UTF-8?!DOCTYPE log4j:configuration SYSTEM log4j.dtdlog4j:configuration xmlns:log4j=!-- 控制台日志配置 --appender name=console class=org.apache.log4j.ConsoleAppenderlayout class=org.apache.log4j.PatternLayoutparam name=ConversionPattern value=%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c{3}] %m%n//layout/appender!-- info级别日志控制 --appender name=info class=org.apache.log4j.DailyRollingFileAppender!-- 文件路径 --param name=File value=${catalina.home}/logs/${webapp.root}/infrastructure/info.log /!-- 是否追加 --param name=Append value=true /!-- 最低日志级别 --param name=Threshold value=INFO /!-- 回滚日志后缀 --param name=datePattern value=.yyyy-MM-dd /!-- 是否启用缓冲 当缓冲区数据达到一定大小再写入文件 默认8K --!-- param name=BufferedIO value=true/ param name=BufferSize value=8192/ --!-- 日志输出布局 --layout class=org.apache.log4j.PatternLayoutparam name=ConversionPattern value=%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c] %m%n //layout!--限制输出级别 --filter class=org.apache.log4j.varia.LevelRangeFilter!-- 最小级别 --param name=LevelMax value=INFO /!-- 最大级别 --param name=LevelMin value=INFO //filter/appender!-- warn级别日志控制 --appender name=warn class=org.apache.log4j.DailyRollingFileAppender!-- 文件路径 --param name=File value=${catalina.home}/logs/${webapp.root}/infrastructure/warn.log /!-- 是否追加 --param name=Append value=true /!-- 最低日志级别 --param name=Threshold value=WARN /!-- 回滚日志后缀 --param name=datePattern value=.yyyy-MM-dd /!-- 是否启用缓冲 当缓冲区数据达到一定大小再写入文件 默认8K --!-- param name=BufferedIO value=true/ param name=BufferSize value=8192/ --!-- 日志输出布局 --layout class=org.apache.log4j.PatternLayoutparam name=ConversionPattern value=%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c] %m%n //layout!--限制输出级别 --filter class=org.apache.log4j.varia.LevelRangeFilter!-- 最小级别 --param name=LevelMax value=WARN /!-- 最大级别 --param name=LevelMin value=WARN //filter/appender!-- error级别日志控制 --appender name=error class=org.apache.log4j.DailyRollingFileAppender!-- 文件路径 --param name=File value=${catalina.home}/logs/${webapp.root}/infrastructure/error.log /!-- 是否追加 --param name=Append value=true /!-- 最低日志级别 --param name=Threshold value=ERROR /!-- 回滚日志后缀 --param name=datePattern value=.yyyy-MM-dd /!-- 是否启用缓冲 当缓冲区数据达到一定大小再写入文件 默认8K --!-- param name=BufferedIO value=true/ param name=BufferSize value=8192/ --!-- 日志输出布局 --layout class=org.apache.log4j.PatternLayoutparam name=ConversionPattern value=%-d{yyyy-MM-dd HH:mm:ss} [%p] [%c] %m%n //layout!--限制输出级别 --filter class=org.apache.log4j.varia.LevelRangeFilter!-- 最小级别 --param name=LevelMax value=ERROR /!-- 最大级别 --param name=LevelMin value=ERROR //filter/appender!-- 发送日志文件到邮件 --appender name=email class=org.main.log4j.SMTPAppender!-- 最小输出日志级别 --param name=Threshold value=ERROR /!-- 缓冲Event个数默认512 当达到了多少个就覆盖以前的Event 而非网络上所说的缓冲数据大小 不看源码坑出血 --param name=BufferSize value=512 /!-- 错误个数默认一个 即出现错误就发送邮件 --param name=ErrorSize value=5 /!-- 发送邮件的协议类型 --param name=SMTPProtocol value=smtps /!-- 发送日志的邮箱 --param name=From value=***@****.com /!-- 发送日志邮箱SMTP --param name=SMTPHost value=smtp.qiye.163.com /!-- 发送端口 目前只测试过QQ和163邮箱 其他邮箱不知道行不行可能会有写问题 到时候只能自己解决了 --param name=SMTPPort value=465 /!-- 发送日志的邮箱用户名 --param name=SMTPUsername value=***@***.com /!-- 发送日志的邮箱密码 --param name=SMTPPassword value=yVKzhrbaMaNQ2kEE /!-- 日志邮件主题 --param name=Subject value=后台系统框架异常提醒,一般是项目的配置文件(由context提供) --context:property-placeholder location=classpath:conf.properties /!-- 配置数据源 --bean name=dataSource class=com.alibaba.druid.pool.DruidDataSource destroy-method=close!-- 基本配置 --property name=driverClassName value=${db.driverClassName} /property name=url value=${db.url} /property name=username value=${db.user} /property name=password value=${db.password} /!-- 初始化时建立物理连接的个数 --property name=initialSize value=${db.initialSize} /!-- 最小连接池数 --property name=minIdle value=${db.minIdle} /!-- 最大连接池数量 --property name=maxActive value=${db.maxActive} /!-- 配置获取连接等待超时的时间 --property name=maxWait value=${db.maxWait} //bean!-- 配置sqlSessionFactory(由mybatis-spring.jar提供支持) --bean name=sqlSessionFactory class=org.mybatis.spring.SqlSessionFactoryBean!-- 配置数据源 --property name=dataSource ref=dataSource /!-- 配置mybatis的默认选项 --property name=configuration ref=configuration /!-- 配置拦截器用于Mybatis分页和总数查询,在请求时模型视图名称添加前后缀 系统内没有涉及到页面跳转所以基本无用--bean class=org.springframework.web.servlet.view.InternalResourceViewResolverproperty name=prefix value=/ /property name=suffix value=.html //bean!-- 校验拦截器 --bean id=validInterceptor class=org.system.intercept.ValidInterceptor/!-- 配置AOP切点 只拦截Controltroller --aop:config!--切入点 --aop:pointcut id=validPoint expression=execution(public * org.system.controller.impl..*.*(..)) /!--在该切入点使用自定义拦截器 --aop:advisor pointcut-ref=validPoint advice-ref=validInterceptor //aop:config!--开启这个配置,org.service.task /!-- 属性文件读入,如果有欠缺和不足的地方,权限这块建议大家先去了解哈RBAC这个模型再来看,以免其他客户端在服务器报错时出现一些数据无法解析造成的其他问题,用于加密数据库配置文件 --bean id=propertyConfigurer class=org.system.encrypt.DBConfigurerproperty name=locationslistvalueclasspath:conf.properties/value/list/property/bean意思就是用DBConfigurer这个类来解密conf.properties这个文件内的几个配置 就是采用了DES加密解密主要为了防止配置文件泄露数据库的信息暴露 如果不用直接注释掉就可以使用明文了 稍后会把properties相关文件贴出来 接下来是spring-mvc.xml ?xml version=1.0 encoding=UTF-8?beans xmlns=xmlns:aop= xmlns:mvc=xmlns:context= xmlns:task=xmlns:xsi=xsi:schemaLocation= http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context/spring-context.xsd 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/** /!-- 对模型视图名称的解析。
一般是包括整个项目的java文件的父包(由context提供) --context:component-scan base-package=org.system,对于自己目前遇到的权限问题我用这个也完全够用了,只实现Mysql 其他的可以参照 --property name=plugins ref=PaginationInterceptor //bean!-- mybatis默认选项配置 这里是因为我返回全是用Map所以如果数据库有字段为空就会使这个属性不显示 为了解决这个问题才需要配置这个--bean id=configuration class=org.apache.ibatis.session.Configurationproperty name=callSettersOnNulls value=true//bean!-- Mybatis分页拦截器 --bean name=PaginationInterceptor class=org.system.intercept.PaginationInterceptor /!-- Mapper接口所在包名,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/sql/nosql/9696.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
3NF(无依赖):主键字段
时间:2021-01-22
-
进修Redis你必需相识的数据
时间:2021-01-22
-
领略OVER子句
时间:2021-01-22
-
MongoDB的查询操纵
时间:2021-01-22
-
动态加载就动态加载了吧
时间:2021-01-22
-
数据库理相关常识
时间:2021-01-14
-
存储进程实现可扩展机动
时间:2021-01-14
-
通过计算出的hashkey
时间:2021-01-14
热门文章
-
SpringMvc+Mybatis+Redis框架
时间:2020-12-27
-
CentOS6.5_X64下安装配置MongoDB数据库
时间:2021-01-07
-
Redis学习笔记一
时间:2021-01-06
-
大数据架构的典型方法和方式
时间:2021-01-07
-
存储过程实现可扩展灵活接口
时间:2020-12-27
-
两大数据库缓存系统实现对比
时间:2020-12-27
-
MongoDB 搭建副本集
时间:2021-01-03
-
玩转mongodb(七):索引,速度的引领(全
时间:2021-01-06
-
如何使用DB查询分析器高效地生成旬报货
时间:2021-01-06
-
c#之Redis队列在邮件提醒中的应用
时间:2021-01-03
