【问题标题】:Setting DataSource in Runtime Java EE 7在运行时 Java EE 7 中设置数据源
【发布时间】:2016-10-01 01:23:04
【问题描述】:

如何动态设置数据源?像下面的春天:

    @Bean(name = "dataSource")
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
        driverManagerDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        driverManagerDataSource.setUrl("jdbc:mysql://localhost:3306/userbase");
        driverManagerDataSource.setUsername("root");
        driverManagerDataSource.setPassword("root");
        return driverManagerDataSource;
    }

我可以只将这个功能从 Spring 导入 Java EE 7 企业应用程序吗?

【问题讨论】:

标签: jakarta-ee datasource programmatically-created


【解决方案1】:

任何 Java EE 7 实现都将具有定义 javax.sql.DataSource 的工具,该 javax.sql.DataSource 在服务器的 JNDI 目录中具有名称。

您可以使用javax.annotations.Resource 注解在您的应用程序客户端类中注入对它的引用,并使用如下方式:

public class SomeDatabaseClient {

    @Resource("jdbc/myDataSource")
    javax.sql.DataSource myDataSource;

    public void useTheDatabase(String username, String password) {

         try (Connection con = myDataSource.getConnection(username, password);
              PreparedStatement ps = con.prepareStatement(...);
              ResultSet rs = ps.executeQuery() {
              // process the result set
             ...
         } catch (SQLException e) {
              // handle errors
         }
    }
}

如果您不需要动态指定数据库凭据,可以将它们包含在服务器的 DataSource 定义中。

请注意,安全地管理用户密码并非易事,因此您需要有充分的理由以这种方式使用它们。

如果您需要,您还可以使用相同的代码设置您的 Spring Framework 配置以像这样工作。

【讨论】:

  • 我的印象是 OP 明确想要在 webapp 端而不是在服务器端创建和管理数据源(这确实很奇怪和可疑,但这是他的 Spring sn-p 实际所做的)。
  • @Steve C,我实际上不想使用框架,只想使用 Java EE 7。这是我企业的要求。原因是为了管理数据库表中的审计信息。你知道触发器 :NEW.[FieldName] := USER; (Oracle) 用户使用其凭据登录。我看到了这个 Spring sn-p,看起来就像我真正想要的功能。或者您知道获得它的最佳方法吗?
  • 上面的解决方案是纯 Java EE - 不需要框架
猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多