Java 如何动态更改SpringJDBCTemplate数据源?

Java 如何动态更改SpringJDBCTemplate数据源?,java,spring,spring-mvc,jdbctemplate,Java,Spring,Spring Mvc,Jdbctemplate,我有一个配置文件,其中包含JDBC连接的默认设置 应用程序运行后,是否有编辑此默认连接详细信息的选项?在创建所有bean后(编辑控制器中的连接详细信息) 情景: 用户启动应用程序,并可以通过转到来编辑连接详细信息 localhost:8080/myapp/db/edit 填写连接详细信息并保存新的数据库详细信息 然后应该找到现有连接,更新连接详细信息并重新实例化bean。您可以尝试从Spring容器中删除bean并重新启动它们 Demo demo = getBean(context)

我有一个配置文件,其中包含JDBC连接的默认设置

应用程序运行后,是否有编辑此默认连接详细信息的选项?在创建所有bean后(编辑控制器中的连接详细信息)

情景:

  • 用户启动应用程序,并可以通过转到来编辑连接详细信息 localhost:8080/myapp/db/edit
  • 填写连接详细信息并保存新的数据库详细信息

然后应该找到现有连接,更新连接详细信息并重新实例化bean。

您可以尝试从
Spring容器中删除bean并重新启动它们

    Demo demo = getBean(context);

    ConfigurableListableBeanFactory configurableListableBeanFactory = context
            .getBeanFactory();

    BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry) configurableListableBeanFactory;
    // Removing the bean from container
    beanDefinitionRegistry.removeBeanDefinition("demo");

    // Trying to obtains bean again from container. This will throw a null     
    demo = getBean(context);
    //demo object will be null here

    // Creating and registering bean to the container      
    BeanDefinition beanDefinition = new RootBeanDefinition(Demo.class);
    beanDefinition.setAttribute("name", "name");

    beanDefinitionRegistry.registerBeanDefinition("demo", beanDefinition);
    context.refresh();

    //Obtaining from container again
    demo = getBean(context); 

本例中的“用户”是某种管理员用户,或者每个用户都可以为其帐户设置不同的数据源,如“首选项”?任何/每个用户-用户:-)如果用户数量足够小,我将使用自定义的书面数据源提供器机制,在每个用户的基础上从设置数据库中查找连接属性,在每个请求中打开和关闭连接,在用户更新his信息时提供重置“缓存”值的API。否则,如果会有很多并发用户,您应该采取更多的预防措施,因为根据每个请求(我的建议)打开/关闭连接可能根本没有可接受的性能。是的,这就是我现在正在做的,谢谢。DataSource是通过构造函数提供给“JdbcTemplate”的,所以明确地说,您需要扩展和编写自己的自定义实现,如果您有固定数量的数据库,我建议使用factory模式来查找当前用户所需的数据源。