ssm(Mysql)+Redis的Demo

来源:互联网 发布:linux fork多个子进程 编辑:程序博客网 时间:2024/06/06 21:06

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"         version="2.5">    <display-name>Archetype Created Web Application</display-name>    <!-- Spring和mybatis的配置文件 -->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:spring-mybatis.xml</param-value>    </context-param>    <context-param>        <param-name>spring.profiles.active</param-name>        <param-value>develop</param-value>        <!-- 这里配置了多个配置文件,选择使用spring-mybatis定义的develop那一个 -->    </context-param>        <!-- Spring监听器 -->    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <!-- 防止Spring内存溢出监听器 -->    <listener>        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>    </listener>        <!-- 编码过滤器 -->    <filter>        <filter-name>encodingFilter</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>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- Spring MVC servlet -->    <servlet>        <servlet-name>SpringMVC</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>        <servlet-mapping>        <servlet-name>SpringMVC</servlet-name>        <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->        <url-pattern>/</url-pattern>    </servlet-mapping>        <welcome-file-list>        <welcome-file>/index.jsp</welcome-file>    </welcome-file-list></web-app>  

配置了名字为SpringMVC的servlet为DispatcherServlet,配置文件为spring-mvc.xml.xml;

也配置了spring和mybatis整合的spring-mybatis.xml配置文件;


spring-mvc.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:p="http://www.springframework.org/schema/p"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:mvc="http://www.springframework.org/schema/mvc"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/mvc                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->    <context:component-scan base-package="org.thl" >        <context:include-filter type="annotation"                                expression="org.springframework.stereotype.Controller" />        <context:exclude-filter type="annotation"                                expression="org.springframework.stereotype.Service" />    </context:component-scan>    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->    <bean id="mappingJacksonHttpMessageConverter"          class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean>    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->    <bean            class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">        <property name="messageConverters">            <list>                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->            </list>        </property>    </bean>    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->        <property name="prefix" value="/WEB-INF/jsp/" />        <property name="suffix" value=".jsp" />    </bean>    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->    <bean id="multipartResolver"          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <!-- 默认编码 -->        <property name="defaultEncoding" value="utf-8" />        <!-- 文件大小最大值 -->        <property name="maxUploadSize" value="10485760000" />        <!-- 内存中的最大值 -->        <property name="maxInMemorySize" value="40960" />    </bean></beans>

spring-mybatus.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:tx="http://www.springframework.org/schema/tx"       xmlns:aop="http://www.springframework.org/schema/aop"       xsi:schemaLocation="http://www.springframework.org/schema/beans                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                        http://www.springframework.org/schema/context                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                        http://www.springframework.org/schema/tx                        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd                        http://www.springframework.org/schema/aop                        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">    <!-- 自动扫描 -->    <context:component-scan base-package="org.thl">        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />    </context:component-scan>    <!-- 引入配置文件 -->    <!--<bean id="propertyConfigurer"        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="location" value="classpath:spring-local.properties" />    </bean>    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close">        <property name="driverClassName" value="${driver}" />        <property name="url" value="${url}" />        <property name="username" value="${username}" />        <property name="password" value="${password}" />        <!– 初始化连接大小 –>        <property name="initialSize" value="${initialSize}"></property>        <!– 连接池最大数量 –>        <property name="maxActive" value="${maxActive}"></property>        <!– 连接池最大空闲 –>        <property name="maxIdle" value="${maxIdle}"></property>        <!– 连接池最小空闲 –>        <property name="minIdle" value="${minIdle}"></property>        <!– 获取连接最大等待时间 –>        <property name="maxWait" value="${maxWait}"></property>    </bean>    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">        <property name="maxTotal" value="${redis.maxTotal}" />        <property name="maxIdle" value="${redis.maxIdle}" />        <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />        <property name="testOnBorrow" value="true"/>    </bean>    <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo">        <constructor-arg index="0" value="${redis.one.ip}" />        <constructor-arg index="1" value="${redis.one.port}" type="int"/>    </bean>-->    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <!-- 自动扫描mapping.xml文件 -->        <property name="mapperLocations" value="classpath:/mapper/*Mapper.xml" />    </bean>    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="org.thl" />        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>    </bean>    <!-- 引入配置文件 -->    <!--<bean id="propertyConfigurer"          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property name="location" value="classpath:jdbc.properties" />    </bean>-->    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->    <bean id="transactionManager"          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <tx:method name="save*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />            <tx:method name="create*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="insert*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="update*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="merge*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" />            <tx:method name="remove*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="put*" propagation="REQUIRED" rollback-for="Exception" />            <tx:method name="use*" propagation="REQUIRED" rollback-for="Exception" />            <tx:method name="delete*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="check*" propagation="REQUIRED"                       rollback-for="Exception" />            <tx:method name="get*" propagation="REQUIRED" read-only="true" />            <tx:method name="select*" propagation="REQUIRED" read-only="true" />            <tx:method name="find*" propagation="REQUIRED" read-only="true" />            <tx:method name="list*" propagation="REQUIRED" read-only="true" />            <tx:method name="getUser" propagation="REQUIRED" read-only="true" />            <tx:method name="*" read-only="true" />        </tx:attributes>    </tx:advice>    <aop:config expose-proxy="true">        <!-- 只对业务逻辑层实施事务 -->        <!-- execution(* org.scme.*.service.*.*(..)) -->        <aop:pointcut id="txPointcut"                      expression="execution(* org.thl.service..*.*(..))" />        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut" />    </aop:config>    <!--<beans profile="local">        <context:property-placeholder ignore-resource-not-found="true"  location="classpath*:/spring-local.properties" />        <!– Tomcat JDBC连接池 –>        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">            <property name="driverClassName" value="${driver}" />            <property name="url" value="${url}" />            <property name="username" value="${username}" />            <property name="password" value="${password}" />            <!– Connection Pooling Info –>            <property name="maxActive" value="${jdbc.pool.maxActive}" />            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />            <property name="minIdle" value="0" />            <property name="defaultAutoCommit" value="false" />            <!– 连接Idle10分钟后超时,每1分钟检查一次 –>            <property name="timeBetweenEvictionRunsMillis" value="60000" />            <property name="minEvictableIdleTimeMillis" value="600000" />        </bean>        <!– jedis –>        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">            <property name="maxTotal" value="${redis.maxTotal}" />            <property name="maxIdle" value="${redis.maxIdle}" />            <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />            <property name="testOnBorrow" value="true"/>        </bean>        <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo">            <constructor-arg index="0" value="${redis.one.ip}" />            <constructor-arg index="1" value="${redis.one.port}" type="int"/>        </bean>    </beans>-->    <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool">        <constructor-arg index="0" ref="jedisPoolConfig" />        <constructor-arg index="1">            <list>                <ref bean="jedisShardInfo" />            </list>        </constructor-arg>    </bean>    <beans profile="local">        <context:property-placeholder ignore-resource-not-found="true"                                      location="classpath*:/spring-local.properties" />        <!-- Tomcat JDBC连接池 -->        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">            <property name="driverClassName" value="${driver}" />            <property name="url" value="${url}" />            <property name="username" value="${username}" />            <property name="password" value="${password}" />            <!-- Connection Pooling Info -->            <property name="maxActive" value="${jdbc.pool.maxActive}" />            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />            <property name="minIdle" value="0" />            <property name="defaultAutoCommit" value="false" />            <!-- 连接Idle10分钟后超时,每1分钟检查一次 -->            <property name="timeBetweenEvictionRunsMillis" value="60000" />            <property name="minEvictableIdleTimeMillis" value="600000" />        </bean>        <!-- jedis -->        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">            <property name="maxTotal" value="${redis.maxTotal}" />            <property name="maxIdle" value="${redis.maxIdle}" />            <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />            <property name="testOnBorrow" value="true"/>        </bean>        <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo">            <constructor-arg index="0" value="${redis.one.ip}" />            <constructor-arg index="1" value="${redis.one.port}" type="int"/>        </bean>    </beans>    <beans profile="develop">        <context:property-placeholder ignore-resource-not-found="true"                                      location="classpath*:/spring-develop.properties" ignore-unresolvable="true"/>        <!-- Tomcat JDBC连接池 -->        <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">            <property name="driverClassName" value="${driver}" />            <property name="url" value="${url}" />            <property name="username" value="root" />            <property name="password" value="${password}" />            <!-- Connection Pooling Info -->            <property name="maxActive" value="${jdbc.pool.maxActive}" />            <property name="maxIdle" value="${jdbc.pool.maxIdle}" />            <property name="minIdle" value="0" />            <property name="defaultAutoCommit" value="false" />            <!-- 连接Idle10分钟后超时,每1分钟检查一次 -->            <property name="timeBetweenEvictionRunsMillis" value="60000" />            <property name="minEvictableIdleTimeMillis" value="600000" />        </bean>        <!-- jedis -->        <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">            <property name="maxTotal" value="${redis.maxTotal}" />            <property name="maxIdle" value="${redis.maxIdle}" />            <property name="maxWaitMillis" value="${redis.maxWaitMillis}" />            <property name="testOnBorrow" value="true"/>        </bean>        <bean id="jedisShardInfo" class="redis.clients.jedis.JedisShardInfo">            <constructor-arg index="0" value="${redis.one.ip}" />            <constructor-arg index="1" value="${redis.one.port}" type="int"/>        </bean>    </beans></beans>

指定了mysql和redis的property文件:

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/zhao?useUnicode=true&characterEncoding=utf-8username=xiaogangpassword=xiaogang#定义初始连接数  initialSize=0#定义最大连接数  maxActive=20#定义最大空闲  maxIdle=20#定义最小空闲  minIdle=1#定义最长等待时间  maxWait=60000# ------------- redis --------------------redis.one.ip = 127.0.0.1redis.one.port = 6379redis.maxTotal = 50redis.maxIdle = 10redis.maxWaitMillis = 1000jdbc.pool.maxIdle=10jdbc.pool.maxActive=50

控制器controler代码
@Controller@RequestMapping("user")public class UserController {    @Resource    private IUserService userServiceImpl;    @Resource    private IRedisService redisServiceImpl;    @RequestMapping("/getUser")    @ResponseBody    public String getUser(){        return this.userServiceImpl.selectByPrimaryKey(1).toString();    }    @RequestMapping("/addRedisUser")    @ResponseBody    public String addUser(){        User user=this.userServiceImpl.selectByPrimaryKey(1);        Gson gson=new Gson();        this.redisServiceImpl.setValue(user.getAccount(),gson.toJson(user));        return "SUCCESS";    }    @RequestMapping("/getRedisUser")    @ResponseBody    public String getRedisUser(){        return this.redisServiceImpl.getValue("test");    }    @RequestMapping("/getCacheUser")    @ResponseBody    public  String getCacheUser(){        return this.redisServiceImpl.getValue("admin");    }}

redis的service
@Component@Transactional(readOnly = true)public class RedisServiceImpl implements IRedisService {    @Resource    private ShardedJedisPool shardedJedisPool;    @Override    public void setValue(String key, String val) {        ShardedJedis jedis = null;        try {            jedis = shardedJedisPool.getResource();            jedis.set(key, val);        } catch (Exception e) {            e.printStackTrace();        } finally {            if (jedis != null)                jedis.close();        }    }    @Override    public String getValue(String key) {        ShardedJedis jedis = null;                jedis = shardedJedisPool.getResource();        return jedis.get(key);    }}

整个结构:

参考:https://github.com/taohanlin/SSMRedis