2017-01-27 4 views
0

Я настраиваю мой DataSource в проекте Spring загрузки/Spring Cloud Connectors, работающие на Cloud Foundry с использованием Tomcat соединений JDBC драйвер Pool и MariaDB JDBC, как так:Невозможно установить connectionProperties с Spring Cloud Connectors в Cloud Foundry

@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); 
    } 
} 

по некоторым причинам только свойство, относящееся к размеру пула и maxWait но не connectionProperties становятся подобраны DataSource бобов - см выхода журнала:

maxActive = 4; initialSize = 4; maxWait = 2000; connectionProperties = null

Любые подсказки?

Примечание. Попытка установить connectionProperties через класс ConnectionConfig Spring также не работает.

ответ

2

Попробуйте использовать форму DataSourceConfig, которая принимает отдельные PoolConfig и ConnectionConfig бобов, как это:

@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); 
} 
+0

Журнал все еще показывает connectionProperties = null. На самом деле я сначала пробовал этот подход, и только после этого, следуя советам здесь: https://github.com/spring-cloud/spring-cloud-connectors/issues/173, попробовал удачу, arg конструктор DataSourceConfig, как показано в моем вопросе. –

+1

ОК, я понял, что происходит. Это причуда библиотеки Tomcat JDBC. Если вы посмотрите на источник метода 'setConnectionProperties()' [1], он фактически анализирует свойства и задает внутреннее поле 'dbProperties', а не внутреннее поле' connectionProperties'. Метод getConnectionProperties() '[2] возвращает значение поля' connectionProperties', а не поле 'dbProperties', заданное' setConnectionProperties() '. Если вы вызываете 'DataSource.getDbProperties()', вы увидите поля, установленные в 'ConnectionConfig'. –

+0

[1] http://svn.apache.org/viewvc/tomcat/trunk/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/DataSourceProxy.java?view=markup# l556 –

0

Попробуйте следующее:

Заменить

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

с

connProperties.put("connectionProperties", "useUnicode=yes;characterEncoding=UTF-8;"); 

Кроме того, вы можете также указать следующее свойство непосредственно в application.properties

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

+0

Log еще показывает connectionProperties = NULL; –

Смежные вопросы