java.lang.reflect.MalformedParameterizedTypeException 将 spring boot 从 2.3.2.RELEASE 升级到 2.7.10 后。使用 Java 11

问题描述 投票:0回答:0

在 Junits 执行期间运行 gradle clean build 时出现以下错误。

  • Spring boot版本:2.7.10(我们想专门用这个版本,避免漏洞)
  • 爪哇语:11
  • Gradle:7.1.1(使用 gradle wrapper)

任何帮助将不胜感激,因为这对我们的项目非常重要。 值得注意的是,此问题是在 RedisConfiguration 中查看堆栈跟踪时自动装配引起的。这仅在特定于 spring boot 2.7.10 的 Junits 期间失败。

通过堆栈跟踪后,可以在下面的链接中给出一些固定的例子吗?

使用 Autowired 时创建 bean 时出错

2023-04-06T09:18:15.168+0530  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jedisConnectionFactory' defined in class path resource [com/redis/connection/RedisConfiguration.class]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628)
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
2023-04-06T09:18:15.168+0530      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
2023-04-06T09:18:15.168+0530      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:362)
2023-04-06T09:18:15.168+0530      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:334)

 Caused by:
2023-04-06T09:18:15.168+0530      java.lang.reflect.MalformedParameterizedTypeException
2023-04-06T09:18:15.168+0530          at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:59)
2023-04-06T09:18:15.168+0530          at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:52)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:93)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:105)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:140)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.repository.MethodRepository.computeReturnType(MethodRepository.java:75)
2023-04-06T09:18:15.169+0530          at java.base/sun.reflect.generics.repository.MethodRepository.getReturnType(MethodRepository.java:66)
2023-04-06T09:18:15.169+0530          at java.base/java.lang.reflect.Method.getGenericReturnType(Method.java:292)
2023-04-06T09:18:15.169+0530          at java.desktop/com.sun.beans.introspect.PropertyInfo.get(PropertyInfo.java:285)
2023-04-06T09:18:15.169+0530          at java.desktop/com.sun.beans.introspect.ClassInfo.getProperties(ClassInfo.java:82)
2023-04-06T09:18:15.169+0530          at java.desktop/java.beans.Introspector.getTargetPropertyInfo(Introspector.java:515)
2023-04-06T09:18:15.169+0530          at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:463)
2023-04-06T09:18:15.169+0530          at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:294)
2023-04-06T09:18:15.169+0530          at java.desktop/java.beans.Introspector.getBeanInfo(Introspector.java:236)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.CachedIntrospectionResults.getBeanInfo(CachedIntrospectionResults.java:252)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.CachedIntrospectionResults.<init>(CachedIntrospectionResults.java:277)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.CachedIntrospectionResults.forClass(CachedIntrospectionResults.java:181)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.BeanWrapperImpl.getCachedIntrospectionResults(BeanWrapperImpl.java:174)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.BeanWrapperImpl.getPropertyDescriptors(BeanWrapperImpl.java:248)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1594)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:1574)
2023-04-06T09:18:15.169+0530          at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1434)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.resolveBeanReference(ConfigurationClassEnhancer.java:362) ~[spring-context-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:334) ~[spring-context-5.3.26.jar:5.3.26]
    at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.jedisConnectionFactory(<generated>) ~[main/:?]
    at com.myproject.redis.connection.RedisConfiguration.redisTemplate(RedisConfiguration.java:63) ~[main/:?]
    at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.CGLIB$redisTemplate$0(<generated>) ~[main/:?]
    at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a$$FastClassBySpringCGLIB$$e85ae083.invoke(<generated>) ~[main/:?]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-5.3.26.jar:5.3.26]
    at com.myproject.redis.connection.RedisConfiguration$$EnhancerBySpringCGLIB$$2544120a.redisTemplate(<generated>) ~[main/:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:486) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) ~[spring-context-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) ~[spring-context-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) ~[spring-context-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) ~[spring-context-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.26.jar:5.3.26]
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.26.jar:5.3.26]

Redis配置:


package com.aconex.babylonevents.redis.connection;


import javax.annotation.Resource;

import com.aconex.secretsmanagement.api.CredentialProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.RedisConnectionFailureException;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
import org.springframework.data.redis.serializer.GenericToStringSerializer;

Redis配置

@Configuration
@EnableRedisRepositories
public class RedisConfiguration {

    private final String redisHost;
    private final int redisPort;
    private final String connectionPoolMaxTotal;
    private final String connectionPoolIdleTotal;

    @Resource(name = "eventStreamRedisCredentialProvider")
    private CredentialProvider credentialProvider;

    private static final Logger LOGGER = LoggerFactory.getLogger(RedisConfiguration.class);

    public RedisConfiguration(RedisProperties redisProperties){
        redisHost = redisProperties.getRedisHost();
        redisPort = redisProperties.getRedisPort();
        connectionPoolMaxTotal = redisProperties.getConnectionPoolMaxTotal();
        connectionPoolIdleTotal = redisProperties.getConnectionPoolIdleTotal();
    }

    @Bean
    JedisConnectionFactory jedisConnectionFactory() throws RedisConnectionFailureException{
        JedisConnectionFactory jedisConnectionFactory = null;
        try {
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
            redisStandaloneConfiguration.setPassword(credentialProvider.getCredential().getPassword());
            redisStandaloneConfiguration.setDatabase(0);
            redisStandaloneConfiguration.setHostName(redisHost);
            redisStandaloneConfiguration.setPort(redisPort);
            jedisConnectionFactory = new JedisConnectionFactory(redisStandaloneConfiguration);
            jedisConnectionFactory.getPoolConfig().setMaxTotal(Integer.parseInt(connectionPoolMaxTotal));
            jedisConnectionFactory.getPoolConfig().setMaxIdle(Integer.parseInt(connectionPoolIdleTotal));
        } catch (RedisConnectionFailureException e) {
            LOGGER.error("Unable to establish connection with redis");
            throw new RedisConnectionFailureException("Unable to establish connection with redis");
        }
        return jedisConnectionFactory;
    }

    @Bean
    @ConditionalOnMissingBean(name = "redisTemplate")
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
        template.setEnableTransactionSupport(true);
        return template;
    }
}
**RedisProperties.java:**

mport lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
@Getter
@Setter
public class RedisProperties {

    private int redisPort;
    private String redisHost;
    private String connectionPoolMaxTotal;
    private String connectionPoolIdleTotal;

    public RedisProperties(
            @Value("${spring.redis.port}") int redisPort,
            @Value("${spring.redis.host}") String redisHost,
            @Value("${redis.connection.pool.max.total}") String connectionPoolMaxTotal,
            @Value("${redis.connection.pool.idle.total}") String connectionPoolIdleTotal) {
        this.redisPort = redisPort;
        this.redisHost = redisHost;
        this.connectionPoolMaxTotal = connectionPoolMaxTotal;
        this.connectionPoolIdleTotal = connectionPoolIdleTotal;
    }
}

build.gradle:

plugins {
    id 'org.springframework.boot' version '2.7.10'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}
apply from: "${rootDir}/build-support/packaging.gradle"
group = 'com.aconex'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.apache.httpcomponents:httpclient'
    implementation 'commons-io:commons-io:2.4'
    implementation 'org.bouncycastle:bcpkix-jdk15to18:1.69'

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    implementation ('redis.clients:jedis'){
        exclude group: 'org.apache.commons', module: 'commons-pool2'
    }

    testImplementation ('org.springframework.boot:spring-boot-starter-test'){
        exclude group: 'org.junit.jupiter', module: 'junit-jupiter'
    }
    testImplementation 'org.junit.jupiter:junit-jupiter-api'
    testImplementation 'it.ozimov:embedded-redis:0.7.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'

    implementation ('org.junit.vintage:junit-vintage-engine'){
        exclude group: 'org.hamcrest', module: 'hamcrest-core'
    }

    implementation 'org.apache.commons:commons-pool2:2.4.2'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'com.aconex:secrets-management-vault-spring:1.5.93'
    implementation 'com.aconex:secrets-management-simple:1.5.93'
    implementation 'com.aconex:secrets-management-tls-common:1.5.93'
    implementation group: 'joda-time', name: 'joda-time', version: '2.3'
    implementation 'net.wedjaa.ansible.vault:vault-utilities:1.2.0'
}

test {
    useJUnitPlatform()
}

应用程序.properties:

app.version=1.0

server.port=8080
spring.redis.host=localhost
spring.redis.port=6379

redis.connection.pool.max.total=50
redis.connection.pool.idle.total=50

#Actuator endpoints configuration
management.endpoints.web.base-path=/
management.endpoint.info.enabled=true
management.endpoint.health.enabled=true
management.endpoints.web.path-mapping.health=status
management.endpoints.web.exposure.include=health,info
management.endpoint.health.show-details=always


logging.level.root=DEBUG
logging.pattern.console=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %X{X-CorrelationId} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
logging.pattern.file=%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %X{X-CorrelationId} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}
server.tomcat.basedir=/var/tmp/tomcat

spring.main.allow-circular-references=true

spring.main.allow-bean-definition-overriding=true
spring.main.lazy-initialization=true

我做了一些更改,在此活动期间添加了以下配置以避免一些错误,但它们似乎与当前问题无关:

应用程序.properties:

spring.main.allow-circular-references=true

spring.main.allow-bean-definition-overriding=true
spring.main.lazy-initialization=true

build.gradle:

dependency ('redis.clients:jedis') (removed version 3.1.0 which was mentioned earlier)
org.junit.vintage:junit-vintage-engine  (added for backward compatibility)

Spring 2.3.2.RELEASE 工作正常,Java 11 没有任何问题,但不适用于 2.7.10.

使用以下网址作为参考: https://blog.codecentric.de/migrating-spring-boot-java-17

以下是我项目中的junit类:

EventsApplicationTests.java:

@SpringBootTest
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
class EventsApplicationTests {

    @Test
    public void contextLoads() {
    }
}

EventsDataSourceProvider.java :

@Resource
public class EventsDataSourceProvider {

    public List<String> getAuthenticationTypeEvents(){
        return this.getEventsFromFile("events_auth.txt");
    }

    public List<String> getAuthenticationTypeInvalidEvents(){ return this.getEventsFromFile("events_auth_invalid.txt"); }

    public List<String> getAllTypesEvents(){
        return this.getEventsFromFile("events.txt");
    }

    public List<String> getDocumentsTypesEvents(){
        return this.getEventsFromFile("events_documents.txt");
    }

    public List<String> getCorrespondenceTypesEvents(){
        return this.getEventsFromFile("events_correspondence.txt");
    }

    public List<String> getProjectsTypesEvents(){
        return this.getEventsFromFile("events_projects.txt");
    }

    private List<String> getEventsFromFile(String inputFile){
        ClassLoader classLoader = getClass().getClassLoader();
        File file = new File(classLoader.getResource(inputFile).getFile());

        List<String> events = new ArrayList<>();
        try (BufferedReader eventBufferedReader = Files.newBufferedReader(Paths.get(file.toURI()))) {
            events = eventBufferedReader.lines().collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return events;
    }

}

RedisConfigTest.java :

@ActiveProfiles("test")
@SpringBootTest(classes = TestRedisConfiguration.class)
public class RedisConfigTest {

    @Autowired
    private EventStreamRepository eventStreamRepository;

    @Test
    private void testRedisConfiguration(){
        // TODO
    }
}

EventStreamRepositoryTest.java :

@SpringBootTest(classes = TestRedisConfiguration.class)
@ActiveProfiles("test")
public class EventStreamRepositoryTest {

    @Autowired
    private EventStreamRepository eventStreamRepository;
    @Resource
    private RedisConfiguration redisConfiguration;
    @Resource
    private EventsDataSourceProvider eventsDataSourceProvider;
    @Resource
    private EventsConversionUtil eventsConversionUtil;

    private String organizationId = "1879048492";

    @BeforeEach
    private void cleanUp() {
        redisConfiguration.redisTemplate().getConnectionFactory().getConnection().flushDb();
    }

    @Test
    public void saveEvents() {
        List<String> events = eventsDataSourceProvider.getAllTypesEvents();
        List<String> savedEvents = new ArrayList<>();
        events.stream().forEach(event -> {
            EventDto eventDto = eventsConversionUtil.convertJsonStringToObject(event);
            savedEvents.add(eventStreamRepository.saveEvent(eventsConversionUtil.getEventIdIndexFromJson(event), organizationId,
                    eventsConversionUtil.convertDateToSeconds(eventDto.getTimestamp()), event, eventDto.getTimestamp()));
        });
        Assertions.assertEquals(savedEvents.size(), events.size());
    }

    @Test
    public void getAllEventsForOrg() {
        cleanUp();
        List<String> events = eventsDataSourceProvider.getAllTypesEvents();
        List<String> savedEvents = new ArrayList<>();
        events.stream().forEach(event -> {
            EventDto eventDto = eventsConversionUtil.convertJsonStringToObject(event);
            savedEvents.add(eventStreamRepository.saveEvent(eventsConversionUtil.getEventIdIndexFromJson(event), organizationId,
                    eventsConversionUtil.convertDateToSeconds(eventDto.getTimestamp()), event, eventDto.getTimestamp()));
        });

        List<String> eventsJson = eventStreamRepository.getAllEvents(organizationId);
        Assertions.assertEquals(eventsJson.size(), savedEvents.size());
    }
}

TestRedisConfiguration.java :

@TestConfiguration
public class TestRedisConfiguration {

    private final RedisServer redisServer;

    public TestRedisConfiguration(RedisProperties redisProperties) {
        this.redisServer = new RedisServer(redisProperties.getRedisPort());
    }

    @Bean
    EventsDataSourceProvider getEventsDataSourceProvider(){
        return new EventsDataSourceProvider();
    }

    @PostConstruct
    public void postConstruct() {
        redisServer.start();
    }

    @PreDestroy
    public void preDestroy() {
        redisServer.stop();
    }
}
java spring-boot upgrade junit5 spring-boot-migration-1.5.x-2.1.x
© www.soinside.com 2019 - 2024. All rights reserved.