java - 为什么我无法使用 Dropwizard 连接到 AWS RDS 实例?

标签 java mysql amazon-web-services amazon-rds dropwizard

我现在有一个简单的 Dropwizard API,其中一个端点用于返回 AWS RDS 数据库中的所有用户,还有一个“hello world”端点。我可以使用开发计算机上的 MySQL Workbench 连接到我的 RDS 实例,因此我知道该连接是允许的。

我的应用程序构建并最初运行良好。我有一个正在运行的“hello world”端点,但是当我尝试访问我的 /users/all 端点时,出现以下错误:

ERROR [2016-05-01 23:47:07,305] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: b92c1a9ace3378bf
! java.sql.SQLException: No database selected
! at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
! at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
! at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
! at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
! at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
! at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
! at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
! at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
! at org.skife.jdbi.v2.SQLStatement.internalExecute(SQLStatement.java:1327)
! ... 66 common frames omitted

我相信我正在使用 Sonatype Nexus Snapshots 中的 1.0.0-rc3-SNAPSHOT Dropwizard 版本。

在我的 config.yml 中,我有:

database:
  driverClass: com.mysql.jdbc.Driver
  user: <my_user>
  password: <my_password>
  url: jdbc:mysql://<my_db>.blah.rds.amazonaws.com

我的配置类非常简单,仅限于以下内容。

public class AppConfiguration extends Configuration {

    @Valid
    @NotNull
    private DataSourceFactory database = new DataSourceFactory();

    @JsonProperty("database")
    public DataSourceFactory getDataSourceFactory() {
        return database;
    }

}

我的服务运行方法如下所示:

@Override
public void run(AppConfiguration configuration, Environment environment) {

    environment.jersey().register(RolesAllowedDynamicFeature.class);
    environment.jersey().register(new AppResource());

    /* initialize DB and DAOs */
    final DBIFactory factory = new DBIFactory();
    final DBI jdbi = factory.build(environment, configuration.getDataSourceFactory(), "mysql");

    final UserDAO userDAO = jdbi.onDemand(UserDAO.class);

    /* Initialize Resources */
    final UserResource userResource = new UserResource(userDAO);
    environment.jersey().register(userResource);

}

我尝试在运行时调试应用程序,并看到我的 userDAO 对象已创建。我尝试挖掘实例变量/函数,但找不到任何有用的信息来解释为什么它没有连接。

最佳答案

您没有在 JDBC URL 中正确指定数据库。看指定的格式here : jdbc:mysql://[主机1][:端口1][,[主机2][:端口2]]...[/[数据库]]

关于java - 为什么我无法使用 Dropwizard 连接到 AWS RDS 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36973392/

相关文章:

java - 在jboss中使用jax-ws

php - 更改laravel sql查询的默认日期格式

amazon-web-services - 如何将Amazon ECS添加到我已经创建的非默认VPC中?

amazon-web-services - 如何在模板中指定没有像 Web 界面之类的首选项的子网?

java - 从 Java 访问 Facebook 营销 API

java - 我的 'select'方法的返回类型是否错误?

mysql - 是否可以在 SQL 中从表中 SELECT * FROM WHERE column 1 = something 而不是 column_name = something

python - S3 PutObject 无提示故障?

java - 在 Javafx 中将字段绑定(bind)到 Controller

mysql - 选择属于另一个表中条目组合的表条目(mysql)