Estou configurando meu DataSource em um projeto Spring Boot / Spring Cloud Connectors em execução no Cloud Foundry usando o Tomcat JDBC Connection Pool e o driver MariaDB JDBC da seguinte maneira:
@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);
}
}
Por algum motivo, apenas as propriedades referentes ao tamanho do pool e maxWait, mas não as connectionProperties, são captadas pelo bean DataSource - consulte a saída do log:
maxActive = 4; initialSize = 4; maxWait = 2000; connectionProperties = null
Alguma dica?
Nota: Tentar definir o connectionProperties através da classe ConnectionConfig do Spring também não funcionou.
Respostas:
2 para resposta № 1Tente usar o formulário de DataSourceConfig
que leva separado PoolConfig
e ConnectionConfig
feijão, assim:
@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 para resposta № 2
Tente o seguinte:
Substituir
connProperties.put("connectionProperties", "useUnicode=yes;characterEncoding=utf8;");
com
connProperties.put("connectionProperties", "useUnicode=yes;characterEncoding=utf-8;");
Como alternativa, você também pode especificar a seguinte propriedade diretamente em application.properties
spring.datasource.connectionProperties=useUnicode=true;characterEncoding=utf-8;