【问题标题】:How to create databases dynamically and instantiate JdbcTemplate?如何动态创建数据库并实例化 JdbcTemplate?
【发布时间】:2018-11-27 03:16:28
【问题描述】:

我正在接受来自最终用户的数据库名称,然后我需要使用 Spring JdbcTemplate 动态创建并连接到数据库,这样我就可以在该数据库中执行 DDL/DML 语句,所以以后每当用户登录时我需要连接到同一个数据库的系统。

我有多个最终用户,需要在他们登录系统后将他们与各自的数据库连接起来。

【问题讨论】:

  • 如果你想在启动时创建数据库,你可以使用 Spring @Repository 注解。您还可以使用application.properties 作为所有数据库参数(如凭据、集合名称等)的存储空间。
  • 我没有数据库列表,我会从最终用户的应用程序中动态接受数据库名称,然后我需要创建该数据库
  • 我的应用程序是某种基于 Web 的 SQL 编辑器(例如来自 postgresql 的 pgAdmin,来自 Oracle 的 SQL 开发人员)。
  • 可以将AbstractRoutingDataSource作为explained here作为动态数据源切换的起点。

标签: java spring postgresql spring-boot spring-jdbc


【解决方案1】:

这就是答案,

以下代码 sn-p 对我有用。

// create final Map
private final Map<Long, JdbcTemplate> datasourceFactory = new ConcurrentHashMap<>();

// put JdbcTemplate to the Map
HikariConfig config = new HikariConfig();
Properties p = new Properties();
config.setDataSourceProperties(p);
config.setJdbcUrl(dbUrl);
config.setUsername(username);
config.setPassword(password);
HikariDataSource hds = new HikariDataSource(config);
JdbcTemplate template = new JdbcTemplate(hds);
datasourceFactory.put(someUniqueId, jdbcTemplate);

使用下面的代码 sn -p 访问 JdbcTemplate,

// Fetch the JdbcTemplate from the Map object
JdbcTemplate jdbcTemplate = datasourceFactory.get(someUniqueId);

所以通过这种方式,我们可以为单个 Spring 应用程序管理多个数据源。

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多