没有绑定play.db数据库的实现



使用hikarip 时,我在访问数据库时遇到问题

这是我的reference.conf

play {
  modules {
    enabled += "play.api.db.DBModule"
    enabled += "play.api.db.HikariCPModule"
  }
  # Database configuration
  db {
    # The name of the configuration item from which to read database config.
    # So, if set to db, means that db.default is where the configuration for the
    # database named default is found.
    config = "db"
    # The name of the default database, used when no database name is explicitly
    # specified.
    default = "default"
    # The default connection pool.
    # Valid values are:
    #  - default - Use the default connection pool provided by the platform (HikariCP)
    #  - hikaricp - Use HikariCP
    #  - bonecp - Use BoneCP
    #  - A FQCN to a class that implements play.api.db.ConnectionPool
    pool = "default"
    # The prototype for database configuration
    prototype = {
      # The connection pool for this database.
      # Valid values are:
      #  - default - Delegate to play.db.pool
      #  - hikaricp - Use HikariCP
      #  - bonecp - Use BoneCP
      #  - A FQCN to a class that implements play.api.db.ConnectionPool
      pool = "default"
      # The database driver
      driver = null
      # The database url
      url = null
      # The username
      username = null
      # The password
      password = null
      # If non null, binds the JNDI name to this data source to the given JNDI name.
      jndiName = null
      # If it should log sql statements
      logSql = false
      # HikariCP configuration options
      hikaricp {
        # The datasource class name, if not using a URL
        dataSourceClassName = null
        # Data source configuration options
        dataSource {
        }
        # Whether autocommit should be used
        autoCommit = true
        # The connection timeout
        connectionTimeout = 30 seconds
        # The idle timeout
        idleTimeout = 10 minutes
        # The max lifetime of a connection
        maxLifetime = 30 minutes
        # If non null, the query that should be used to test connections
        connectionTestQuery = null
        # If non null, sets the minimum number of idle connections to maintain.
        minimumIdle = null
        # The maximum number of connections to make.
        maximumPoolSize = 10
        # If non null, sets the name of the connection pool. Primarily used for stats reporting.
        poolName = null
        # Sets whether or not construction of the pool should fail if the minimum number of connections
        # coludn't be created.
        initializationFailFast = true
        # Sets whether internal queries should be isolated
        isolateInternalQueries = false
        # Sets whether pool suspension is allowed.  There is a performance impact to enabling it.
        allowPoolSuspension = false
        # Sets whether connections should be read only
        readOnly = false
        # Sets whether mbeans should be registered
        registerMbeans = false
        # If non null, sets the catalog that should be used on connections
        catalog = null
        # A SQL statement that will be executed after every new connection creation before adding it to the pool
        connectionInitSql = null
        # If non null, sets the transaction isolation level
        transactionIsolation = null
        # The validation timeout to use
        validationTimeout = 5 seconds
        # If non null, sets the threshold for the amount of time that a connection has been out of the pool before it is
        # considered to have leaked
        leakDetectionThreshold = null
      }
      # BoneCP configuration options
      bonecp {
        # Whether autocommit should be used
        autoCommit = true
        # If non null, the transaction isolation level to use.
        isolation = null
        # If non null, sets the catolog to use
        defaultCatalog = null
        # Whether the database should be treated as read only
        readOnly = false
        # Whether opened statements should be automatically closed
        closeOpenStatements = true
        # The pool partition count
        partitionCount = 1
        # The maximum number of connections per partition
        maxConnectionsPerPartition = 30
        # The minimum number of connections per partition
        minConnectionsPerPartition = 5
        # The increment to acquire connections in
        acquireIncrement = 1
        # The acquire retry attempts
        acquireRetryAttempts = 10
        # The delay to wait before retrying to acquire a connection
        acquireRetryDelay = 1 second
        # The connection timeout
        connectionTimeout = 1 second
        # The idle age to expire connections
        idleMaxAge = 10 minutes
        # The maximum a connection should live for
        maxConnectionAge = 1 hour
        # Whether JMX reporting should be disabled
        disableJMX = true
        # Whether statistics should be kept
        statisticsEnabled = false
        # How frequently idle connections should be tested
        idleConnectionTestPeriod = 1 minute
        # Disable connection tracking
        disableConnectionTracking = true
        # The time limit for executing queries. 0 means no time limit.
        queryExecuteTimeLimit = 0
        # Whether the connection should be reset when closed
        resetConnectionOnClose = false
        # Whether unresolved transations should be detected
        detectUnresolvedTransactions = false
        # An SQL statement to execute to test if a connection is ok after it is created.
        # Null turns this feature off.
        initSQL = null
        # An SQL statement to execute to test if a connection is ok before giving it out of the pool.
        # Null turns this feature off.
        connectionTestStatement = null
        # Whether SQL statements should be logged
        logStatements = false
      }
    }
  }
  # Evolutions configuration
  evolutions {
    # Whether evolutions are enabled
    enabled = true
    # Database schema in which the generated evolution and lock tables will be saved to
    schema = ""
    # Whether evolution updates should be performed with autocommit or in a manually managed transaction
    autocommit = true
    # Whether locks should be used when apply evolutions.  If this is true, a locks table will be created, and will
    # be used to synchronise between multiple Play instances trying to apply evolutions.  Set this to true in a multi
    # node environment.
    useLocks = false
    # Whether evolutions should be automatically applied.  In prod mode, this will only apply ups, in dev mode, it will
    # cause both ups and downs to be automatically applied.
    autoApply = false
    # Whether downs should be automatically applied.  This must be used in combination with autoApply, and only applies
    # to prod mode.
    autoApplyDowns = false
    # Db specific configuration. Should be a map of db names to configuration in the same format as this.
    db {
    }
  }
}

这是我的application.conf

play.db.pool=hikaricp
play.db.prototype.hikaricp.driver=com.mysql.jdbc.Driver
play.db.prototype.hikaricp.url="jdbc:mysql://192.168.1.37/mydb?zeroDateTimeBehavior=convertToNull"
play.db.prototype.hikaricp.username=biboy
play.db.prototype.hikaricp.password="biboy"
play.db.prototype.hikaricp.maximumPoolSize            = 5
play.db.prototype.hikaricp.minimumIdle                = 0
play.db.prototype.hikaricp.maxLifetime                = 2 minutes
play.db.prototype.hikaricp.connectionTestQuery        = "/* ping */ SELECT 1"
play.db.prototype.hikaricp.leakDetectionThreshold     = 30 seconds
play.db.prototype.hikaricp.idleTimeout                = 60 seconds
play.db.prototype.hikaricp.connectionTimeout          = 3 minutes
play.db.prototype.hikaricp.validationTimeout          = 1 minute

错误总是说

1) No implementation for play.db.Database was bound.
[info]   while locating play.db.Database
[info]     for field at com.spingine.base.BaseController.database(BaseController.java:12)
[info]   while locating com.spingine.controllers.CreateTaskItinerary
[info]     for parameter 3 at router.Routes.<init>(Routes.scala:88)
[info]   while locating router.Routes
[info]   while locating play.api.inject.RoutesProvider
[info]   while locating play.api.routing.Router

这就是我访问数据库的方式

public class AddAccount extends BaseController {
    @Inject
    Database db;
    public void add(){
     // omitted for clarity of the problem
    }
}

但是,当我在没有hikari-cp的情况下使用db的默认设置时,一切都很顺利,但当我使用hikarip时,问题就存在了。如何缓解此问题?

我认为application.conf中的数据库配置覆盖是错误的。您应该设置没有hikarip前缀的数据库配置:

play.db.prototype.driver=com.mysql.jdbc.Driver
play.db.prototype.url="jdbc:mysql://192.168.1.37/mydb?zeroDateTimeBehavior=convertToNull"
play.db.prototype.username=*****
play.db.prototype.password=*****

最新更新