Spring Boot动态更改数据库 [英] spring boot dynamically change database

查看:477
本文介绍了Spring Boot动态更改数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在运行Spring Boot应用程序中更改数据库? 当RestController得到带有连接参数的请求时,我需要连接另一个数据库.这是我的RestController的一部分.

How do i change database in running Spring Boot application? I need to connect another db when RestController got request with connection parameters. Here is part of my RestController.

@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);
}

清除问题.我是Spring和Spring Boot的新手.因此,我希望看到没有老式Spring xmls的解决方案.这是我当前的数据库配置.

To clear things. I m new to Spring and Spring Boot. So i would like to see a solution without old fashion Spring xmls. Here is my current database configuration.

@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;
    }
}

推荐答案

您可以使用AbstractRoutingDataSource在运行时根据某些条件选择特定的datasource.

You can use AbstractRoutingDataSource that selects a specific datasource at runtime based on some criteria.

请看一下这个示例:

https://spring.io/blog/2007/01/23/dynamic-datasource-routing/

这篇关于Spring Boot动态更改数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆