@DataSourceDefinition 工作示例✅失败的例子❌奇怪的例子?

问题

@DataSourceDefinition提供了url属性,但是它将被忽略。如果url设置为jdbc:postgres://database:5432/demo,则将建立到localhost:5432的连接。通过将它们直接设置为serverNameportNumberdatabaseName,可以很好地发挥相同的设置。

演示

可以在https://github.com/ThomasPr/DataSourceDefinition

上找到一个演示此行为的小型演示项目。

详细信息

工作示例✅

属性serverNameportNumberdatabaseName分别设置。在database:5432上与postgres的连接将成功建立。

@DataSourceDefinition(
    name = "java:global/jdbc/DemoDataSource",classname = "org.postgresql.ds.PGSimpleDataSource",serverName = "database",// set the property
    portNumber = 5432,// set the property
    databaseName = "demo",// set the property
    user = "demo",password = "demo")

失败的例子❌

将再次使用工作示例中的相同设置,但是这次仅设置url属性。结果是尝试连接到localhost:5432而不是database:5432

@DataSourceDefinition(
    name = "java:global/jdbc/DemoDataSource",url = "jdbc:postgresql://database:5432/demo",// only use url,but no serverName,portNumber or databaseName
    user = "demo",password = "demo")

奇怪的例子?

使用相同的url设置,就像在失败的示例中一样。但是serverNameportNumberdatabaseName设置为空值。很奇怪:这次将成功建立与database:5432的连接。与失败示例的唯一区别是提到的三个空值。

@DataSourceDefinition(
    name = "java:global/jdbc/DemoDataSource",// use the url to configure connection properties
    user = "demo",password = "demo",serverName = "",// set it to an empty value
    portNumber = -1,// set it to an empty value
    databaseName = "")  // set it to an empty value

异常

在启动Payara期间,失败的情况下将发生以下异常:

microservice_1  | [2019-12-13T14:29:00.071+0000] [] [SEVERE] [] [org.eclipse.persistence.session./file:/tmp/payaramicro-rt7729847129244438567tmp/applications/ROOT/WEB-INF/classes/_demo.ejb] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1576247340071] [levelValue: 1000] [[
microservice_1  |
microservice_1  | Local Exception Stack:
microservice_1  | Exception [eclipseLink-4002] (eclipse Persistence Services - 2.7.4.payara-p2): org.eclipse.persistence.exceptions.DatabaseException
microservice_1  | Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: Connection could not be allocated because: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
microservice_1  | Error Code: 0
microservice_1  |   at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:318)
microservice_1  |   at org.eclipse.persistence.sessions.JNDIConnector.connect(JNDIConnector.java:150)
microservice_1  |   at org.eclipse.persistence.sessions.DatasourceLogin.connectToDatasource(DatasourceLogin.java:172)
microservice_1  |   at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.setOrDetectDatasource(DatabaseSessionImpl.java:233)
microservice_1  |   at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.loginAndDetectDatasource(DatabaseSessionImpl.java:815)
...
ct47308040 回答:@DataSourceDefinition 工作示例✅失败的例子❌奇怪的例子?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2926189.html

大家都在问