Весенняя загрузка @AutoConfigureBefore не работает

#java #spring #spring-boot #spring-data-redis #spring-autoconfiguration

#java #весна #пружинный ботинок #spring-data-redis #весна-автоконфигурация

Вопрос:

У меня есть зависимость от моего пользовательского Redis starter, у которого есть класс конфигурации, который я хочу запустить раньше RedissonAutoConfiguration , для этого я использую @AutoConfigureBefore аннотацию, хотя, похоже, она не работает и, тем не менее, RedissonAutoConfiguration запускается первой.

Кажется, единственное, что нужно для работы, — это добавление @ComponentScan(basePackage = "path_to_config") , но я не хочу использовать здесь какие-либо аннотации, я хочу, чтобы started запускался раньше RedissonAutoConfiguration сам по себе

У меня есть spring.factories файл в моем Redis starter, чтобы выполнить автоконфигурацию класса

 org.springframework.boot.autoconfigure.EnableAutoConfiguration=
za.co.discovery.health.dhp.starter.redis.config.RedisClientConfiguration
 
 package za.co.discovery.health.dhp.starter.redis.config;

import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import java.util.List;


@Configuration
@AutoConfigureBefore(RedissonAutoConfiguration.class)
public class RedisClientConfiguration {

    @Profile("single-server-redis-client")
    @Bean(destroyMethod = "shutdown")
    public RedissonClient singleServerRedissonClient(@Value("${single-server.redis.client.host:localhost}") String redisClientHost, @Value("${single-server.redis.client.port:6379}") long redisClientPort) {
        Config config = new Config();
        config.useSingleServer().setAddress(String.format("redis://%s:%d", redisClientHost, redisClientPort));
        return Redisson.create(config);
    }

    @Profile("cluster-redis-client")
    @Bean(destroyMethod = "shutdown")
    public RedissonClient clusterRedissonClient(@Value("${spring.redis.sentinel.nodes}") List<String> sentinelNodes, @Value("${spring.redis.sentinel.master}") String sentinelMaster, @Value("${spring.redis.sentinel.password}") String password) {
        Config config = new Config();
        config.useSentinelServers().setMasterName(sentinelMaster).setPassword(password);
        sentinelNodes.forEach((sentinelNode) -> {
            config.useSentinelServers().addSentinelAddress("redis://"   sentinelNode);
        });
        return Redisson.create(config);
    }

}
 

Комментарии:

1. Вы действительно запускаете свое приложение с одного из профилей? И находится spring.factories ли он в правильном месте? Это действительно в банке, которую вы создали?

2. Что вы имеете в виду, когда говорите «Сначала запускается повторная автоконфигурация»? Автоматически настроенный порядок определяет порядок, в котором определяются компоненты. Он не контролирует порядок, в котором создаются компоненты.

3. У меня есть файл spring.factories

4. Эй, Энди, я имею в виду, что spring boot сначала пытается создать компонент reddisson, определенный в RedisAutoConfiguration. класс Java. Я хочу обратить все вспять.