Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在Cloud Foundry中使用Spring云连接器设置connectionProperties_Java_Tomcat_Jdbc_Cloud Foundry_Spring Cloud - Fatal编程技术网

Java 无法在Cloud Foundry中使用Spring云连接器设置connectionProperties

Java 无法在Cloud Foundry中使用Spring云连接器设置connectionProperties,java,tomcat,jdbc,cloud-foundry,spring-cloud,Java,Tomcat,Jdbc,Cloud Foundry,Spring Cloud,我正在使用Tomcat JDBC连接池和MariaDB JDBC驱动程序在Cloud Foundry上运行的Spring Boot/Spring Cloud Connectors项目中设置数据源,如下所示: @Configuration @Profile("cloud") public class MyDataSourceConfiguration extends AbstractCloudConfig { @Bean public DataSource dataSource()

我正在使用Tomcat JDBC连接池和MariaDB JDBC驱动程序在Cloud Foundry上运行的Spring Boot/Spring Cloud Connectors项目中设置数据源,如下所示:

@Configuration
@Profile("cloud")
public class MyDataSourceConfiguration extends AbstractCloudConfig {
    @Bean
    public DataSource dataSource() {
        Map<String, Object> dataSourceProperties = new HashMap<>();
        dataSourceProperties.put("initialSize", "4"); // OK
        dataSourceProperties.put("maxActive", "4");   // OK
        dataSourceProperties.put("maxWait", "2000");  // OK
        dataSourceProperties.put("connectionProperties",      
        "useUnicode=yes;characterEncoding=utf8;"); // ignored
        DataSourceConfig conf = new DataSourceConfig(dataSourceProperties);
        return connectionFactory().dataSource(conf);
    }
}
@配置
@个人资料(“云”)
公共类MyDataSourceConfiguration扩展了AbstractCloudConfig{
@豆子
公共数据源数据源(){
Map dataSourceProperties=new HashMap();
dataSourceProperties.put(“initialSize”,“4”);//确定
dataSourceProperties.put(“maxActive”,“4”);//确定
dataSourceProperties.put(“maxWait”,“2000”);//确定
dataSourceProperties.put(“connectionProperties”,
“useUnicode=yes;characterEncoding=utf8;”;//已忽略
DataSourceConfig conf=新的DataSourceConfig(dataSourceProperties);
返回connectionFactory().dataSource(conf);
}
}
由于某些原因,DataSource bean只获取引用池大小和maxWait的属性,而不获取connectionProperties-请参阅日志输出:

maxActive=4;初始大小=4;maxWait=2000; connectionProperties=null

有什么提示吗

注意:尝试通过Spring的ConnectionConfig类设置connectionProperties也不起作用。

请尝试以下操作:

替换

connProperties.put("connectionProperties", "useUnicode=yes;characterEncoding=utf8;");

或者,您也可以直接在application.properties中指定以下属性

spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8

请尝试以下操作:

替换

connProperties.put("connectionProperties", "useUnicode=yes;characterEncoding=utf8;");

或者,您也可以直接在application.properties中指定以下属性


spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8

尝试使用
DataSourceConfig
的形式,该形式采用单独的
PoolConfig
ConnectionConfig
bean,如下所示:

@Bean
public DataSource dataSource() {
    PoolConfig poolConfig = new PoolConfig(4, 4, 2000);
    ConnectionConfig connectionConfig = new ConnectionConfig("useUnicode=yes;characterEncoding=utf8;");
    DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, connectionConfig);
    return connectionFactory().dataSource(dbConfig);
}

尝试使用
DataSourceConfig
的形式,该形式采用单独的
PoolConfig
ConnectionConfig
bean,如下所示:

@Bean
public DataSource dataSource() {
    PoolConfig poolConfig = new PoolConfig(4, 4, 2000);
    ConnectionConfig connectionConfig = new ConnectionConfig("useUnicode=yes;characterEncoding=utf8;");
    DataSourceConfig dbConfig = new DataSourceConfig(poolConfig, connectionConfig);
    return connectionFactory().dataSource(dbConfig);
}

日志仍然显示connectionProperties=null。事实上,我首先尝试了这种方法,然后才按照这里的建议,使用DataSourceConfig的one-arg构造函数尝试了我的运气,如我的问题所示。好的,我知道发生了什么。这是TomcatJDBC库的一个怪癖。如果查看
setConnectionProperties()
方法[1]的源代码,它实际上解析属性并设置内部
dbProperties
字段,而不是内部
connectionProperties
字段。
getConnectionProperties()
方法[2]返回
connectionProperties
字段的值,而不是
setConnectionProperties()
设置的
dbProperties
字段的值。如果调用
DataSource.getDbProperties()
您将看到在
ConnectionConfig
[1][2]中设置的字段,只是为了完整:因为没有方法
javax.sql.DataSource.getDbProperties()
您需要将
DataSource
对象强制转换为
org.apache.tomcat.jdbc.pool.DataSource
,以获得
connectionProperties
的正确值。因此,如果使用Tomcat JDBC库,目前无法以与实现无关的方式获取为自定义数据源指定的所有属性。日志仍然显示connectionProperties=null。事实上,我首先尝试了这种方法,然后才按照这里的建议,使用DataSourceConfig的one-arg构造函数尝试了我的运气,如我的问题所示。好的,我知道发生了什么。这是TomcatJDBC库的一个怪癖。如果查看
setConnectionProperties()
方法[1]的源代码,它实际上解析属性并设置内部
dbProperties
字段,而不是内部
connectionProperties
字段。
getConnectionProperties()
方法[2]返回
connectionProperties
字段的值,而不是
setConnectionProperties()
设置的
dbProperties
字段的值。如果调用
DataSource.getDbProperties()
您将看到在
ConnectionConfig
[1][2]中设置的字段,只是为了完整:因为没有方法
javax.sql.DataSource.getDbProperties()
您需要将
DataSource
对象强制转换为
org.apache.tomcat.jdbc.pool.DataSource
,以获得
connectionProperties
的正确值。因此,如果您使用Tomcat JDBC库,目前无法以与实现无关的方式获取您为定制的
数据源指定的所有属性。