![](/img/trans.png)
[英]How do I configure Morphia/MongoDB datasource in PlayFramework 2.5 (JAVA)
[英]How do I manually configure a DataSource in Java?
我正在嘗試在http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html上遵循 Sun 的 JDBC 教程
它給出了以下示例代碼:
DataSource ds = (DataSource) org.apache.derby.jdbc.ClientDataSource()
ds.setPort(1527);
ds.setHost("localhost");
ds.setUser("APP")
ds.setPassword("APP");
Connection con = ds.getConnection();
此代碼無法編譯,因為DataSource
接口沒有這些方法,除了最后調用的getConnection()
方法。
(這里是 javadoc:http ://java.sun.com/javase/6/docs/api/javax/sql/DataSource.html )
我錯過了什么?
編輯:我實際上是在嘗試連接到 MySQL ( com.mysql.jdbc
),但我找不到相關的 javadoc。 我會接受一個指向我的答案:
1) com.mysql.jdbc
關於我能理解的DataSource
文檔,或
2) 給出了一個例子來說明教程的代碼應該是什么,對於任何數據庫。
您可能想要查看的一件事是Commons DBCP項目。 它提供了一個BasicDataSource ,其配置與您的示例非常相似。 要使用它,您需要在類路徑中包含數據庫供應商的 JDBC JAR,並且必須以正確的格式指定供應商的驅動程序類名稱和數據庫 URL。
編輯:
如果你想為 MySQL 配置一個BasicDataSource
,你可以這樣做:
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("username");
dataSource.setPassword("password");
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>");
dataSource.setMaxActive(10);
dataSource.setMaxIdle(5);
dataSource.setInitialSize(5);
dataSource.setValidationQuery("SELECT 1");
需要DataSource
代碼然后可以使用它。
基本上在 JDBC 中,大多數這些屬性在 API 中是不可配置的,而是依賴於實現。 JDBC 處理此問題的方式是允許每個供應商的連接 URL 不同。
因此,您要做的是注冊驅動程序,以便 JDBC 系統可以知道如何處理 URL:
DriverManager.registerDriver((Driver) Class.forName("com.mysql.jdbc.Driver").newInstance());
然后形成 URL:
String url = "jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]"
最后,使用它來獲取連接:
Connection c = DriverManager.getConnection(url);
在更復雜的 JDBC 中,您涉及連接池等,應用程序服務器通常有自己的在 JNDI 中注冊驅動程序的方式,您從那里查找數據源,並在其上調用 getConnection。
關於 MySQL 支持的屬性,請參見此處。
編輯:還有一個想法,從技術上講,只要有一行代碼執行 Class.forName("com.mysql.jdbc.Driver") 就足夠了,因為該類應該有自己的靜態初始化程序來注冊一個版本,但有時JDBC 驅動程序沒有,所以如果您不確定,注冊第二個驅動程序沒有什么害處,它只是在內存中創建一個重復的對象。
DataSource 是特定於供應商的,對於 MySql,您可以使用 MySql Java 連接器 jar 中提供的 MysqlDataSource:
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("xyz");
dataSource.setUser("xyz");
dataSource.setPassword("xyz");
dataSource.setServerName("xyz.yourdomain.com");
以 MYSQL 為例:1) 使用數據庫連接池:例如:Apache Commons DBCP ,此外,您的類路徑中需要 basicDataSource jar 包
@Bean
public BasicDataSource dataSource() {
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/gene");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
2)使用基於JDBC的驅動程序,如果不考慮連接池,通常使用:
@Bean
public DataSource dataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/gene");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
我認為這個例子是錯誤的 -javax.sql.DataSource
也沒有這些屬性。 您的DataSource
需要是org.apache.derby.jdbc.ClientDataSource
類型,它應該具有這些屬性。
您引用的 DataSource 的 javadoc 是錯誤的包。 你應該看看javax.sql.DataSource 。 如您所見,這是一個界面。 主機名和端口名配置取決於實現,即您使用的 JDBC 驅動程序。
我沒有檢查過 Derby javadocs,但我想代碼應該像這樣編譯:
ClientDataSource ds = org.apache.derby.jdbc.ClientDataSource()
ds.setHost etc....
對於 postgres,下面的工作。 我實際上在整數測試中使用了它。 我想應該更多地考慮生產用途。
PGSimpleDataSource ds = new PGSimpleDataSource() ;
ds.setServerName( "localhost" );
ds.setDatabaseName( "your_db_name_here" );
ds.setUser( "scott" );
ds.setPassword( "tiger" );
該類捆綁在 postgres jdbc 驅動程序中。
我關注的原始stackoverflow帖子: https : //stackoverflow.com/a/45091982/3877642
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.