Java 如何动态更改SpringJDBCTemplate数据源?
我有一个配置文件,其中包含JDBC连接的默认设置 应用程序运行后,是否有编辑此默认连接详细信息的选项?在创建所有bean后(编辑控制器中的连接详细信息) 情景: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)
- 用户启动应用程序,并可以通过转到来编辑连接详细信息 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模式来查找当前用户所需的数据源。