Hoje, vamos registrar os problemas que encontrei durante a integração da estrutura:
1. Ao usar o Redis para implementar o compartilhamento de sessões, o relatório de início do projeto Nenhum feijão chamado 'SpringsessionRepositoryFilter' é definida exceção
2. Ao chamar a classe de ferramentas de cache, o Jedispool injetado é nulo (um erro detalhado relacionado à varredura da mola)
Ok, comecei a adicionar os arquivos que interi
pom.xml depende do pacote JAR
<!-Sessão de primavera BEGIN-> <Depency> <PuerpId> redis.clients </groupiD> <TRARFACTID> JEDIS </ArtifactId> <Versão> 2.9.0 </sipers> </dependency> <pendesency> <GroupId> org.springframework.sess </Groupid> <Artifactid> <runheD> versus-dras-rredes-rredes-rredesnishisshring.s.s.s.s.s.sPringFramework.Session </Groupid> </dependency>
Web.xml Configuração
<?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 http://java.sun.com/xmls/javaee/web-web-web-web-web-web-10) <amam-name> contextConfigLocation </param-name> <amam-value> classPath: spring-cfg.xml </param-value> </context-param> <!-filtro de sessão colocado na cabeça do filtro-> <filter> <filter-name> springSessionRepositoryFilter </filter> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSessionRepositoryFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Encoding filter--> <filter> <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> </initir-param> </ftrhter> <filter-mapping> <filter-name> EncodingFilter </ftrid-Name> <url-Pattern>/*</url-tattern> </ftrher-Mapping> <!-Springerbl-conxtoter> <vocener-class-class> org.springFramework.web.Contet.Conter> MVC-> <Verlet> <Verlet-name> springmvc </servlet-name> <Servlet-class> org.springframework.web.servlet.dispatcherServlet </servlet-class> <inter-param> <amam-name> contextCenfiglocation </paramname> <am param-value> classPane> ClassPath> ClassPath> ClassPath> Classpath> Classpath> Classpath> Classpath> ClassPath> Classpath> Classpath> ClassPath> Classpath> Classpath> ClassPath> Classpath> ClassPath> Classpath> Classpath> ClassPath: Spring-Mname> <Oad-on-startup> 1 </load-on-startup> <sync-suported> true </sync-suported> </servlet> <Servlet-Mapping> <Vapp-Mapping> <sutlet-name> springmvc </servlet-name> <url-tattern>/</url-pattern> </servlect> <Verlet-name> padrão </servlet-name> <url-tattern>/static/*</url-tattern> </servlet-mapping>-> </web-app>
arquivo de configuração spring-cfg.xml
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/sring-a--40 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" > <!--Open the automatic proxy for the facet programming --> <aop:aspectj-autopproxy proxy-target-class="true"/> <!--Scan the annotation to generate bean--> <context:annotation-config/> <Contexto: component-scan Base-package = "com.zyt"> <Contexto: exclude filter type = "anotação" expressão = "org.springframework.steretype.controller"/> </context: component-scan> <!-Leia os arquivos de configuração de múltiplas propriedades "> <Bean> <Value> ClassPath: JDBC.Properties </value> <Value> ClassPath: Redis.properties </value> </list> </Property> </bean> <!-Jedis Connection pool-> <bean id = "PoolConfig"> <nome da propriedade = "maxidle" = "$ {Redis.MaxIdle" value = "$ {redis.maxactive}"/> <propriedade name = "maxwaitmillis" value = "$ {redis.maxwait}"/> <propriedade name = "testonborrow" value = "$ {Redis.testonborrow}"/> </bean> <!-pool de conexão "," pool de conexão "redis. <construtor-arg index = "0" ref = "poolconfig"/> <construtor-arg index = "1" value = "$ {redis.host}"/> <construtor-arg index = "2" {Redis.port} "type =" int "/> <construtor-) <construtor-arg index = "4" value = "$ {Redis.password}"/> </i bean> <!-Jedis Connection Factory-> <bean id = "jedisconnectionFactory"> <nome da propriedade "PoolConfig" Ref = "Poolconfig"/> <nome da propriedade ") value = "$ {Redis.host}"/> <!-<propriedade name = "senha" value = "$ {redis.pass}"/>-> </i bean> <util: constant static-field = "org.springframework.session.data.redis.config.configureRedisaction.NO_OPNO_OPTWORK.Session.data.redis.config.configureRedisaction.No_Op" id = "Redistemplate"> <propriedade name = "ConnectionFactory" ref = "JedisconnectionFactory"/> </bean> <!-Redis end-> <!-Spring Session Begin-> <bean id = "RedishttpSessionConfiguration"> <Nome da propriedade = "maxinativo-InTiveValInseconds" Talue = "1800"/BEIs "/BEIs- id = "sqlSessionFactory"> <propriedade name = "DataSource" ref = "DataSource"/> <propriedade name = "mapperlocations" value = "classpath: com/zyt/**/**. Xml"/> </ Bean> <i bean> <nome da propriedade "/basepackage". value = "SQLSessionFactory"/> </i Bean> <!-Declare o gerenciamento de transações usando anotação-> <tx: transação acionada por anotação-manager = "transactionManager"/> <bean id = "transactionManager"> <nome da propriedade = "DataSource" reffort = "DataSource"/> <! Destroy-method = "Close" init-method = "init"> <propriedade name = "url" value = "$ {jdbc_url}"/> <propriedade name = "nome de usuário" value = "$ {jdbc_username}"/> <nome da propriedade "" severa = "$ {jdbc_}}"/> value = "0"/> <!-Número máximo de conexões usadas pelo pool de conexões-> <propriedade name = "maxactive" value = "20"/> <propriedade name = "minimum indle" value = "names name =" minidle "value =" 0 "/> <!-obtenha a conexão máxima de espera-> <nome da propriedade =" maxwait "0"/> 600 "/! value = "true"/> <propriedade name = "maxpoolPreparedStateMementPerConnectionize" value = "33"/> -> <propriedades name = "validationQuery" value = "$ {validationQuery}"/> names name = "testOnborrow" = "False"/> <nome da propriedade "testonborrow" Value = " <!-Configure quanto tempo leva para realizar um intervalo de detecção para detectar conexões de marcha lenta que precisam ser fechadas, em milissegundos-> <propriedades name = "timebetweenEvictionRunsmillis" value = "60000"/> <!-Configure o tempo mínimo para uma conexão para sobreviver no pool, em milisecos->> <! Função removeaDoned-> <Nome da propriedade = "Removeabandon" value = "true"/> <!-1800 segundos, ou seja, 30 minutos-> <Property Name = "RemoveaBandenedTimeout" Value = "1800"/> <!-Log de erros de saída quando fecha a conexão abandonada <! name = "filters" value = "stat"/> -> <propriedade name = "filters" value = "mergestat"/> </sheans>jdbc.properties
driverclassName = com.mysql.jdbc.driver validationQuery = selecione 1 jdbc_url = jdbc: mysql: // localhost: 3306/zyt_demo? useUnicode = true & caracterencoding = utf-8 e zerodatEMeBeHavior = converttonull
Redis.Properties
redis.isopen = no 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.password =
O acima é o arquivo de configuração integrado, onde a configuração sobre Redis é a chave para o sucesso da integração
Resumo da pergunta
1. O projeto de inicialização foi relatado como uma exceção depois de integrar a integração devido à localização do arquivo de configuração, portanto a inicialização não teve êxito. Experimente várias vezes. O arquivo de configuração acima pode ser usado.
2. Liguei para a classe de ferramentas de cache antes e mostrou que a injeção de Jedispool estava vazia. Injetado no controlador e havia um valor. Porque a maneira como liguei para a classe de ferramentas no controlador era nova, a injeção de Jedispool perdeu a primavera ao digitalizar a classe de ferramentas. Ele pode ser resolvido usando a classe de ferramentas de injeção no controlador.
Por exemplo:
Resumir
O exposto acima é o processo de integração da primavera Redis (JEDIS) para realizar o compartilhamento da sessão, espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!