DataSource adapters expose setCatalog/setSchema next to setUsername/setPassword

Issue: SPR-14501
This commit is contained in:
Juergen Hoeller 2016-07-21 14:06:40 +02:00
parent e756a5b54b
commit 610bdf1cc3
2 changed files with 79 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -39,6 +39,10 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
private String password;
private String catalog;
private String schema;
private Properties connectionProperties;
@ -88,6 +92,40 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
return this.password;
}
/**
* Specify a database catalog to be applied to each Connection.
* @since 4.3.2
* @see Connection#setCatalog
*/
public void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* Return the database catalog to be applied to each Connection, if any.
* @since 4.3.2
*/
public String getCatalog() {
return this.catalog;
}
/**
* Specify a database schema to be applied to each Connection.
* @since 4.3.2
* @see Connection#setSchema
*/
public void setSchema(String schema) {
this.schema = schema;
}
/**
* Return the database schema to be applied to each Connection, if any.
* @since 4.3.2
*/
public String getSchema() {
return this.schema;
}
/**
* Specify arbitrary connection properties as key/value pairs,
* to be passed to the Driver.
@ -152,7 +190,15 @@ public abstract class AbstractDriverBasedDataSource extends AbstractDataSource {
if (password != null) {
mergedProps.setProperty("password", password);
}
return getConnectionFromDriver(mergedProps);
Connection con = getConnectionFromDriver(mergedProps);
if (this.catalog != null) {
con.setCatalog(this.catalog);
}
if (this.schema != null) {
con.setSchema(this.schema);
}
return con;
}
/**

View File

@ -65,6 +65,10 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
private String password;
private String catalog;
private String schema;
private final ThreadLocal<JdbcUserCredentials> threadBoundCredentials =
new NamedThreadLocal<>("Current JDBC user credentials");
@ -93,6 +97,24 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
this.password = password;
}
/**
* Specify a database catalog to be applied to each retrieved Connection.
* @since 4.3.2
* @see Connection#setCatalog
*/
public void setCatalog(String catalog) {
this.catalog = catalog;
}
/**
* Specify a database schema to be applied to each retrieved Connection.
* @since 4.3.2
* @see Connection#setSchema
*/
public void setSchema(String schema) {
this.schema = schema;
}
/**
* Set user credententials for this proxy and the current thread.
@ -128,12 +150,17 @@ public class UserCredentialsDataSourceAdapter extends DelegatingDataSource {
@Override
public Connection getConnection() throws SQLException {
JdbcUserCredentials threadCredentials = this.threadBoundCredentials.get();
if (threadCredentials != null) {
return doGetConnection(threadCredentials.username, threadCredentials.password);
Connection con = (threadCredentials != null ?
doGetConnection(threadCredentials.username, threadCredentials.password) :
doGetConnection(this.username, this.password));
if (this.catalog != null) {
con.setCatalog(this.catalog);
}
else {
return doGetConnection(this.username, this.password);
if (this.schema != null) {
con.setSchema(this.schema);
}
return con;
}
/**