简单的SSS整合(Sping,SpringMVC,SpringData)+redis缓存服务配置+logback日志
2017-12-01 16:26
513 查看
-#简单的SSS整合(Sping,SpringMVC,SpringData)+redis缓存服务配置
目录结构
说明
SpringData JPA底层依赖Hibernate实现 该项目为maven聚合项目
agg 项目(聚合项目-父项目)
pom.xml(聚合项目-同时也是父项目)
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.qfedu</groupId> <artifactId>mooc1706</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <!-- 实际开发中聚合项目通常也是父项目 --> <!-- 配置聚合项目是通过聚合项目可以管理其他项目 --> <!-- 通过modules标签配置被聚合项目管理的其他项目 --> <modules> <module>../mooc1706common</module> <module>../mooc1706course</module> </modules> <!-- 通过properties标签配置公用属性 --> <!-- 通过dependencyManagement标签管理依赖项 --> <!-- 通过pluginManagement标签管理插件 --> <!-- 子项目继承父项目以后可以使用统一的配置 --> <properties> <spring.version>4.3.12.RELEASE</spring.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</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-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.11.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.8.9.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.5</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.11</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> <!--logback日志--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> <build> <pluginManagement> <plugins> </plugins> </pluginManagement> </build> </project>
common 项目(子项目)
jdbc.properties(数据源信息-经过AES或RSA加密)
jdbc_url=jdbc:mysql://120.77.222.217:3306/mooc jdbc_user=rbwxfHm7hLRZM/E8mMeGxg== jdbc_password=mz4dq8byXGNyeRGtpxvXGw==
spring-persistence.xml (Spring配置文件)
<?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:jpa="http://www.springframework.org/schema/data/jpa" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> <!-- 配置属性占位符的处理对象 该对象可以读取指定的配置文件获取参数 --> <!-- 如果参数值是经过特殊处理的值 那么就需要继承该类自定义属性占位符处理对象 --> <!--<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations" value="classpath:jdbc.properties"/> </bean>--> <!-- 继承PropertyPlaceholderConfigurer类,自定义解密 --> <bean class="com.lyx.mooc.util.MyPropertyPlaceholderConfigurer"> <property name="locations" value="classpath:jdbc.properties"/> </bean> <!-- SpringData jpa 自己写实现类时,配置实现类的后缀(默认 Impl) --> <!--<jpa:repositories base-package="com.lyx.mooc.persistence" repository-impl-postfix="Helper"/>--> <!-- 配置数据库连接池 --> <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_user}" /> <property name="password" value="${jdbc_password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="10" /> <property name="minIdle" value="10" /> <property name="maxActive" value="50" /> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="10000" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="SELECT 'x'" /> <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" /> <!-- 配置监控统计拦截的filters --> <property name="filters" value="stat" /> </bean> <!-- 配置JPA底层依赖的ORM框架实现的适配器对象 --> <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <property name="database" value="MYSQL" /> <property name="showSql" value="true" /> <property name="databasePlatform" value="org.hibernate.dialect.MySQL57Dialect" /> </bean> <!-- 配置EntityManagerFactory对象--> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> <property name="packagesToScan" value="com.lyx.mooc.domain" /> </bean> <!-- 配置JPA事务管理器对象 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- 配置声明式事务 (在需要事务环境的地方只需要通过注解进行说明即可) --> <tx:annotation-driven /> </beans>
logback.xml (logback日志的配置文件)
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/mooc-log-home" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/mooc.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
course 项目(子项目)
spring-service-course.xml (需要导入common项目的Spring配置文件)
<?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: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/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> <!-- 配置扫描哪个包及其子包来发现需要纳入Spring IoC容器管理的对象 --> <context:component-scan base-package="com.lyx.mooc.service" /> <context:annotation-config /> <import resource="classpath*:spring-persistence.xml" /> <!-- 配置使用声明式缓存服务 --> <cache:annotation-driven /> <!-- 配置Jedis连接池配置对象 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="minIdle" value="10" /> <property name="maxIdle" value="100" /> <property name="maxTotal" value="1000" /> <property name="maxWaitMillis" value="500" /> </bean> <!-- 配置Jedis连接工厂对象 --> <bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="poolConfig" ref="jedisPoolConfig" /> <property name="hostName" value="120.77.222.217" /> <property name="port" value="10086" /> <property name="password" value="asdfghjkl" /> <property name="timeout" value="10000" /> </bean> <!-- 配置Spring封装的RedisTemplate对象 --> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"> <property name="connectionFactory" ref="redisConnectionFactory" /> </bean> <!-- 配置Redis缓存管理器对象 --> <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg ref="redisTemplate" /> </bean> </beans>
spring-mvc.xml (SpringMVC配置文件)
<?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:mvc="http://www.springframework.org/schema/mvc" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 配置在哪个包及其子包下找到控制器并将其对象纳入IoC容器的管理 --> <context:component-scan base-package="com.lyx.mooc.controller" /> <!-- 以注解的方式配置Spring MVC --> <mvc:annotation-driven> <!-- 消息转换器: 用于将对象进行序列化处理以便作为HTTP协议消息体返回给客户端 --> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" /> <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> </mvc:message-converters> </mvc:annotation-driven> <!-- 配置如何处理静态资源 --> <mvc:default-servlet-handler /> <!-- 配置JSP的视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="order" value="16" /> </bean> <!-- Freemarker / Velocity / Thymeleaf --> <!-- 配置Freemarker模板引擎 --> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/ftl/" /> <property name="defaultEncoding" value="utf-8" /> <property name="freemarkerSettings"> <props> <prop key="classic_compatible">true</prop> </props> </property> </bean> <!-- 配置Freemarker视图解析器 --> <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="suffix" value=".ftl" /> <property name="contentType" value="text/html; charset=utf-8" /> <property name="cache" value="true" /> <property name="order" value="2" /> </bean> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <!-- 前端控制器 (门面模式) --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <multipart-config /> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-service.xml</param-value> </context-param> <!-- 配置创建Spring IoC容器的上下文监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 编码过滤器 --> <filter> <filter-name>encoding</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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
redis 在业务层进行缓存的实现
package com.qfedu.mooc1706.service.impl; import com.lyx.mooc.domain.CourseCatalog; import com.lyx.mooc.mapper.CourseCatalogMapper; import com.lyx.mooc.persistence.CourseCatalogDao; import com.lyx.mooc.service.CourseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service @Transactional public class CourseServiceImpl implements CourseService { @Autowired private CourseCatalogDao courseCatalogDao; @Cacheable(value = "catalogs") @Override public List<CourseCatalog> listAllCourseCatalogs() { return courseCatalogDao.findByParentIsNull(); } @Cacheable(value = "catalogs", key = "#id") @Override public CourseCatalog getCourseCatalogById(Integer id) { return courseCatalogDao.findOne(id); } @CachePut(value = "catalogs", key = "#result.id") @Override public CourseCatalog addNewCourseCatalog(CourseCatalog catalog) { return courseCatalogDao.save(catalog); } @CacheEvict(value = "catalogs", key = "#id") @Override public void removeCourseCatalogById(Integer id) { courseCatalogDao.delete(id); } }
相关文章推荐
- SSM简单整合(Mybatis,Spring,SpringMVC,基于注解和xml文件配置)
- springMVC、spring、jpa、springData整合配置
- 纯Java配置SpringMvc整合Spring-Data-JPA
- SpringMVC、Spring、Hibernate整合基础配置
- SpringMVC4+JPA(Hibernate4)+Spring-data-jpa+Shiro整合
- spring,springmvc,mybatis基本整合(一)--xml文件配置方式(1)
- java操作Mongodb,Spring-data-mongo简单配置
- Spring ,Springmvc,mybatis三大框架整合的配置文件支持
- spring整合mybatis的简单配置
- 简单示例:Spring4 整合 单个Redis服务
- idea maven sss(Spring+Struts+SpringDataJpa)实现简单登录
- spring整合struts2后,struts2的action中调用服务层时,不需要在spring配置文件中去注入
- spring-springmvc-hibernate整合之配置文件
- 基于spring-cloud相关技术整合,实现接口调用、服务容错、动态路由配置等
- redis-spring-data log4j ssm配置整合的一个项目
- Java Web开发之Spring | SpringMvc | Mybatis | Hibernate整合、配置、使用
- spring简单整合Redis配置
- 基于注解的Spring MVC整合Hibernate(所需jar包,spring和Hibernate整合配置,springMVC配置,重定向,批量删除)
- spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
- 简单配置spring+springmvc+mybatis之整合