Hoy, registremos los problemas que encontré durante la integración del marco:
1. Cuando se usa Redis para implementar el intercambio de sesión, el Informe de inicio del proyecto no se llamó a 'SpringsessionRepositoryFilter'
2. Al llamar a la clase de herramienta de caché, el Jediscool inyectado es nulo (un error detallado relacionado con el escaneo de primavera)
Ok, comencé a agregar los archivos que integré
pom.xml depende del paquete jar
< </pendency>
configuración web.xml
<? xml versión = "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 http://java.sun.com/xml/ns/javaeeee/web-app_3_0.xsd" Versión = "3.0" <amamname> contextConfigLocation </amamname> <amam-value> classpath: spring-cfg.xml </amam-value> </text-param> <!-Filtro de sesión colocado en el cabezal de filtro-> <filter> <filter-name> springseSessionRepositoryFilter </filter-name> <filter-class> org.springframework.web.filter.delegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name> springseSessionRepositoryFilter </filter-name> <url-pattern>/*</url-pattern> </filter-papping> <! <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <async-supported>true</async-supported> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name> EncodingFilter </filtre-name> <url-pattern>/*</sl-pattern> </filtre-mapping> <!-spring oyeyer-> <searcher> <searcher-class> org.springfframework.web.context.contexteboaderlistener </oyecher-class> <////////oyearer> </streingfreFrameWork MVC-> <Servlet> <Servlet-name> springmvc </servlet-name> <ervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <itinparam> <amamname> contextconfiglocation </param-name> <amam-value> classpath: spring-mvc.xmmmmm. <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- <servlet-mapping> <servlet-name>default</servlet-name> <Url-Pattern>/static/*</sl-Pattern> </servlet-mapping>-> </beb-app>
Archivo de configuración de Spring-CFG.XML
<? xml versión = "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://wwww.springframework.org/sChMing" " xmlns: util = "http://www.springframework.org/schema/util" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/speans/spring-be-4. http://www.springframework.org/schema/context http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org//util http://www.springframework.org/schema/util/spring-util.xsd "> <!-Abra el proxy automático para la programación de facetos-> <aop: aspectoj-auTopproxy proxy-target-class =" true "/> <!-escanee la anotación para generar bean-> <contextation cho contextation/> contextation/>>> <context: component-scan base-pankage = "com.zyt"> <context: exclugo-flyter type = "annotation" expresion = "org.springframework.steretype.controller"/> </context: component-scan> <! Lea múltiples propiedades de configuración-> <bean id = "PropertyConfigurer"> <Nombre de propiedad = "Listations"> <sist> <LId> <LId> <List> <List> <value> classpath: jdbc.properties </value> <value> classpath: redis.properties </value> </list> </property> </ Bean> <!-Jedis Connection Pool-> <Bean Id = "PoolConfig"> <Property Name = "Maxidle" Value = "$ {Redis.maxidle}"/> <Property Name = "Maxtotal" value = "$ {redis.maxactive}"/> <propiedad name = "maxwaitmillis" value = "$ {redis.maxwait}"/> <propiedad name = "testonborrow" value = "$ {redis.testonborrow}"/> </bean> <!-Redis's Connection Pool no es una opción requerida: TimeOut/Password-> <<beay " <constructor-arg index = "0" ref = "PoolConfig"/> <constructor-arg index = "1" valor = "$ {redis.host}"/> <constructor-arg index = "2" valor = "$ {redis.port}" type = "int"/> <constructor-arg index = "3" valor = "$ {redis.timeout}" type "" <constructor-arg index = "4" value = "$ {redis.password}"/> </bean> <!-Jedis Connection Factory-> <bean id = "jedisconnectionFactory"> <Property name = "PoolConfig" ref = "PoolConfig"/> <Property Name = "Port" Value = "$ {Redis.port}"/> <Name de propiedad = "Host Name" Host Name " value = "$ {redis.host}"/> <!-<propiedad name = "contraseña" value = "$ {redis.pass}"/>-> </bean> <util: constante static --field = "org.springframework.session.data.redis.config.configureRedisaction.no_op"/> <!-Spring RedIsplate-> <Se Beayis-> <Aterlatado-> Spring RedisPlate-> <Aterlate-> <Aterlate-> Spring RedisPlate-> <Aterplate-> Sprin id = "redistemplate"> <Property name = "ConnectionFactory" ref = "jedisconnectionFactory"/> </ bean> <!-redis end-> <!-Spring Session Begin-> <Bean ID = "redishttpsessionConfiguration"> <Property = "MaxInactiveIntervalInseconds" valor "valor =" 1800 "/> </bean> << id = "SQLSessionFactory"> <Property Name = "DataSource" ref = "DataSource"/> <Property Name = "mapperLocations" value = "classpath: com/zyt/**/**. xml"/> <//bean> <bean> <sperty name = "basePackage" value = "com.ytt.*. Dao"/> <name de propiedad = "sqlsession" value = "sqlsessionFactory"/> </reme> <!-Declare la gestión de transacciones usando anotación-> <tx: anotación transaccion-ganager = "transaccionManager"/> <bean id = "transaccionManager"> <name de propiedad = "dataSource" ref = "dataSource"/> </bean> <! init-Method = "init"> <Property name = "url" value = "$ {jdbc_url}"/> <propiedad name = "username" value = "$ {jdbc_username}"/> <propiedad name = "contraseña" valor = "$ {jdbc_password}"/> <!-Tamaño de conexión de conexión-> <spertest name = "inicialize" value "" number of connections used by connection pool--> <property name="maxActive" value="20"/> <property name="minimum idle" value="property name="minIdle" value="0"/> <!-- Get the maximum connection waiting time --> <property name="maxWait" value="60000"/> <!-- <property name="poolPreparedStatements" value="true" /> <property name = "maxPoolPreparedStatEmentPonConnectionsize" value = "33"/>-> <Property name = "ValidationQuery" value = "$ {ValidationQuery}"/> <Property Name = "testOnBorrow" valor = "falso"/> <Property name = "testonBorrow" value = "falso"/> <name de la propiedad = "testHileidle" value = "verdadero"/"verdadero" <! Tae-Take-To Take To Take To Togning to Perntive to Contintipure to Contintipure Intervalo de detección para detectar conexiones inactivas que deben cerrarse, en milisegundos-> <propiedad name = "TimetweenEvictionRunsMillis" valor = "60000"/> <!-Configure el tiempo mínimo para que una conexión sobreviva en el grupo, en MilliseConds-> <propiedad de propiedad = "MineVictableMeMeMeMeMeMemillis" Valor = "25200000"/<<<<< <Property name = "removeAbaBaBaLed" value = "true"/> <!-1800 segundos, es decir, 30 minutos-> <propiedad name = "removeAbaBaLeDtimeOut" value = "1800"/> <!-Registro de errores de salida Al cerrar la conexión abandonada-> <Property Name = "logabanded" value = "true"/> <!-monitorear la database-> <<!-<nombre de propiedad de propiedad = "value" de "estatales"/"estatales" <Property Name = "Filters" Value = "Mergestat"/> </beans>JDBC.Properties
conductorClassName = com.mysql.jdbc.driver ValidationQuery = select 1 jdbc_url = jdbc: mysql: // localhost: 3306/zyt_demo? useunicode = true & caracteresCoding = utf-8 & zeroDateTimeBehavior = converttonullo
redis.properties
redis.isopen = en redis.host = 127.0.0.1 redis.port = 6379 redis.maxidle = 300 redis.maxactive = 600 redis.maxwait = 1000 redis.testonborrow = true redis.timeout = 2000 #redis.portword =
El anterior es el archivo de configuración integrado, donde la configuración sobre Redis es la clave del éxito de la integración
Resumen de la pregunta
1. El proyecto de inicio se informó como una excepción después de integrar la integración debido a la ubicación del archivo de configuración, por lo que el inicio no tuvo éxito. Pruébalo varias veces. Se puede usar el archivo de configuración anterior.
2. Llamé a la clase de herramientas de caché antes, y demostró que la inyección de Jedispool estaba vacía. Inyectado en el controlador y había un valor. Porque la forma en que llamé a la clase de herramientas en el controlador era nueva, por lo que la primavera perdió la inyección de Jedispool al escanear la clase de herramientas. Se puede resolver utilizando la clase de herramienta de inyección en el controlador.
Por ejemplo:
Resumir
Lo anterior es el proceso de integración de primavera Redis (JEDIS) para realizar el intercambio de sesión, espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!