Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在integrationtests中禁用与redis的spring会话_Java_Spring_Redis_Spring Session_Spring Data Redis - Fatal编程技术网

Java 在integrationtests中禁用与redis的spring会话

Java 在integrationtests中禁用与redis的spring会话,java,spring,redis,spring-session,spring-data-redis,Java,Spring,Redis,Spring Session,Spring Data Redis,我正在用redis使用spring会话,但我想在进行测试时禁用它。我的班级被标注为: @ActiveProfiles("integrationtests") 我的application-integrationtests.tml文件包含: spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration 但它仍然在以下方面失败: Caused by: or

我正在用redis使用spring会话,但我想在进行测试时禁用它。我的班级被标注为:

@ActiveProfiles("integrationtests")
我的application-integrationtests.tml文件包含:

spring.autoconfigure.exclude: org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
但它仍然在以下方面失败:

Caused by: org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Error creating bean with name 'redisMessageListenerContainer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]
如果我打开redis服务器,测试就会起作用,但我当然不想保持这种状态;)

//更新

我一直在试着

@SpringBootTest(classes = {Application.class})
@ActiveProfiles("integrationtests")
以及排除Redis的Application.class:

@SpringBootApplication(exclude={SessionAutoConfiguration.class, RedisAutoConfiguration.class, RedisHttpSessionConfiguration.class})
public class Application {

public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
}
}
但它在以下方面失败了:

Caused by: org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
Error creating bean with name 'redisMessageListenerContainer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]
spring autoconfigure debug可以看到我排除了这个类,但它没有效果:

Exclusions:
-----------

org.springframework.boot.autoconfigure.session.SessionAutoConfiguration

org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration
没有直接的解决方案,但有一个解决办法,比如下面的
测试
类:

@SpringBootTest(classes = { ApplicationConfig.class })
@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("integrationtests")
public class SpringBootRedisApplicationTest {

    @Autowired
    private StudentRepository studentRepository;

    @Test
    public void test() {
    }

}
您可以使用所有配置创建基类,如下所示:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.spring.boot.redis.repository" })
public class ApplicationConfig {

    @Bean
    public JedisConnectionFactory jedisConnFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setUsePool(true);
        jedisConnectionFactory.setHostName("localhost");
        jedisConnectionFactory.setPort(6379);
        return jedisConnectionFactory;
    }

    @SuppressWarnings("rawtypes")
    @Bean
    public RedisTemplate redisTemplate() {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(jedisConnFactory());
        return redisTemplate;
    }

    @Bean
    public RedisHttpSessionConfiguration redisHttpSessionConfiguration() {
        return new RedisHttpSessionConfiguration();
    }
}
和集成测试的子类,无
@EnableRedisHttpSession

@Configuration
@Profile({ "integrationtests", "unittest" })
public class IntegrationTestConfig extends ApplicationConfig {

}
另一个配置文件具有
@EnableRedisHttpSession
,用于所有其他配置文件,如dev、staging和prod,类似于下面的dev:

@Profile({ "dev" })
@Configuration
@EnableRedisHttpSession
public class DevConfig extends ApplicationConfig {

}
或者,您可以在
application.properties
中指定
spring.profiles.active
使dev成为spring boot应用程序的默认配置文件,如下所示:

spring.profiles.active=dev

例如,您可以参考

我在测试时用于解决此Redis依赖关系的解决方法是在测试时使用
@ConditionalOnProperty
注释并设置属性(
testing=true

使用以下代码进行会话配置:

@Configuration
public class SessionConfig {
    @ConditionalOnProperty(name = "testing", havingValue = "false", matchIfMissing = true)
    @EnableRedisHttpSession
    public static class RedisSessionConfig {
    }

    @ConditionalOnProperty(name = "testing", havingValue = "true")
    @EnableSpringHttpSession
    public static class MapSessionConfig {
        @Bean
        public SessionRepository<ExpiringSession> sessionRepository() {
            return new MapSessionRepository();
        }
    }
}
创建特定于“测试”概要文件的yml(application test.yml)

测试类应该有注释

@ActiveProfiles("test")

明天我将尝试,在我的评论(最后一条)中提供更多信息:-即使将RedisHttpSessionConfiguration添加到排除的类中,它也会失败,并在该类中出现“UnsatifiedPendencyException”:“不,它没有帮助,我添加了@EnableAutoConfiguration(排除={SessionAutoConfiguration.class,RedisAutoConfiguration.class,RedisHttpSessionConfiguration.class}@ActiveProfiles(“integrationtests”)仍然失败,现在出现以下错误:在类路径资源中定义了名为“enableRedisKeyspaceNotificationsInitializer”的bean创建错误[org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]:@Arpit Hi Arpit我是Redis的新手,你能解释一下如何将Redis与spring boot集成吗?我们需要手动安装Redis吗?或者在POM中只安装依赖项就足够了。我的解决方法如下:,但主要问题仍然存在-为什么排除Redis类而不排除它们?:)知道总是有Redis实例是很困难的在测试期间,我建议您为您的测试用例使用此属性
spring.session.store type=hash_map
,此属性应为
spring.session.store type=none
,位于测试
应用程序.properties