1.爲了開發項目要求,花了兩天時間搭建了一個J2EE的框架。css
開發工具 | IEDA |
JDK | 1.7 |
框架 | Maven |
主要的是使用的框架以下html
Maven+Springmvc +Spring +Mybatis +druid +mysql/oracle +redis + jspjava
總體的框架結構如圖所示,注意圖片中紅色圈中部分不然報錯,如今開始整理代碼:mysql
pom.xmlweb
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SSMweb</groupId> <artifactId>web</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>web Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring版本號 --> <spring.version>4.3.2.RELEASE</spring.version> <!-- mybatis版本號 --> <mybatis.version>3.2.8</mybatis.version> <!-- log4j日誌文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> <oracle.version>14</oracle.version> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.ini</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> <dependencies> <!-- 添加Spring-core包 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- 添加spring-context包 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- 添加spring-tx包 --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- 添加spring-jdbc包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- 爲了方便進行單元測試,添加spring-test包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!--添加aspectjweaver包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!-- 添加mybatis的核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!-- 添加mybatis與Spring整合的核心包 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- 添加servlet3.0核心包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.2-b01</version> </dependency> <!-- jstl --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 添加druid鏈接池包 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.24</version> </dependency> <!-- 添加junit單元測試包 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>${oracle.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.2.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.2.RELEASE</version> </dependency> </dependencies> <build> <finalName>web</finalName> </build> </project>
下面開始配Java文件redis
User.javaspring
package com.tydic.www.entity; import java.io.Serializable; /** * @author liuren */ public class User implements Serializable{ private static final long serialVersionUID = -1695973853274402680L; private int userid; private String login_name; private String login_pwd; public User() { } public User(int userid, String login_name, String login_pwd) { super(); this.userid = userid; this.login_name = login_name; this.login_pwd = login_pwd; } public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getLogin_name() { return login_name; } public void setLogin_name(String login_name) { this.login_name = login_name; } public String getLogin_pwd() { return login_pwd; } public void setLogin_pwd(String login_pwd) { this.login_pwd = login_pwd; } }
UserController.javasql
package com.tydic.www.controller; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import com.tydic.www.entity.User; import com.tydic.www.service.UserService; @Controller public class UserController { @Autowired private UserService userService; @RequestMapping(value="/toQueryUser") public ModelAndView toQueryUser(){ User user = userService.getUser(1); Map<String, Object> map = new HashMap<String, Object>(); map.put("user", user); return new ModelAndView("home/index", map); } @RequestMapping(value="/addUser") public ModelAndView addUser(){ userService.addUser(); Map<String, Object> map = new HashMap<String, Object>(); map.put("user", "太極"); return new ModelAndView("home/index", map); } }
UserMapper.java數據庫
package com.tydic.www.dao; import com.tydic.www.entity.User; public interface UserMapper { public User getUserById(int id); public void addUser(User user); }
UserMapper.xmlexpress
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.tydic.www.dao.UserMapper"> <!-- 緩存類配置 --> <cache type="com.tydic.www.redis.RedisCache" /> <select id="getUserById" parameterType="int" resultType="user" useCache="true"> select * from AU_USER where userid = #{id} </select> <insert id="addUser" parameterType="User"> <![CDATA[ insert into AU_USER(userid,login_name,login_pwd) values(#{userid},#{login_name},#{login_pwd}); ]]> </insert> </mapper>
RedisUtil.java
package com.tydic.www.redis; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.druid.util.StringUtils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; @SuppressWarnings("unused") public final class JedisUtil { //Redis服務器IP private static String ADDR = "127.0.0.1"; //Redis的端口號 private static int PORT = 6379; //訪問密碼 private static String AUTH = "admin"; //可用鏈接實例的最大數目,默認值爲8; //若是賦值爲-1,則表示不限制;若是pool已經分配了maxActive個jedis實例,則此時pool的狀態爲exhausted(耗盡)。 private static int MAX_ACTIVE = 1024; //控制一個pool最多有多少個狀態爲idle(空閒的)的jedis實例,默認值也是8。 private static int MAX_IDLE = 200; //等待可用鏈接的最大時間,單位毫秒,默認值爲-1,表示永不超時。若是超過等待時間,則直接拋出JedisConnectionException; private static int MAX_WAIT = 10000; private static int TIMEOUT = 10000; //在borrow一個jedis實例時,是否提早進行validate操做;若是爲true,則獲得的jedis實例均是可用的; private static boolean TEST_ON_BORROW = true; private static JedisPool jedisPool = null; /** * 初始化Redis鏈接池 */ static { try { JedisPoolConfig config = new JedisPoolConfig(); //config.setMaxActive(MAX_ACTIVE); config.setMaxIdle(MAX_IDLE); //config.setMaxWait(MAX_WAIT); config.setTestOnBorrow(TEST_ON_BORROW); //使用Redis密碼 //jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH); //不使用Redis密碼 jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, null); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取Jedis實例 * @return */ public synchronized static Jedis getJedis() { try { if (jedisPool != null) { Jedis resource = jedisPool.getResource(); return resource; } else { return null; } } catch (Exception e) { e.printStackTrace(); return null; } } /** * 釋放jedis資源 * @param jedis */ @SuppressWarnings("deprecation") public static void returnResource(final Jedis jedis) { if (jedis != null) { jedisPool.returnResource(jedis); } } //對象序列化爲字符串 public static String objectSerialiable(Object obj){ String serStr = null; try { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream); objectOutputStream.writeObject(obj); serStr = byteArrayOutputStream.toString("ISO-8859-1"); serStr = java.net.URLEncoder.encode(serStr, "UTF-8"); objectOutputStream.close(); byteArrayOutputStream.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return serStr; } //字符串反序列化爲對象 public static Object objectDeserialization(String serStr){ Object newObj = null; try { String redStr = java.net.URLDecoder.decode(serStr, "UTF-8"); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(redStr.getBytes("ISO-8859-1")); ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); newObj = objectInputStream.readObject(); objectInputStream.close(); byteArrayInputStream.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return newObj; } //測試 public static void main(String[] args) { //構造一個list List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map = new HashMap<String, String>(); map.put("number", "王小二"); map.put("name", "王二"); list.add(map); HashMap<String, String> map2 = new HashMap<String, String>(); map2.put("number", "張三"); map2.put("name", "張小三"); list.add(map2); //將對象序列化爲字符串 String serStr = objectSerialiable(list); System.out.println(serStr); //將序列化以後的字符串保存在redis中 JedisUtil.getJedis().set("list", serStr); //從redis中取中字符串 String deSerStr = JedisUtil.getJedis().get("list"); if(!StringUtils.isEmpty(deSerStr)){ //將取出的字符串反序列化爲對象 List<HashMap<String, String>> deList = (List<HashMap<String, String>>) objectDeserialization(deSerStr); if(deList!=null && deList.size()>0){ for(Map m : deList){ System.out.println(m.get("number")+" "+m.get("name")); } } } } }
ReidsCache.java
package com.tydic.www.redis; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ibatis.cache.Cache; /* * 使用第三方緩存服務器,處理二級緩存 */ public class RedisCache implements Cache { private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private String id; public RedisCache(final String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } this.id = id; } public String getId() { return this.id; } public void putObject(Object key, Object value) { JedisUtil.getJedis().set(SerializeUtil.serialize(key.toString()), SerializeUtil.serialize(value)); } public Object getObject(Object key) { Object value = SerializeUtil.unserialize(JedisUtil.getJedis().get( SerializeUtil.serialize(key.toString()))); return value; } public Object removeObject(Object key) { return JedisUtil.getJedis().expire( SerializeUtil.serialize(key.toString()), 0); } public void clear() { JedisUtil.getJedis().flushDB(); } public int getSize() { return Integer.valueOf(JedisUtil.getJedis().dbSize().toString()); } public ReadWriteLock getReadWriteLock() { return readWriteLock; } }
序列化工具類
package com.tydic.www.redis; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class SerializeUtil { public static byte[] serialize(Object object) { ObjectOutputStream oos = null; ByteArrayOutputStream baos = null; try { // 序列化 baos = new ByteArrayOutputStream(); oos = new ObjectOutputStream(baos); oos.writeObject(object); byte[] bytes = baos.toByteArray(); return bytes; } catch (Exception e) { e.printStackTrace(); } return null; } public static Object unserialize(byte[] bytes) { if (bytes == null) return null; ByteArrayInputStream bais = null; try { // 反序列化 bais = new ByteArrayInputStream(bytes); ObjectInputStream ois = new ObjectInputStream(bais); return ois.readObject(); } catch (Exception e) { e.printStackTrace(); } return null; } }
UserService.java
package com.tydic.www.service; import com.tydic.www.entity.User; public interface UserService { public User getUser(int id); public void addUser(); }
UserServiceImpl.java
package com.tydic.www.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.stereotype.Service; import com.tydic.www.dao.UserMapper; import com.tydic.www.entity.User; import com.tydic.www.service.UserService; @Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; public User getUser(int id) { User user = null; try{ user = userMapper.getUserById(id); }catch (DataAccessException e) { System.out.println(e.getLocalizedMessage()); } return user; } public void addUser(){ User user = new User(); user.setLogin_name("zhangsanfeng"); user.setLogin_pwd("̫太極"); userMapper.addUser(user); } }
而後是配置文件。根據圖片中的提示建立。
myBatis.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 日誌開啓 --> <setting name="logImpl" value="LOG4J"/> <!-- 二級緩存開啓 --> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="false"/> <setting name="aggressiveLazyLoading" value="true"/> </settings> <!-- 配置映射類的別名 --> <typeAliases> <!-- 配置entity下的全部別名 別名首字母小寫 --> <package name="com.tydic.www.entity" /> </typeAliases> </configuration>
spring-mvc.xml
<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:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 設置註解掃描包 只掃描@Controller註解 --> <context:component-scan base-package="com.tydic.www" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <mvc:annotation-driven /> <!-- 靜態資源 --> <mvc:default-servlet-handler/> <!-- 默認視圖解析器 --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:order="3"> <property name="suffix" value=".jsp" /> <property name="prefix" value="/WEB-INF/pages/"></property> </bean> <!-- SpringMVC上傳文件時,需配置MultipartResolver處理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:defaultEncoding="UTF-8"> <!-- 指定所上傳文件的總大小不能超過104857600......注意maxUploadSize屬性的限制不是針對單個文件,而是全部文件的容量之和 --> <property name="maxUploadSize" value="104857600" /> <property name="maxInMemorySize" value="4096"/> </bean> </beans>
spring-mybatis.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: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-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!--Druid 鏈接池配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <!-- 基本屬性 url、user、password --> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <property name="filters" value="stat,config" /> <!-- <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${jdbc.publickey}" /> --> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="40" /> <!-- 配置獲取鏈接等待超時的時間 --> <property name="maxWait" value="60000" /> <!-- 配置間隔多久才進行一次檢測,檢測須要關閉的空閒鏈接,單位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一個鏈接在池中最小生存的時間,單位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT 'x' FROM DUAL" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <!-- 打開PSCache,而且指定每一個鏈接上PSCache的大小 --> <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> <!-- 超過期間限制是否回收 --> <property name="removeAbandoned" value="true" /> <!-- 超時時間;單位爲秒。180秒=3分鐘 --> <property name="removeAbandonedTimeout" value="180" /> <!-- 關閉abanded鏈接時輸出錯誤日誌 --> <property name="logAbandoned" value="true" /> <!-- 配置監控統計攔截的filters,去掉後監控界面sql沒法統計 --> <!-- property name="filters" value="stat" / --> </bean> <!-- 配置sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 實例化sqlSessionFactory時須要使用上述配置好的數據源以及SQL映射文件 --> <property name="dataSource" ref="dataSource" /> <!-- 自動掃描me/gacl/mapping/目錄下的全部SQL映射的xml文件, 省掉Configuration.xml裏的手工配置 value="classpath:com/mapper/*.xml"指的是classpath(類路徑)下com.mapping包中的全部xml文件 UserMapper.xml位於com.mapping包下,這樣UserMapper.xml就能夠被自動掃描 --> <property name="mapperLocations" value="classpath:com/tydic/www/mapper/*.xml" /> <property name="configLocation" value="classpath:mybatis/myBatis.xml" /> </bean> <!-- 配置掃描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 掃描com.dao這個包以及它的子包下的全部映射接口類 --> <property name="basePackage" value="com.tydic.www.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> </beans>
spring-redis.xml
<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:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 鏈接池基本參數配置,相似數據庫鏈接池 --> <context:property-placeholder location="classpath*:redis.properties" /> <bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxIdle" value="${redis.maxIdle}" /> <property name="testOnBorrow" value="${redis.testOnBorrow}"/> </bean> <!-- 鏈接池配置,相似數據庫鏈接池 --> <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" > <property name="hostName" value="${redis.host}"></property> <property name="port" value="${redis.port}"></property> <!-- <property name="password" value="${redis.pass}"></property> --> <property name="poolConfig" ref="poolConfig"></property> </bean> <!-- 調用鏈接池工廠配置 --> <bean id="redisTemplate" class=" org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="connectionFactory"></property> <!-- 若是不配置Serializer,那麼存儲的時候智能使用String,若是用User類型存儲,那麼會提示錯誤User can't cast to String!!! --> <property name="keySerializer"> <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" /> </property> <property name="valueSerializer"> <bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" /> </property> </bean> </beans>
spring-source.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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 引入dbconfig.properties屬性文件 --> <context:property-placeholder location="classpath:*.properties" /> <!-- 自動掃描(自動注入),掃描me.gacl.service這個包以及它的子包的全部使用@Service註解標註的類 --> <context:component-scan base-package="com.tydic.www" /> </beans>
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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>ssm整合(maven)</display-name> <!-- spring配置文件整合配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-source.xml, classpath:spring/spring-mybatis.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- springmvc配置 --> <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/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- druid 監控 --> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <filter> <filter-name>druidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class> <init-param> <param-name>exclusions</param-name> <param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value> </init-param> <init-param> <param-name>principalSessionName</param-name> <param-value>sessionInfo</param-value> </init-param> <init-param> <param-name>profileEnable</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>druidWebStatFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
index.jsp
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 123123asd </body> </html>
jdbc.properties
#JDBCdriver #jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.driverClassName=com.mysql.jdbc.Driver #JDBC jdbc.url=jdbc\:mysql\://127.0.0.1:3306/ssmredis?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true jdbc.username=root jdbc.password=root #jdbc.publickey=阿里祕鑰 jdbc.dbcp.initialSize=10 jdbc.dbcp.maxActive=500 jdbc.dbcp.maxIdle=10 jdbc.dbcp.minIdle=1 jdbc.dbcp.maxWait=120000
log4j.properties
log4j.rootLogger=DEBUG,Console,ERROR,stdout log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n
redis.properties
redis.host =127.0.0.1 redis.port =6379 #redis密碼 redis.pass = redis.maxIdle = 200 redis.maxActive = 1024 redis.maxWait = 10000 redis.testOnBorrow = true
可根據以上內容創建這個項目而後跑起來。
源碼分享:連接:http://pan.baidu.com/s/1qX92ymC 密碼:bupy
數據庫文件:
ssmredis.sql
CREATE TABLE `au_user` ( `userid` int(16) NOT NULL AUTO_INCREMENT, `login_name` varchar(255) DEFAULT NULL, `login_pwd` varchar(255) DEFAULT NULL, PRIMARY KEY (`userid`) ) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4;
後面研究添加事務管理。否則回滾是個問題。若是有專家比較瞭解這個,能夠給我留言怎麼修改,不勝感激。