![](/img/trans.png)
[英]How to set a DataSource on a JPA EntityMangerFactory that is not from 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
DROP TABLE IF EXISTS table1;
CREATE TABLE table1
(
row1 SERIAL PRIMARY KEY,
row2 CHARACTER VARYING(64)
);
@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" );
欲了解更多信息:
DataSource
的 Javadoc。PGSimpleDataSource
。DataSource
对象 您的问题将两个问题混为一谈: DataSource
和JNDI
。
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.