Résilié Printemps de Démarrage de l'App dans Eclipse - Fermeture crochet pas appelé

J'ai un Ressort de Démarrage + Ressort des Données Redis/KeyValue projet. - Je configurer un Printemps profil pour exécuter l'application avec toutes les dépendances intégré. Donc, au démarrage, je lance un intégré Redis Serveur. Tout fonctionne bien quand je le démarre dans Eclipse, sauf que je voudrais que le serveur Redis être arrêté quand j'ai arrêter le Printemps de Démarrage de l'application. J'ai donc l'installation de plusieurs crochets d'arrêt, cependant ils ne sont pas appelés quand j'mettre fin à l'application à partir d'Eclipse.

Ils sont semblables questions, j'ai créé ce l'espoir qu'il y aurait un Redis solution. Aussi aucune de ces questions similaires sont spécifiques au Printemps de Démarrage.

J'ai essayé beaucoup de choses:

  • Printemps de Démarrage du ExitCodeGenerator;
  • DisposableBean;
  • @PreDestroy;
  • J'ai essayé un ShutdownHook (après le @mp911de réponse)

Aucun d'entre eux sont appelés.

Peut-être il ya un Redis option, délai d'attente, les garder en vie.. quelque chose à l'extérieur de la boîte, je ne suis pas au courant ?
Comment puis-je m'assurer que le Redis Serveur est arrêté lors de mon Ressort de Démarrage de l'app est brusquement arrêté ?

=> j'ai vu ce Intégré Redis pour le printemps de démarrage, mais @PreDestroy est tout simplement pas appelé quand tuer l'application inattendue.

Voici quelques unes des questions similaires:

J'ai aussi vu ce post sur eclipse.org discuter de la façon de l'arrêt du crochet n'est pas appelé lors de l'arrêt d'une application à partir d'eclipse: Un arrêt progressif des Applications Java


Voici tout mon code:

Composant pour démarrer le intégré Redis serveur au démarrage (Avec mes tentatives pour cesser de trop!!):

@Component
public class EmbeddedRedis implements ExitCodeGenerator, DisposableBean{

    @Value("${spring.redis.port}")
    private int redisPort;

    private RedisServer redisServer;

    @PostConstruct
    public void startRedis() throws IOException {
        redisServer = new RedisServer(redisPort);
        redisServer.stop();
        redisServer.start();
    }

    @PreDestroy
    public void stopRedis() {
        redisServer.stop();
    }

    @Override
    public int getExitCode() {
        redisServer.stop();
        return 0;
    }

    @Override
    public void destroy() throws Exception {
        redisServer.stop();
    }
}

application.propriétés:

spring.redis.port=6379

Printemps De Démarrage De L'App:

@SpringBootApplication
@EnableRedisRepositories
public class Launcher {

    public static void main(String[] args){
        new SpringApplicationBuilder() //
        .sources(Launcher.class)//
        .run(args);
    }

    @Bean
    public RedisTemplate<String, Model> redisTemplate() {
        RedisTemplate<String, Model> redisTemplate = new RedisTemplate<String, Model>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        return redisTemplate;
    }


    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setHostName("localhost");
        return jedisConnectionFactory;
    }
}

Redis serveur (~ incorporé) en cours d'exécution:

$ ps -aef | grep redis
 ... /var/folders/qg/../T/1472402658070-0/redis-server-2.8.19.app *:6379  

L'embedded Redis maven dependency:

<dependency>
    <groupId>com.github.kstyrc</groupId>
    <artifactId>embedded-redis</artifactId>
    <version>0.6</version>
</dependency>

OriginalL'auteur alexbt | 2016-08-28