繁体   English   中英

如何使用 PostgreSQL 设置 JNDI 数据源?

[英]How to set up JNDI DataSource with PostgreSQL?

我正在学习 Java EE。 我的导师告诉我在我的学习项目中实现 JNDI DataSource。 我找到了一些关于这个主题的文章,但我看不清楚这样做的步骤。

我的培训项目是一个 Spring MVC 应用程序。 在前端,它有一些 Thymeleaf 模板,数据取自 PostgreSQL 数据库。

在这里实现 JNDI 应该怎么做? 我什至不知道我为什么需要它。 我只是被告知这个配置应该被认为是过时的和低级的,但我不知道为什么。

现在数据库配置如下:

  • 具有以下内容的道具文件:
driver=org.postgresql.Driver
url=jdbc:postgresql://localhost/trainingproject
dbuser=postgres
dbpassword=Password
  • 一个 .sql 文件,如下所示:
DROP TABLE IF EXISTS table1;
CREATE TABLE table1
(
    row1 SERIAL PRIMARY KEY,
    row2 CHARACTER VARYING(64)
);
  • 一个数据源 bean:
@Bean
public DataSource datasource() {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();
    dataSource.setDriverClassName(environment.getProperty(DRIVER));
    dataSource.setUrl(environment.getProperty(URL));
    dataSource.setUsername(environment.getProperty(USER));
    dataSource.setPassword(environment.getProperty(PASSWORD));
}

DataSource PGSimpleDataSource实现与 JDBC 驱动程序捆绑在一起。

位于https://jdbc.postgresql.org 的Postgres JDBC 驱动程序包括DataSource一个实现: PGSimpleDataSource

PGSimpleDataSource ds = new PGSimpleDataSource() ;  
ds.setServerName( "localhost" );  
ds.setDatabaseName( "your_db_name_here" );   
ds.setUser( "scott" );       
ds.setPassword( "tiger" );   

欲了解更多信息:

JNDI

您的问题将两个问题混为一谈: DataSourceJNDI

DataSource是一个简单的对象,其中包含与数据库建立连接所需的所有连接信息。 这包括用户名、密码、数据库服务器的地址以及任意数量的标准和专有功能设置。 专有的,我的意思是 Postgres 特定的功能设置与 Microsoft SQL Server 特定与 Oracle 特定等。查看 Javadoc for DataSource看看它是多么简单,基本上只是一个getConnection方法。 您可以使用或不使用 JNDI 获取DataSource对象; 两者是正交的问题。

JNDI要复杂得多。 JNDI 是一个接口,用于在运行时而不是在开发时获取应用程序所需的配置信息。 数据库连接信息只是您可能希望从 JNDI 服务器获取的多种信息之一。

因此,与其对数据库连接信息进行硬编码,不如在启动应用程序时“发现”正确的数据库连接信息。 您的测试机器将使用虚假的数据库服务器,而您的生产部署机器将使用不同的数据库服务器。 程序员在编译时可能不知道这些数据库服务器,甚至可能还不存在。 需要进行查找,而 JNDI 是一种无需供应商锁定的标准方法。

您如何配置由符合 JNDI 的服务器作为DataSource对象传递给您的应用程序的数据库连接信息,这取决于您企业的特定服务器环境。 鉴于您的最后一个代码示例,看起来您实际上并未访问类中的 JNDI 服务器,因此 JNDI 没有实际意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM