2016-05-25 10 views
2

Wie ändere ich Datenbank in laufenden Spring Boot-Anwendung? Ich muss eine andere db verbinden, wenn RestController Anfrage mit Verbindungsparameter erhalten hat. Hier ist ein Teil meines RestControllers.Spring Boot dynamisch Datenbank ändern

@RequestMapping(value = "/change",method = RequestMethod.GET) 
public ResponseEntity<?> change(@RequestParam String ip, @RequestParam String port, 
           @RequestParam String dbname, @RequestParam String username, 
           @RequestParam String password){ 
    //change datasource here 
    return new ResponseEntity<>(HttpStatus.OK); 
} 

Um Dinge zu klären. Ich bin neu bei Spring und Spring Boot. So würde ich gerne eine Lösung ohne alte Mode Spring Xmls sehen. Hier ist meine aktuelle Datenbankkonfiguration.

@Configuration 
@EnableJpaRepositories("su.asgor.dao") 
@EnableTransactionManagement 
@ComponentScan("su.asgor") 
public class DatabaseConfig { 

    @Bean 
    public DataSource dataSource() { 
     BasicDataSource ds = new BasicDataSource(); 
     ds.setUrl("jdbc:postgresql://localhost:5432/portal74"); 
     ds.setDriverClassName("org.postgresql.Driver"); 
     ds.setUsername("postgres"); 
     ds.setPassword("system"); 

     ds.setInitialSize(30); 
     ds.setMinIdle(30); 
     ds.setMaxIdle(60); 
     ds.setTimeBetweenEvictionRunsMillis(30000); 
     ds.setMinEvictableIdleTimeMillis(60000); 
     ds.setTestOnBorrow(true); 
     ds.setValidationQuery("select version()"); 
     return ds; 
    } 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan("su.asgor.model"); 
     em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); 

     Properties hibernateProperties = new Properties(); 
     hibernateProperties.put("hibernate.dialect","org.hibernate.dialect.PostgreSQL9Dialect"); 
     hibernateProperties.put("hibernate.show_sql","false"); 
     hibernateProperties.put("hibernate.hbm2ddl.auto","update"); 

     em.setJpaProperties(hibernateProperties); 
     return em; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
     JpaTransactionManager manager = new JpaTransactionManager(); 
     manager.setEntityManagerFactory(entityManagerFactory().getObject()); 
     return manager; 
    } 
} 

Antwort