在CF中创建数据源时选择Spring Boot应该使用的参数?

Posted

技术标签:

【中文标题】在CF中创建数据源时选择Spring Boot应该使用的参数?【英文标题】:Selecting parameters that should be used by Spring Boot when creating datasource in CF? 【发布时间】:2016-09-25 23:42:10 【问题描述】:

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

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@6a98a805ConnectionPool[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 在启动时忽略了那些有利于环境提供的变量。

【问题讨论】:

您能否提供堆栈跟踪以及您正在使用的库的版本? Spring Boot + Spring Cloud 将愉快地解析该 URL - 它应该开箱即用。 嗨,信息已添加到问题的内容中:) 【参考方案1】:

我发现的解决方法是我遵循了Binding to Data Services with Spring Boot in Cloud Foundry 站点中描述的方法,有效地禁用了 DataSource 的自动重新配置,这导致从配置文件中获取连接参数(而不是从变量由 Stackato 环境提供)。

【讨论】:

以上是关于在CF中创建数据源时选择Spring Boot应该使用的参数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JPA 和 mysql 启动在 Spring Boot 中创建的应用程序时出错

Spring Boot:如果不存在,则在启动时在 mongodb 中创建文档

在 Spring Boot 中创建自定义查询时出错

在 Spring Boot 中创建名为“entityManagerFactory”的 bean 时出错

在 Spring Boot 中创建名为“batchConfigurer”的 bean 时出错

在 WebFlux 中创建名为 requestMappingHandlerMapping 的 bean 时出错(没有 Spring Boot)