2016-08-12 5 views
1

Ich muss meine db lesen, um eine benutzerdefinierte Einstellung in meiner Spring @Configuration-Klasse zu laden.Spring-Repository in Spring einspeichern @Configuration-Klasse

Ich habe so etwas wie:

@Configuration 
    public MyConfigClass implements ApplicationContextAware{ 

    @Bean(initMethod = "start", destroyMethod = "stop") 
    public ServerSession serverSession() throws Exception { 
      ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway); 
     return serverSession; 
    } 

I Parameter von DB anstelle von Eigenschaftendatei lesen sollte. Ich weiß, dass ich @ mein Repository nicht direkt in diese Klasse einlesen kann, aber es gibt einen Trick oder etwas, das mir erlaubt, dies zu tun oder zumindest eine Abfrage auf db zu machen?

Ich verwende Hibernate + Spring + Spring Data.

Antwort

1

Ich bevorzuge die Injektion der notwendigen Abhängigkeiten als Parameter. Die Verwendung von @Autowired in einem Feld erscheint mir unnatürlich in einer Klasse (nur mit Stateful-Feldern, da die Konfiguration zustandslos sein soll). bieten sie nur als Parameter für die Bean-Methode:

@Bean(initMethod = "start", destroyMethod = "stop") 
public ServerSession serverSession(MyRepo repo) throws Exception { 
    repo.loadSomeValues(); 
    ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway); 
    return serverSession; 
} 

Diese erfordern könnte @Autowired sich auf Verfahren der Ebene durch, abhängig von der Feder Version:

@Bean(initMethod = "start", destroyMethod = "stop") 
@Autowired 
public ServerSession serverSession(MyRepo repo) throws Exception { 
    repo.loadSomeValues(); 
    ServerSession serverSession = new ServerSession(urlGateway, useSsl, hostGateway, portGateway); 
    return serverSession; 
} 

Siehe auch:

+0

funktioniert wie ein Charme. Danke – drenda

+0

Gern geschehen ;-) –

0

Autowiring und DI arbeiten in @Configuration-Klassen. Wenn Probleme auftreten, liegt dies möglicherweise daran, dass Sie die injizierte Instanz zu früh im Lebenszyklus des App-Startvorgangs verwenden.

@Configuration 
public MyConfigClass implements ApplicationContextAware{ 
    @Autowired 
    private MyRepository repo; 

    @Bean(initMethod = "start", destroyMethod = "stop") 
    public ServerSession serverSession() throws Exception { 
     // You should be able to use the repo here 
     ConfigEntity cfg = repo.findByXXX(); 

     ServerSession serverSession = new ServerSession(cfg.getUrlGateway(), cfg.getUseSsl(), cfg.getHostGateway(), cfg.getPortGateway()); 
     return serverSession; 
    } 
} 

public interface MyRepository extends CrudRepository<ConfigEntity, Long> { 
} 
+0

Ich habe das gleiche versucht wie du geschrieben hast, aber Repo bleibt null. – drenda

Verwandte Themen