![](/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.