选择在 CF 中创建数据源时 Spring 引导应使用的参数



我有一个带有Spring Boot(1.3.3.RELEASE)/Cloud(Brixton.M5)的应用程序,MySQL部署在Stackato CF中,我在那里使用CrudRepository。不幸的是,当应用程序启动时,Spring Boot 会自动使用 Stackato 提供的 JDBC URL 之一来配置数据源,其中包括用户名和密码,例如

jdbc:mysql://yourUser:yourPassword@172.16.1.48:3306/yourDB

不幸的是,显然 Spring Boot 假设 : 之前的所有内容都是我的主机,而 yourPassword@172.16.1.48:3306 是端口,最后我得到了一个讨厌的错误。

这是我在应用程序启动时看到的输出:

[app.0] 2016-05-27T15:25:59.000Z: 2016-05-27 08:25:59.266 INFO 148 --- [ main] urceCloudServiceBeanFactoryPostProcessor : Auto-reconfiguring beans of type javax.sql.DataSource
[app.0] 2016-05-27T15:25:59.000Z: 2016-05-27 08:25:59.303 INFO 148 --- [ main] o.c.r.o.s.c.s.r.PooledDataSourceCreator : Found Tomcat high-performance connection pool on the classpath. Using it for DataSource connection pooling.
[app.0] 2016-05-27T15:25:59.000Z: 2016-05-27 08:25:59.345 INFO 148 --- [ main] urceCloudServiceBeanFactoryPostProcessor : Reconfigured bean dataSource into singleton service connector org.apache.tomcat.jdbc.pool.DataSource@6a98a805{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=com.mysql.jdbc.Driver; maxActive=4; maxIdle=100; minIdle=0; initialSize=0; maxWait=30000; testOnBorrow=true; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:mysql://uk0pSal2suQS6:pajxAy1Yav22j@172.16.1.48:3306/dd558a39d22d44c059bb438d3b61941ef; username=null; validationQuery=/* ping */ SELECT 1; validationQueryTimeout=-1; validatorClassName=null; validationInterval=30000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAba

这是我后来得到的错误:

[app.0] 2016-05-27T18:23:19.000Z: 2016-05-27 11:23:19.767 WARN 148 --- [io-44230-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 01S00
[app.0] 2016-05-27T18:23:19.000Z: 2016-05-27 11:23:19.767 ERROR 148 --- [io-44230-exec-6] o.h.engine.jdbc.spi.SqlExceptionHelper : Illegal connection port value 'pajxAy1Yav22j@172.16.1.48:3306'

任何建议如何在不放弃 CrudTemplate 的情况下解决这个问题? :)

我已经尝试在配置文件中使用spring.datasource.username 和 spring.datasource.password 设置正确的 spring.datasource.url,但似乎 Spring Boot/Cloud 忽略了启动时的那些,转而支持环境提供的变量。

我发现的解决方法是,我遵循了在Cloud Foundry站点中使用Spring Boot绑定到数据服务中所述的方法,有效地禁用了数据源的自动重新配置,这导致从配置文件(而不是从Stackato环境提供的变量)中获取连接参数。

相关内容

最新更新